未终止的美元引号字符串创建PostgreSQL函数
使用PostgreSQL 12.3,我在尝试验证这段简单的未终止的美元引号字符串创建PostgreSQL函数,postgresql,postgresql-12,create-function,Postgresql,Postgresql 12,Create Function,使用PostgreSQL 12.3,我在尝试验证这段简单的plpgsql代码时遇到了一些问题 创建或替换功能测试() 返回无效 作为$$ 开始 按选择1编制计划; 执行计划; 结束; $$语言plpgsql; 错误是 Unterminated dollar-quoted string at or near "$$ begin prepare plan as select 1;" 我试过使用和不使用在结束后。我也尝试过使用sql而不是plpgsql。 你知道哪里不对吗 这是
plpgsql
代码时遇到了一些问题
创建或替换功能测试()
返回无效
作为$$
开始
按选择1编制计划;
执行计划;
结束;
$$语言plpgsql;
错误是
Unterminated dollar-quoted string at or near "$$ begin prepare plan as select 1;"
我试过使用和不使用代码>在结束后
。我也尝试过使用sql
而不是plpgsql
。
你知道哪里不对吗
这是一个db小提琴,用于快速测试代码:
问题不在于$$quoting:
create or replace function test()
returns void
as $$
begin
prepare plan as select 1;
execute plan;
end;
$$ language plpgsql;
CREATE FUNCTION
select test();
ERROR: column "plan" does not exist
LINE 1: SELECT plan
^
QUERY: SELECT plan
CONTEXT: PL/pgSQL function test() line 4 at EXECUTE
在DBFIDLE中运行此命令时,完整错误输出为:
Schema Error: error: unterminated dollar-quoted string at or near "$$ begin prepare plan as select 1;"
Schema Error: error: prepared statement "plan" does not exist
Schema Error: error: unterminated dollar-quoted string at or near "$$ language plpgsql;"
Query Error: error: function test() does not exist
问题在于,在plpgsql内部执行是它自己的命令:
使用表达式[,…]执行命令字符串[进入[STRICT]目标]代码>
我会使用plpgsql表单。这项工作:
create or replace function test()
returns void
as $$
begin
prepare plan as select 1;
EXECUTE 'execute plan';
RAISE NOTICE 'Made it';
DEALLOCATE plan;
end;
$$ language plpgsql;
select test();
NOTICE: Made it
test
------
(1 row)
让我猜猜,HeidiSQL?我猜,无论您使用哪个客户端来运行SQL,都不支持美元报价。您需要将每对$
替换为一对'
。请记住,如果函数体中有任何单引号,则需要对其进行转义。作为奖励,考虑检查DBeaver的SQL客户机。好的,我明白了。这只是一个客户的不能力J Spratt,感谢您介绍DBeaver,太棒了!谢谢你,阿德里安!是否可以从函数测试内部的EXECUTE返回多行?我的意思是,通过返回表(…)
更改返回void
,文档就是你的朋友。从这里开始。这里有,这里有“FOR-IN-EXECUTE
语句是迭代行的另一种方式:…”