文字列をエスケープするコードを書くべきではありません。文字列をエスケープする必要があるという事実は、何か間違ったことをしていることを意味します。
INSERT
でバインド変数を使用している場合 ステートメントでは、一重引用符が外れている場合は文字列をエスケープする必要はありません。また、バインド変数を使用していない場合、セキュリティ上の大きな問題となる文字列内のSQLインジェクション攻撃を特定する必要もありません。また、システムのパフォーマンスにとって重要な、実行されるたびにOracleにクエリの解析を強制することはありません。
話しているプロシージャがPL/SQLで記述されている場合、バインド変数が自動的に使用されます。列名を推測し、シーケンスを使用して主キーを生成していると仮定すると、次のようになります
CREATE PROCEDURE insert_rtf_clob( p_clob IN NOCOPY CLOB )
AS
BEGIN
INSERT INTO rtf_clob( rtf_clob_id, rtf_clob_value )
VALUES( seq_rtf_clob_id.nextval, p_clob );
END;
他のフロントエンド言語では、バインド変数を使用するためのアプローチが異なります。たとえば、JDBCを使用してJavaを作成している場合は、PreparedStatement
を作成します。 次に、適切なsetXXX
を呼び出します メソッド、つまり
PreparedStatement stmt = conn.prepareStatement( "INSERT INTO rtf_clob VALUES( ?, ? )" );
stmt.setInt( 1, 1 ); // Set column 1 to a value of 1
stmt.setString( 2, someStringVariable ); // Set column 2 to someStringVariable
stmt.executeUpdate();