我的代码:
CREATE OR REPLACE FUNCTION sizeOfTableFunction
(
p_tableName varchar(100)
)
RETURNS integer
AS $$
DECLARE
p_tableSize integer;
BEGIN
SELECT count(*) into p_tableSize from p_tableName;
return p_tableSize;
END;
$$ LANGUAGE plpgsql STRICT;
功能已正确创建:
CREATE FUNCTION
执行:
SELECT * FROM sizeOfTableFunction('Run');
输出-执行功能是否有问题?:
mydb=> SELECT * FROM sizeOfTableFunction('Run');
ERROR: relation "p_tablename" does not exist
LINE 1: SELECT count(*) from p_tableName
^
QUERY: SELECT count(*) from p_tableName
CONTEXT: PL/pgSQL function "sizeoftablefunction" line 5 at SQL statement
为此,您需要动态SQL:
CREATE OR REPLACE FUNCTION sizeOfTableFunction
(
p_tableName varchar(100)
)
RETURNS integer
AS $$
DECLARE
p_tableSize integer;
BEGIN
execute 'SELECT count(*) from '||p_tableName into p_tablesize; -- this is the difference
return p_tableSize;
END;
$$ LANGUAGE plpgsql STRICT;
为了安全起见,最好使用该quote_ident
功能,以防万一您的表名包含特殊字符。它还为您提供了防止SQL注入的保护。
execute 'SELECT count(*) from '||quote_ident(p_tableName) into p_tablesize;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句