Hello everyone!
I have a problem about use clob in my function,when my function use clob in JSON_TABLE,the error message tells me"ORA-40484:invalid data type for JSON-TABLE column".
But when I use "SOLD_TYPE VARCHAR2(4000 BYTE) PATH '$.SOLD_TYPE'" here is no error message,why?
My function's code is :
CREATE OR REPLACE
function FN_ECOS_GETORDINFO(V_IN_JSON IN CLOB) return TP_ECOS_OP_TABLE pipelined as
item TP_ECOS_OP_ROW;
BEGIN
for myrow in (
SELECT * FROM JSON_TABLE(V_IN_JSON,'$'
COLUMNS(
SYSID VARCHAR2(50) PATH '$.SysUserInfo.SysId',
NESTED PATH '$.DATA[*]'
COLUMNS(
H_ROW_ID VARCHAR2(50 BYTE) PATH '$.ROW_ID',
H_ORDER_NO VARCHAR2(100 BYTE) PATH '$.ORDER_NO',
H_MEMBER_NAME VARCHAR2(100 BYTE) PATH '$.MEMBER_NAME',
H_CONSIGNEE VARCHAR2(100 BYTE) PATH '$.CONSIGNEE',
H_CONSIGNEE_MOBILE VARCHAR2(100 BYTE) PATH '$.CONSIGNEE_MOBILE',
H_SHOP_ID VARCHAR2(100 BYTE) PATH '$.SHOP_ID',
H_SHOP_NAME VARCHAR2(100 BYTE) PATH '$.SHOP_NAME',
H_CONSIGNEE_AREA VARCHAR2(100 BYTE) PATH '$.CONSIGNEE_AREA',
H_CONSIGNEE_ADDR VARCHAR2(500 BYTE) PATH '$.CONSIGNEE_ADDR',
H_GOODS_AMOUNT VARCHAR2(100 BYTE) PATH '$.GOODS_AMOUNT',
NESTED PATH '$.ROWS[*]'
COLUMNS(
ROW_ID VARCHAR2(50 BYTE) PATH '$.ROW_ID',
DETAIL_ORDER_NO VARCHAR2(100 BYTE) PATH '$.ORDER_NO',
BN VARCHAR2(100 BYTE) PATH '$.BN',
NAME VARCHAR2(200 BYTE) PATH '$.NAME',
BARCODE VARCHAR2(100 BYTE) PATH '$.BARCODE',
NUMS VARCHAR2(100 BYTE) PATH '$.NUMS',
SALES_AMOUNT VARCHAR2(100 BYTE) PATH '$.SALES_AMOUNT',
SOLD_TYPE_RETGOODS VARCHAR2(50 BYTE) PATH '$.SOLD_TYPE_RETGOODS'
SOLD_TYPE_REFUND VARCHAR2(50 BYTE) PATH '$.SOLD_TYPE_REFUND',
SOLD_TYPE_SUPAGAIN VARCHAR2(50 BYTE) PATH '$.SOLD_TYPE_SUPAGAIN',
SOLD_TYPE VARCHAR2(4000 BYTE) PATH '$.SOLD_TYPE'
/*when I change forward line to =>
SOLD_TYPE CLOB PATH '$.SOLD_TYPE'
the error message tells me "ORA-40484:invalid data type for JSON-TABLE column"
But when I use "SOLD_TYPE VARCHAR2(4000 BYTE) PATH '$.SOLD_TYPE'" here is no error message,why?
*/
)
)
)
)
) loop
item := TP_ECOS_OP_ROW(
myrow.SYSID,
myrow.H_ROW_ID,
myrow.H_ORDER_NO,
myrow.H_MEMBER_NAME,
myrow.H_CONSIGNEE,
myrow.H_CONSIGNEE_MOBILE,
myrow.H_SHOP_ID,
myrow.H_SHOP_NAME,
myrow.H_CONSIGNEE_AREA,
myrow.H_CONSIGNEE_ADDR,
myrow.H_GOODS_AMOUNT,
myrow.ROW_ID,
myrow.DETAIL_ORDER_NO,
myrow.BN,
myrow.NAME,
myrow.BARCODE,
myrow.NUMS,
myrow.SALES_AMOUNT,
myrow.SOLD_TYPE_RETGOODS,
myrow.SOLD_TYPE_REFUND,
myrow.SOLD_TYPE_SUPAGAIN,
myrow.SOLD_TYPE
);
pipe row (item);
end loop;
END;