我在名为CartRequests的表中添加了两个字段。我们将JSON文本存储在从我们的电子商务包发送的表中,用于我们的每个在线订单。这有助于我们能够重建因任何原因失败的订单。我正在添加这两个字段以促进更快的搜索,因为目前我们只需搜索json(CR_JSON)文本中的值,并且需要30秒到一分钟才能使用like子句查找任何内容。大多数情况下,我们正在搜索CustomerID或OrderID。
我有以下包将已发送的JSON放入CartRequests表中,它是写的 另一位熟悉PL / SQL的开发人员:
CREATE OR REPLACE PACKAGE BODY CIC3.CartJSON AS
gCr_id number;
gRequestMsg varchar2(32000);
gResponseMsg varchar2(32000);
gMessageJSON w_MessageJSON_t;
gJSON JSON.JSONStructObj;
procedure SaveRequest is
begin
select CartRequestsSeq.nextval into gCr_id from dual;
insert into CartRequests (cr_id, cr_date ,cr_json) values (gCr_id, sysdate, gRequestMsg);
end;
procedure ExtractRequest is
i number;
vJSON JSON.JSONStructObj;
begin
i:=-1;
vJSON:=JSON.String2JSON(gRequestMsg);
NewJMessageJSON(gMessageJSON,vJSON,i);
gJSON:=JSON.String2JSON(gMessageJSON.ObjectSent);
update CartRequests set
cr_CartTime=gMessageJSON.CartTime,
cr_ObjectSent=gMessageJSON.ObjectSent
-- ***************************************************************
-- I'd like to add these fields but getting following errors:
-- PLS-00487 (39: 27): PLS-00487: Invalid reference to variable 'OBJECTSENT'
-- ORA-00904 (39: 27): PL/SQL: ORA-00904: "GMESSAGEJSON"."OBJECTSENT"."CUSTOMERID": invalid identifier
-- ***************************************************************
-- cr_OrderID=gMessageJSON.ObjectSent.OrderID, -- Adding this field
-- cr_CustomerID=gMessageJSON.ObjectSent.CustomerID -- Adding this field
where cr_id=gCr_id;
end;
END CartJSON;
/
如何在没有错误的情况下添加这两个字段?
CREATE OR REPLACE type CIC3.W_MESSAGEJSON_T as object (
CartTime Varchar2(30),
ObjectSent Varchar2(4000),
/
答案 0 :(得分:0)
PLS-00487 (39: 27): PLS-00487: Invalid reference to variable 'OBJECTSENT'
ORA-00904 (39: 27): PL/SQL: ORA-00904: "GMESSAGEJSON"."OBJECTSENT"."CUSTOMERID": invalid identifier
上面的PL / SQL编译器错误消息表明变量gMessageJSON
(类型为w_MessageJSON_t
)没有成员ObjectSent
,成员OrderID
或CustomerID
。您没有向我们展示w_MessageJSON_t
(可能是对象类型或记录),因此无法更准确地说出任何内容。
也许正确的语法是cr_OrderID = gMessageJSON.OrderID
?