2017-07-18 4 views
-1

ここに私のプロシージャのスニペットがあります。 PL/SQL:SQLステートメントは無視 エラー(11,5):PL/SQL: ** Context_valueが**のClob あるORDER_IDはint型エラーが発生しました。(11,5):PL/SQL:ORA-00932:矛盾したデータ型:予期したNUMBERはCLOBを持っています

create or replace PACKAGE BODY UPDATE_RECORD AS 

Procedure updateRecord(orderId IN ORDER_CONTEXT.ORDER_ID%TYPE 
) IS 


    BEGIN 



    update ORDER_CONTEXT 
    set context_value= (
    select to_clob(replace((context_value).getClobVal(),'xyz','abc')) 
    from ORDER_CONTEXT where CONTEXT_NAME='IEOD' and ORDER_ID=orderId 
) 
    where CONTEXT_NAME='IEOD' and ORDER_ID=orderId ; 

    COMMIT; 
    END updateRecord; 

END UPDATE_RECORD; 

エラーが エラー(11,5)ですORA- 00932:一貫性のないデータ型:期待されるNUMBERがCLOBを取得

+0

どのデータ型がorder_Contextのどのデータ型ですか? order_Contextのorder_ID?どの値がupdateRecord.orderIDに渡されているか – xQbert

+0

context_valueはclob、order_idはint –

答えて

2

図のようにXMLTYPE()を使用して、データ型XMLtypeとしてcontext_valueをキャストする必要があります。

CREATE OR REPLACE PACKAGE BODY UPDATE_RECORD 
AS 
PROCEDURE updateRecord(
    orderId IN ORDER_CONTEXT.ORDER_ID%TYPE) 
IS 
BEGIN 
    UPDATE ORDER_CONTEXT 
    SET context_value= 
    (SELECT to_clob(REPLACE((XMLTYPE('<root>' 
     ||context_value 
     ||'</root>')).getClobVal(),'xyz','abc')) 
    FROM ORDER_CONTEXT 
    WHERE CONTEXT_NAME='IEOD' 
    AND ORDER_ID  =orderId 
    ) 
    WHERE CONTEXT_NAME='IEOD' 
    AND ORDER_ID  =orderId ; 
    COMMIT; 
END updateRecord; 
END UPDATE_RECORD; 
/
関連する問題