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

SQLクエリでオプションのパラメータを処理する方法は?

    はい、次のいずれかを使用します:

    WHERE m.id_pk = NVL(n_RequiredId, m.id_pk);
    WHERE m.id_pk = COALESCE(n_RequiredId, m.id_pk);
    WHERE (n_RequiredId IS NULL OR m.id_pk = n_RequiredId);
    

    ...sargableではありません。それらは機能しますが、利用可能なオプションの中で最悪のパフォーマンスを示します。

    パラメータが1つしかない場合は、IF/ELSEと個別の調整されたステートメントの方が適しています。

    その後の次のオプションは動的SQLです。ただし、最初の例で引数不可の述語を引き継ぐ場合、動的SQLのコーディングは役に立ちません。動的SQLを使用すると、多数のパスに対応しながらクエリを調整できます。ただし、SQLインジェクションのリスクもあるため、パラメーター化されたクエリの背後で実行する必要があります(できれば、パッケージ内のストアドプロシージャ/関数内で実行する必要があります。



    1. 空のクラスター化テーブルへのINSERT…SELECTによる最小限のロギング

    2. エラー値が存在しません-postgresqlINSERTINTOの問題

    3. SQLSTATE[HY000][2002]接続に失敗しました。-ローカルサーバーからリモートサーバーに接続しようとしたとき

    4. パフォーマンスの驚きと仮定:GROUP BY vs. DISTINCT