修改Oracle包代码

时间:2014-05-20 14:58:32

标签: oracle plsql syntax-error

我在名为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),
/

1 个答案:

答案 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,成员OrderIDCustomerID。您没有向我们展示w_MessageJSON_t(可能是对象类型或记录),因此无法更准确地说出任何内容。

也许正确的语法是cr_OrderID = gMessageJSON.OrderID