Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Oracle12c,when my function use clob in JSON_TABLE,the error message tells me"ORA-40484:invalid data

MadFrogOct 11 2016 — edited Oct 11 2016

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;

This post has been answered by John Thorton on Oct 11 2016
Jump to Answer
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Nov 8 2016
Added on Oct 11 2016
1 comment
1,626 views