gpt4 book ai didi

postgresql - 在 PL/pgSQL 匿名 block 中引用 psql 参数

转载 作者:行者123 更新时间:2023-11-29 11:35:05 25 4
gpt4 key购买 nike

我想通过 psql 命令行将参数传递给匿名 PL/pgSQL block ,然后在条件中检查该参数。

SQL 的相关部分在这里:

do $$
begin
if (':para' = 1) then
-- statements;
end if;
end $$
;

我这样称呼这个脚本:

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

我尝试使用 case/when 范式,但它也不起作用。

我猜测 psql 参数与 PL/pgSQL 不兼容?最终,我的目标是如果我将 1 作为 psql 参数传递,则运行单个 delete 语句,如果传递 则不运行它>0

最佳答案

psql 解析器看不到字符串中的内容。这可能是您想要的:

delete from t
where :para = 1

在匿名 block 之外进行。如果你真的需要 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);

如果您不想向数据库永久添加一个函数,请在脚本中完成所有操作:

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);

为该函数指定一个唯一的名称,这样您就不会冒丢失其他内容的风险。

关于postgresql - 在 PL/pgSQL 匿名 block 中引用 psql 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34912786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com