含数组参数的PL/pgSQL存储过程测试调用报错,求正确方法
解决PostgreSQL存储过程调用的数组语法错误
错误原因
你遇到的语法错误核心是PostgreSQL数组字面量的写法不符合规范,不能直接用[]定义数组,必须使用ARRAY[]的标准构造语法。同时INOUT参数的传递无需额外类型转换,因为变量已声明为TEXT类型。
正确的调用脚本
do $$ DECLARE out_error_code TEXT; out_error_text TEXT; BEGIN CALL create_update_h( ARRAY['t','t','t']::CHARACTER VARYING[], ARRAY['result1','result2','result3']::CHARACTER VARYING[], out_error_code, out_error_text ); RAISE NOTICE 'myvar1 = %', out_error_code; RAISE NOTICE 'mymsg1 = %', out_error_text; END; $$
关键修改点
- 数组构造:把
['t','t','t']改为ARRAY['t','t','t'],这是PostgreSQL官方规定的数组创建方式 - 字符串标识:第二个数组中的
result1等值需要添加单引号,否则会被识别为未定义变量引发新错误 - 参数传递:INOUT参数直接传变量名
out_error_code和out_error_text即可,无需::TEXT强制转换,因为DECLARE块已明确变量类型
内容的提问来源于stack exchange,提问作者vana
相关产品推荐
相关产品推荐

