You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 21:01:01