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

Posted

技术标签:

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

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

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

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 ...请说明你真正想要什么。 是的。我需要手动输入表名然后结果应该是表的详细信息。 【参考方案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

【讨论】:

以上是关于从函数中获取给定表名的列名的主要内容,如果未能解决你的问题,请参考以下文章

如何安全地创建一个查询,该查询将列出给定表名的列名,以及可能指向 SQL Server 或 MySQL 的连接字符串?

Oracle SQL 从执行计划中检索具有表名的列名作为表

从 PersistEntity/PersistField 映射到 DB 中的列名和表名的规则是啥

如何在 Oracle 中动态分析给定模式名和表名的元数据?

在 SQL Server 存储过程中查找表名的列名作为保留关键字

sql 获取包含给定字符串的表名和列名