我想通过psql
命令行将参数传递给匿名do $$
begin
if (':para' = 1) then
-- statements;
end if;
end $$
;
块,然后在条件中检查该参数。
SQL的相关部分在这里:
psql -d dbname -v para=1 < script.sql
我这样称呼这个脚本:
ERROR: invalid input syntax for integer: ":para"
LINE 1: SELECT (':para' = 1)
^
QUERY: SELECT (':para' = 1)
CONTEXT: PL/pgSQL function inline_code_block line 3 at IF
我收到错误:
psql
我尝试使用case / when范例,但也没用。
我猜测delete
参数与PL / pgSQL不兼容?最终,如果我将1
作为psql
参数传递,我的目标是运行一个0
语句,如果我通过{{1}}则不会运行它。
答案 0 :(得分:2)
psql
解析器无法查看字符串内部的内容。这可能是你想要的:
delete from t
where :para = 1
在匿名阻止之外执行此操作。如果您真的需要PL/pgSQL
使用参数化函数:
create or replace function f(_para integer)
returns void as $$
begin
if _para = 1 then
--statements
end if;
end; $$ language plpgsql;
您的脚本文件将包含:
select f(:para);
如果您不想永久地向db添加一个函数,请在脚本中执行所有操作:
drop function if exists f_iu7YttW(integer);
create or replace function f_iu7YttW(_para integer)
returns void as $$
begin
if _para = 1 then
--statements
end if;
end; $$ language plpgsql;
select f_iu7YttW(:para);
drop function f_iu7YttW(integer);
为该函数指定一个唯一的名称,这样您就不会冒丢弃其他内容的风险。