kingbase数据库存储过程以及函数练习题

  1. —题目要求【金仓kingbase数据库】
    —根据提供的 SCHEMA 名字获取,该模式下所有表的 表名、表大小、数据条数
    —函数的方式实现
CREATE OR REPLACE function SELECT_table_1(sch TEXT)  
RETURN table(tablename TEXT,bsize text,num int) --返回一个表的类型
AS 
DECLARE
	result1 record;  	--游标结果
	aa TEXT;    		--获取表名
	bg   TEXT ; 		--大小
	num  int;			--条数
	result2 TEXT;		--动态变量
	cur1 CURSOR FOR SELECT  ('"' || table_schema || '"."' || table_name || '"') as table_name FROM "information_schema".tables WHERE table_schema=sch;
BEGIN 
	CREATE TEMP TABLE tmp_a2(     --输出到临时表
	tablename TEXT DEFAULT '',
	bSIZE TEXT DEFAULT '',
	num int DEFAULT 0
	)ON COMMIT drop;
	OPEN cur1;
	LOOP
		FETCH cur1 INTO result1;
		EXIT WHEN cur1%notfound;
		aa=result1.table_name;	   					--获取表名
		--RAISE NOTICE '%',aa;
		bg=pg_size_pretty(pg_relation_size(aa));    --获取对应表大小
		--RAISE NOTICE '%',bg;
		EXECUTE 'SELECT count(*) FROM '||aa  INTO num;
		--获取表数据量
		--RAISE NOTICE '%',num;
		INSERT INTO tmp_a2 values(aa,bg,num);		--插入数据到临时表
	END LOOP;
	CLOSE cur1;
	RETURN query SELECT * FROM tmp_a2;
END;
--调用
SELECT * FROM select_table_1('dbo');

2、—题目要求【金仓kingbase数据库】
—根据提供的 SCHEMA 名字获取,该模式下所有表的 表名、表大小、数据条数
—存储过程的方式实现


CREATE OR REPLACE PROCEDURE SELECT_table(sch text)
AS 
DECLARE
	result1 record;  	--游标结果
	aa TEXT;    		--获取表名
	bg   TEXT ; 		--大小
	num  int;			--条数
	result2 TEXT;		--动态变量
	cur1 CURSOR FOR SELECT  ('"' || table_schema || '"."' || table_name || '"') as table_name FROM "information_schema".tables WHERE table_schema=sch;
BEGIN 
	CREATE TEMP TABLE tmp_a1(     --输出到临时表
	tablename TEXT DEFAULT '',
	bSIZE TEXT DEFAULT '',
	num int DEFAULT 0
	)ON COMMIT drop;
	OPEN cur1;
	LOOP
		FETCH cur1 INTO result1;
		EXIT WHEN cur1%notfound;
		RAISE NOTICE '%',result1;
		aa=result1.table_name;	   					--获取表名
		--RAISE NOTICE '%',aa;
		bg=pg_size_pretty(pg_relation_size(aa));    --获取对应表大小
		--RAISE NOTICE '%',bg;
		result2:='SELECT count(*) FROM '|| aa;
		EXECUTE  result2 INTO num;		--获取表数据量
		--RAISE NOTICE '%',num;
		INSERT INTO tmp_a1 values(aa,bg,num);		--插入数据到临时表
	END LOOP;
	CLOSE cur1;
	SELECT tablename AS 表名,bsize AS 大小,num AS 数据条数  FROM tmp_a1;
END;
--调用
CALL SELECT_table('dbo')

  1. 存储过程中创建临时表 tmp_table1 , 字段id 自增,name 文本。
  2. 以参数的方式,控制插入临时表中的数据条数。参数大于10,必须与动态SQL方式插入且不插入id.(以字符串的方式拼接sql语句)
  3. 查询表中id小于10的所有数据,将name字段凭借成字符串,以参数的形式返回。
  4. 通过ksql调用,并输出返回的参数值
CREATE OR REPLACE PROCEDURE ppp(o int)
AS 
DECLARE 
i int DEFAULT 1;
result1 TEXT DEFAULT '';
BEGIN
	ALTER SEQUENCE t_seq RESTART WITH 1;   --重置序列
	CREATE TEMP TABLE tmp_table1
	(
	 	id int DEFAULT nextval('T_seq') ,
	 	name TEXT
	)ON COMMIT drop;
	IF o>10 THEN 
		WHILE i<o LOOP 
			EXECUTE 'INSERT INTO tmp_table1(name) values(''第'||i||''')';
 			--RAISE NOTICE '%',i;
			i=i+1;
		END LOOP;
		SELECT string_agg(name,'') INTO result1 FROM tmp_table1 WHERE id<10;
		SELECT result1;
		RETURN;
	ELSE 
		RAISE EXCEPTION '输入值小于11:输入的值为%',o;
	END IF;	
END;

CALL ppp(13)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值