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

Oracle数据库执行PL/SQL代码遇ORA-30625错误,求解决方法

ORA-30625错误解决:NULL SELF参数调用成员方法不允许

错误原因

你提供的PL/SQL代码中,解析的JSON字符串{"reference": "hello"}里没有paymentDetails这个键,调用m_top_obj.get_object('paymentDetails')会返回NULL。后续用这个NULL对象调用get_string('reference')方法时,就触发了ORA-30625错误——Oracle禁止对NULL的SELF参数调用成员方法。

解决方案

方案1:确保JSON包含目标键

如果业务逻辑要求paymentDetails必须存在,修改输入的JSON字符串,添加该对象:

declare
m_top_obj               json_object_t;
m_paymentDetails_obj    json_object_t;
begin
-- 修正JSON,加入paymentDetails对象
m_top_obj := json_object_t.parse('{"reference": "hello", "paymentDetails": {"reference": "payment_ref_001"}}');
m_paymentDetails_obj := m_top_obj.get_object('paymentDetails');
DBMS_OUTPUT.PUT_LINE(m_paymentDetails_obj.get_string('reference'));
end;
/

方案2:添加NULL判断处理异常场景

如果paymentDetails是可选字段,在调用方法前先检查对象是否为NULL:

declare
m_top_obj               json_object_t;
m_paymentDetails_obj    json_object_t;
begin
m_top_obj := json_object_t.parse('{"reference": "hello"}');
m_paymentDetails_obj := m_top_obj.get_object('paymentDetails');

-- 先校验对象非空,再执行方法调用
if m_paymentDetails_obj is not null then
    DBMS_OUTPUT.PUT_LINE(m_paymentDetails_obj.get_string('reference'));
else
    DBMS_OUTPUT.PUT_LINE('paymentDetails字段不存在或为空');
end if;
end;
/

内容的提问来源于stack exchange,提问作者Damo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:32:48