sql >> データベース >  >> RDS >> Oracle

一重引用符で囲まれたデータの挿入中にエラーが発生しました

    文字列をエスケープするコードを書くべきではありません。文字列をエスケープする必要があるという事実は、何か間違ったことをしていることを意味します。

    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();
    


    1. SQLite Trim()のしくみ

    2. データベーステーブル、もっと良いですか?

    3. タイプorg.postgresql.util.PGobjectの受信オブジェクト

    4. 配列を使用したPostgresフォーマット文字列