【问题标题】:Get column names for a given table name from a function从函数中获取给定表名的列名
【发布时间】:2013-12-10 05:22:14
【问题描述】:

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

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

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 的所有详细信息。
如何修复此功能?

【问题讨论】:

  • I want to call some table's details manually input type ...请说明你真正想要什么。
  • 是的。我需要手动输入表名然后结果应该是表的详细信息。

标签: sql postgresql plpgsql dynamic-sql


【解决方案1】:

就我阅读它们而言,这两个函数都不起作用。或者,您希望第一个返回您的输入而不是列名。

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

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

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

【讨论】:

    【解决方案2】:

    您可以在很大程度上简化此任务。这个 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

    【讨论】:

      猜你喜欢
      • 2016-11-27
      • 2020-10-22
      • 2019-01-09
      • 1970-01-01
      • 2011-12-03
      • 1970-01-01
      • 2011-03-25
      • 2022-12-17
      • 1970-01-01
      相关资源
      最近更新 更多