如何在for循环中存储多列输出
How to store mutiple column output in a for loop
设计一个函数来显示 column_name 和空值的计数
预计o/p
Col_name,总计数
美国广播公司 45
防御 30
10
enter code here
CREATE OR REPLACE FUNCTION gtr_ops.f_column_validation()
RETURNS TABLE
(
column_name character varying(50),
total_blank_records bigint
)
AS
$BODY$
DECLARE
i record;
ecode CHARACTER VARYING(1000);
vsql text;
BEGIN
raise notice 'entering for loop';
for i IN (select column_name from information_schema.columns where table_schema='xyz'
and table_name='xyz')
LOOP
--RAISE NOTICE '%', i.column_name;
column_name := i.column_name;
vsql := 'select count(*) from schema.tablename
where '|| i.column_name||' is null
group by '|| i.column_name;
RAISE NOTICE '%', vsql;
EXECUTE vsql into total_blank_records;
RETURN NEXT;
END LOOP;
EXCEPTION
WHEN OTHERS THEN
ecode := SQLSTATE||' Error Message:'|| SQLERRM;
raise notice 'Err Msg: %',ecode;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
错误
错误消息:42703 错误 Message:record "i" 没有字段 "column_name"
需要指导来解决错误
好吧,我试过你的代码并得到了一些不同的错误:
Err Msg: 42702 Error Message:column reference "column_name" is ambiguous
确实,您在 return 类型和 select (select column_name from...
) 中使用了 column_name
。当我更改为 select columns.column_name from...
时,它起作用了。
但是,您必须将 schema.tablename
替换为适当的值(就像您对 i.column_name
所做的那样):
第一个:
for i IN (select columns.table_schema, columns.table_name, columns.column_name from information_schema.columns where ...
然后:
vsql := 'select count(*) from ' || i.table_schema || '.' || i.table_name || '
但请记住,您在 for
循环的查询中将 table_schema 和 table_name 硬编码为 xyz.xyz
。
我正在使用 PostgreSQL 9.5.3 进行测试。
设计一个函数来显示 column_name 和空值的计数
预计o/p Col_name,总计数 美国广播公司 45 防御 30 10
enter code here
CREATE OR REPLACE FUNCTION gtr_ops.f_column_validation()
RETURNS TABLE
(
column_name character varying(50),
total_blank_records bigint
)
AS
$BODY$
DECLARE
i record;
ecode CHARACTER VARYING(1000);
vsql text;
BEGIN
raise notice 'entering for loop';
for i IN (select column_name from information_schema.columns where table_schema='xyz'
and table_name='xyz')
LOOP
--RAISE NOTICE '%', i.column_name;
column_name := i.column_name;
vsql := 'select count(*) from schema.tablename
where '|| i.column_name||' is null
group by '|| i.column_name;
RAISE NOTICE '%', vsql;
EXECUTE vsql into total_blank_records;
RETURN NEXT;
END LOOP;
EXCEPTION
WHEN OTHERS THEN
ecode := SQLSTATE||' Error Message:'|| SQLERRM;
raise notice 'Err Msg: %',ecode;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
错误 错误消息:42703 错误 Message:record "i" 没有字段 "column_name"
需要指导来解决错误
好吧,我试过你的代码并得到了一些不同的错误:
Err Msg: 42702 Error Message:column reference "column_name" is ambiguous
确实,您在 return 类型和 select (select column_name from...
) 中使用了 column_name
。当我更改为 select columns.column_name from...
时,它起作用了。
但是,您必须将 schema.tablename
替换为适当的值(就像您对 i.column_name
所做的那样):
第一个:
for i IN (select columns.table_schema, columns.table_name, columns.column_name from information_schema.columns where ...
然后:
vsql := 'select count(*) from ' || i.table_schema || '.' || i.table_name || '
但请记住,您在 for
循环的查询中将 table_schema 和 table_name 硬编码为 xyz.xyz
。
我正在使用 PostgreSQL 9.5.3 进行测试。