我需要有关动态 SQL 和在函数中动态设置 table 名称的帮助
I need help regarding dynamic SQL and dynamically setting the table name in a function
所以,我需要创建一个函数,returns table 中的行数,table 名称必须由用户指定。这是我的代码:
CREATE OR REPLACE FUNCTION datiInTab( table regclass )
RETURNS NUMERIC(5) AS
$$
DECLARE
num NUMERIC(5);
cmd VARCHAR(1000):='SELECT COUNT(*) FROM ';
BEGIN
EXECUTE cmd || table;
RETURN num;
END;
$$
LANGUAGE plpgsql;
SELECT * FROM datiInTab(corsi);
这是我执行后 returns 的错误:
ERROR: ERRORE: la colonna "corsi" non esiste
LINE 1: SELECT * FROM datiInTab(corsi); ^ SQL state: 42703 Character: 25
表示“corsi”列不存在。
我尽可能多地调试,唯一的结论是我真的不知道我需要做什么才能使用这个动态调用。
编辑:regclass 是最后一分钟添加的,在尝试使用简单的 varchar 后,它返回了完全相同的错误
您不能命名变量 table。是保留字
你必须传递一个字符串,否则 postgres 认为你想传递一个列
CREATE OR REPLACE FUNCTION datiInTab( table1 regclass )
RETURNS NUMERIC(5) AS
$$
DECLARE
num NUMERIC(5);
cmd VARCHAR(1000):='SELECT COUNT(*) FROM ';
BEGIN
EXECUTE cmd || table1;
RETURN num;
END;
$$
LANGUAGE plpgsql;
✓
SELECT * FROM datiInTab('corsi');
ERROR: relation "corsi" does not exist
第 1 行:SELECT * 来自 datiInTab('corsi');
^
db<>fiddle here
所以,我需要创建一个函数,returns table 中的行数,table 名称必须由用户指定。这是我的代码:
CREATE OR REPLACE FUNCTION datiInTab( table regclass )
RETURNS NUMERIC(5) AS
$$
DECLARE
num NUMERIC(5);
cmd VARCHAR(1000):='SELECT COUNT(*) FROM ';
BEGIN
EXECUTE cmd || table;
RETURN num;
END;
$$
LANGUAGE plpgsql;
SELECT * FROM datiInTab(corsi);
这是我执行后 returns 的错误:
ERROR: ERRORE: la colonna "corsi" non esiste
LINE 1: SELECT * FROM datiInTab(corsi); ^ SQL state: 42703 Character: 25
表示“corsi”列不存在。 我尽可能多地调试,唯一的结论是我真的不知道我需要做什么才能使用这个动态调用。
编辑:regclass 是最后一分钟添加的,在尝试使用简单的 varchar 后,它返回了完全相同的错误
您不能命名变量 table。是保留字
你必须传递一个字符串,否则 postgres 认为你想传递一个列
CREATE OR REPLACE FUNCTION datiInTab( table1 regclass ) RETURNS NUMERIC(5) AS $$ DECLARE num NUMERIC(5); cmd VARCHAR(1000):='SELECT COUNT(*) FROM '; BEGIN EXECUTE cmd || table1; RETURN num; END; $$ LANGUAGE plpgsql;
✓
SELECT * FROM datiInTab('corsi');
ERROR: relation "corsi" does not exist
第 1 行:SELECT * 来自 datiInTab('corsi'); ^
db<>fiddle here