ORA-30625 - JSON_OBJECT_T

Posted

技术标签:

【中文标题】ORA-30625 - JSON_OBJECT_T【英文标题】: 【发布时间】:2018-09-13 09:53:49 【问题描述】:

我有以下程序

CREATE OR REPLACE PROCEDURE GetAddress(P_JSON_CLOB_IN IN CLOB, P_JSON_OBJECT_OUT OUT JSON_OBJECT_T) 
AS

V_JSON_OBJ JSON_OBJECT_T := JSON_OBJECT_T.parse(P_JSON_CLOB_IN);

V_ID CUSTOMERS.ID%TYPE;
V_TYPE ADDRESSES.TYPE%TYPE;

V_ADR ADDRESSES%ROWTYPE;

BEGIN
 V_ID := V_JSON_OBJ.GET_STRING('id');
 V_TYPE := V_JSON_OBJ.GET_STRING('type');

 SELECT a.* INTO V_ADR FROM ADDRESSES a 
 INNER JOIN CUSTOMERS c ON c.ID=a.PEOPLEID
 WHERE c.ID = V_ID
 AND a.TYPE = V_TYPE;


 P_JSON_OBJECT_OUT.put('address1',TO_CHAR(V_ADR.ADDRESS1));
 P_JSON_OBJECT_OUT.put('address2',TO_CHAR(V_ADR.ADDRESS2));
 P_JSON_OBJECT_OUT.put('zipmask',TO_CHAR(V_ADR.ZIPMASK));
 P_JSON_OBJECT_OUT.put('city',TO_CHAR(V_ADR.CITY));
 P_JSON_OBJECT_OUT.put('countryCode',TO_CHAR(V_ADR.COUNTRYCODE)); 

 EXCEPTION
 WHEN NO_DATA_FOUND THEN 
   P_JSON_OBJECT_OUT.put('error','NO DATA FOUND');

END;

编译成功,但是调用时返回oracle异常 第 21 行的“ORA-30625 NULL SELF 参数上的方法调度被禁止”。 我假设发生错误是因为在添加键/值之前需要初始化参数 P_JSON_OBJECT_OUT?我如何做到这一点?

谢谢

【问题讨论】:

【参考方案1】:

我找到了解决方案。只需在块的开头添加以下行:

P_JSON_OBJECT_OUT := 新 JSON_OBJECT_T;

【讨论】:

以上是关于ORA-30625 - JSON_OBJECT_T的主要内容,如果未能解决你的问题,请参考以下文章

从 JSON 中提取很长的字符串到 CLOB

如何在 Oracle 18c 中高效解析 json?