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

即時実行中の無効な文字エラー

    そこに文字列がありません(strだと思います) いくつかの説明の文字として宣言されています)。文字列を挿入する場合は、追加の引用符が必要です。そうでない場合、このインスタンスでは列として解釈されます。次のようなもの:

    begin
       ...
    exception
       when others then
         sqltext2 := 'insert into error_table_shree select '''||str||''' from dual';
         execute immediate sqltext2;
    end;
    commit;
    

    文字列の末尾からセミコロンを削除したことに注意してください。これは必須ではありません(おそらくエラーの実際の原因です)。

    これは少しSQL-であることにも注意してください。注射 ... バインド変数 連結ではなく;これはすべて、ドキュメント で説明されています。 :

    begin
       ...
    exception
       when others then
         execute immediate 'insert into error_table_shree select :1 from dual' 
                      using str;
    end;
    commit;
    

    ただし、このコンテキストで動的SQLを使用する必要はありません。変数値を挿入するだけです:

    begin
       ...
    exception
       when others then
         insert into error_table_shree values (str);
    end;
    commit;
    

    最後に、私はあなたのCOMMITについて少し心配しています;この方法でエラーを処理した後にコミットするのは珍しいことです。より多くのコンテキストがなければ、確実にすることは不可能ですが、エラーログが自律トランザクション



    1. 重複キーの更新で挿入と同じ

    2. 特定の列の更新後のPostgreSQLトリガー

    3. CSVファイルデータをPostgreSQLテーブルにインポートする方法は?

    4. SQL Serverのカスタム集計関数(連結)