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

pl/sql-ストアドプロシージャ内で動的クエリを使用する

    文字列を追加してクエリを作成しないでください。まず第一に、SQLインジェクションなど、多くのバグや脆弱性にさらされています。動的クエリを使用する必要性は、バインド変数を使用しないことを正当化するものではありません。本当に動的クエリを使用する必要がある場合(静的更新が機能しない理由は例から明らかではありませんか?!)、代わりにこれを実行してください:

    FOR vc2 IN (...) LOOP
       v_sql := 
           'BEGIN
                V_UPD NUMBER := 0;
    
                SELECT (SELECT ID_TIPO_TERR  
                  FROM ZREPORTYTD_TMP 
                 WHERE AUDITORIA = :p1
                   AND TERRITORIO = :p2
                   AND PRODUTO = :p3) 
                  INTO V_UPD FROM DUAL;
    
                UPDATE ZReportYTD_TMP
                   SET TARGET = :p4
                 WHERE AUDITORIA = :p5
                   AND TERRITORIO = :p6
                   AND PRODUTO = :p7;
            END';
       EXECUTE IMMEDIATE v_sql USING VC2.AUDITORIA, VC2.NOME, VC2.PRODUTO, 
                                     VC2.OBJETIVO, VC2.AUDITORIA, VC2.NOME, 
                                     VC2.PRODUTO;
    END LOOP;
    

    Oracleは適切なタイプで正しくバインドします。



    1. [ビデオ]PostgreSQLのJSONデータ型の紹介

    2. PDOプリペアドステートメントfetch()は二重の結果を返します

    3. PHPのPassword_verify

    4. Oracle での DateDiff() の使用