从函数中获取给定表名的列名

时间:2013-12-10 05:22:14

标签: sql postgresql plpgsql dynamic-sql

我想手动调用表名输入类型然后结果应该是表的详细信息,我试过那些函数

  1. 第一项功能正在运作。
  2. 第二个功能不起作用。
  3. 1)

    DECLARE      
    All_columns varchar;        
    Tab_name ALIAS FOR $1 ;       
    BEGIN       
    FOR All_columns IN SELECT column_name       
    FROM information_schema.columns      
    WHERE table_name=Tab_name     
    loop      
    raise notice 'Columns:%',All_columns;     
    end loop;     
    return All_columns;    
    END;    
    
    select test_levelfunction1('country_table');    
    

    显示国家/地区表的所有列

    2)

    DECLARE     
    All_columns varchar    ;          
    Tab_name ALIAS FOR $1  ;      
    BEGIN          
    FOR All_columns IN SELECT Tab_name.*     
    FROM Tab_name     
    loop     
    raise notice 'Columns:%',All_columns;     
    end loop;     
    return All_columns;     
    END;      
    

    致电select test_levelfunction1('country_table');会导致错误 我需要country_table的所有细节 我该如何修复这个功能?

2 个答案:

答案 0 :(得分:1)

就我阅读它们而言,这两种功能都不起作用。或者你希望第一个输入而不是列名。

您可能希望在两个函数中使用动态sql,例如:

EXECUTE $x$SELECT * FROM $x$ || Tab_name::regclass

http://www.postgresql.org/docs/current/static/plpgsql-statements.html

答案 1 :(得分:1)

您可以在很大程度上简化此任务。这个SQL函数完成了这项工作:

CREATE OR REPLACE FUNCTION f_columns_of_tbl(_tbl regclass)
  RETURNS SETOF text AS
$func$
SELECT quote_ident(attname) AS col
FROM   pg_attribute
WHERE  attrelid = $1              -- valid, visible table name 
AND    attnum >= 1                -- exclude tableoid & friends
AND    NOT attisdropped           -- exclude dropped columns
ORDER  BY attnum
$func$ LANGUAGE sql;

呼叫:

SELECT f_columns_of_tbl('myschema.mytable');  -- optionally schema-qualified name

有关详细信息,链接和plpgsql版本会考虑您上一个问题的相关答案:
PLpgSQL function to find columns with only NULL values in a given table