一
- —题目要求【金仓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')
二
- 存储过程中创建临时表 tmp_table1 , 字段id 自增,name 文本。
- 以参数的方式,控制插入临时表中的数据条数。参数大于10,必须与动态SQL方式插入且不插入id.(以字符串的方式拼接sql语句)
- 查询表中id小于10的所有数据,将name字段凭借成字符串,以参数的形式返回。
- 通过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)