从函数中获取给定表名的列名
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 的连接字符串?
从 PersistEntity/PersistField 映射到 DB 中的列名和表名的规则是啥