警告 :このような動的SQLは、SQLインジェクション攻撃の影響を受けやすくなっています。可能な限り、代わりにバインド変数を使用するように動的SQLを書き直してください。
このように動的SQLを構築する代わりに:
L_SQL := 'UPDATE '||l_prefix||'CRS_CUSTOMERS SET CUSTOMER_SOURCE_REF_ID = '||i.CUSTOMER_REF_ID||' WHERE CUSTOMER_ID = '||i.CUSTOMER_ID;
EXECUTE IMMEDIATE L_SQL;
これを使用してください:
L_SQL := 'UPDATE '||l_prefix||'CRS_CUSTOMERS SET CUSTOMER_SOURCE_REF_ID = :REF_ID WHERE CUSTOMER_ID = :CUST_ID';
EXECUTE IMMEDIATE L_SQL USING i.CUSTOMER_REF_ID, i.CUSTOMER_ID;
これは、l_prefix
でのSQLインジェクションの対象となります。 、ただし、その値をプログラムで制御すれば問題ない場合があります。また、SQLの構築とSQLの実行を2つのステップに分割すると、EXECUTE IMMEDIATE
をより簡単に置き換えることができます。 DBMS_OUTPUT.PUT_LINE(SQL);
を使用 クエリで構文エラーをチェックします。 DBMS_OUTPUT.PUT_LINE
を実行することもできます。 パラメータi.CUSTOMER_REF_ID
およびi.CUSTOMER_ID
それらの値を確認します。