代码之家  ›  专栏  ›  技术社区  ›  Thilak R

如何在for循环中存储多列输出

  •  0
  • Thilak R  · 技术社区  · 7 年前

    列名称,总计数 abc 45 def 30 fgh 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;
    

    错误

    需要指导来解决错误

    1 回复  |  直到 7 年前
        1
  •  0
  •   Adam    7 年前

    嗯,我试过你的代码,得到了一个不同的错误:

    错误消息:42702错误消息:列引用“column\u name”不明确

    事实上,您使用 column_name 在返回类型和选择中( select column_name from... 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 || '
    

    但请记住,您已经将table\u模式和table\u名称硬编码为 xyz.xyz 在您的查询中 for

    我在用PostgreSQL 9.5.3进行测试。