json - ORA-30625 - JSON_OBJECT_T
问题描述
我有以下程序
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 异常“ORA-30625 Method dispatch on NULL SELF argument is disallowed”在第 21 行。我假设发生错误是因为参数 P_JSON_OBJECT_OUT 需要在添加键/值之前初始化?我如何实现这一目标?
谢谢
解决方案
我找到了解决方案。只需在块的开头添加以下行:
P_JSON_OBJECT_OUT := 新的 JSON_OBJECT_T;
推荐阅读
- sql - SQL:连接两个表 - 结果表应列出所有 ID(即使是那些不在连接表中的 ID)
- ios - RemoteIO 单元去除背景噪音
- python - setuptools 包括所有软件包
- ios - iOS swift CTFontManagerRegisterGraphicsFont vs CTFontManagerRegisterFontsForURL
- php - WP v-5.5 $_GET 参数在我的插件中不起作用
- mongodb - 猫鼬评论和回复模式
- angular - 禁止手动输入日期
- c# - DateTimeOffset 格式并获得与 moment.js 相同的输出
- javascript - 多个测试套件的配置文件中的 Jest Teardown
- json - postgresql中的json-ize字符串列