PL/SQL存储过程声明JSON输入参数遇PLS-00103错误的解决方法
问题解决与代码修正
你的存储过程报错主要是PL/SQL参数声明语法错误,同时还有其他几处语法问题,以下是具体修正方案:
错误原因与修改点
- 参数模式位置错误:PL/SQL中参数的
IN/OUT模式必须放在参数名称之后,而非前面(你写的IN data JSON不符合语法,正确格式是data IN JSON) - 变量长度未指定:
age varchar2;没有定义长度,PL/SQL要求varchar2必须指定长度,比如age varchar2(3); - 赋值语句语法错误:PL/SQL不用
set赋值,而是用:=运算符;同时Oracle推荐用JSON_VALUE直接提取JSON字段值,比嵌套json_unquote+json_extract更简洁 - 语句缺分号:
output := name等分支语句结尾缺少分号,PL/SQL要求每条语句必须以分号结束
修正后的完整代码
create or replace procedure sp_json_( data IN JSON, input2 IN varchar2, output OUT varchar2 ) is name varchar2(20); age varchar2(3); -- 指定长度 occ varchar2(20); begin -- 使用JSON_VALUE提取JSON字段,PL/SQL用:=赋值 name := JSON_VALUE(data, '$.name'); age := JSON_VALUE(data, '$.age'); occ := JSON_VALUE(data, '$.occ'); -- 用CASE替代多个ELSIF,代码更简洁 output := CASE input2 WHEN 'name' THEN name WHEN 'age' THEN age WHEN 'occ' THEN occ END; end; /
额外说明
如果你的Oracle版本较低(12c之前),不支持原生JSON类型,可以改用VARCHAR2作为JSON参数类型,然后同样用JSON_VALUE解析,比如把data IN JSON改成data IN VARCHAR2(4000)(或更大长度,根据实际需求)。
内容的提问来源于stack exchange,提问作者Karthiga
相关产品推荐
相关产品推荐

