【发布时间】:2022-01-10 08:41:35
【问题描述】:
在 Postgres 中创建存储过程时,prepare 语句出现错误。
这是代码:
CREATE PROCEDURE public.deletebyidref(IN idref character varying, IN tablename character varying)
LANGUAGE plpgsql
AS $$
DECLARE
elapsed timestamp;
t varchar(50);
q varchar(50);
w varchar(50);
count int;
BEGIN
elapsed := now(6);
t := replace(tableName, ';', ';');
w := replace(idRef, ';', ';');
q := concat('delete from ', tableName, ' where idRef=''', w, '''');
prepare stmt FROM q;
execute q;
count := row_count();
deallocate prepare stmt;
elapsed := timediff(now(6), elapsed);
END ;
$$;
任何帮助将不胜感激
【问题讨论】:
-
为什么是
prepare?您可以使用execute format('delete from ... where idref=$1') using w简化它。 Postgres 中也没有timediff()函数。并且now()在函数期间不会更改,因为它显示事务开始时的时间,您需要使用clock_timestamp() -
“一个错误”,但错误是机密信息?
标签: sql postgresql plpgsql