2017-01-22 16 views
0

私の手続きは変数に代入される入力パラメータとして文字列(電子メールの本文メッセージ)を受け取ります。一重引用符やアンパサンドなどの文字を含めることができます。どのようにこの状況に対処し、そのような文字列をそのままclob変数に割り当てることができますか。変数に単一のアンパサンドqoutesのような文字を含む文字列を格納

SET SERVEROUTPUT ON 

DECLARE 

email_body CLOB; 

BEGIN 

email_body:=to_clob('Hel's Message'); 

DBMS_OUTPUT.PUT_LINE(length(email_body)); 

EXCEPTION 
WHEN OTHERS THEN 
DBMS_OUTPUT.PUt_LINE(SQLCODE||' '||SQLERRM); 

END; 

Error:

ORA-06550: line 7, column 22: PLS-00103: Encountered the symbol "S" when expecting one of the following:

+3

入力パラメータとして文字列を取得した場合、特別なアクションを実行する必要はありません。すべての引用/エスケープは、呼び出しコードによって実行されます。 –

答えて

0

あなたは次のことを試すことができます。

ここ
SET SERVEROUTPUT ON 
/* disable variable substitution */ 
SET DEFINE OFF 

DECLARE 
email_body CLOB; 
BEGIN 
email_body:=to_clob(q'[Hel's M&ssage]'); /* Q operator to avoid issues with quotes */ 

    DBMS_OUTPUT.PUT_LINE(length(email_body)); 

EXCEPTION 
    WHEN OTHERS THEN 
    DBMS_OUTPUT.PUt_LINE(SQLCODE||' '||SQLERRM); 
END; 
/

私は引用符で文字列を処理するために変数置換とOracle Q quote operatorを防ぐためにSET DEFINE OFFを使用しています。

関連する問題