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

OracleDatabaseのネイティブ動的SQLの概要

    ネイティブ動的SQL

    ネイティブ動的SQLの学習に入る前に、短い背景が重要です。オラクルは、データベースバージョン7.1(別名Oracle 7.1)に動的SQLの概念を導入することにより、1994年5月にすべての開発者に真夏の贈り物をしました。これにより、開発者は「DBMS_SQL」パッケージを介して動的SQLを記述できるようになりました。

    しかし、徐々にDBMS_SQLライブラリはその魅力を失い始めました。 「それほど簡単ではない」構文のため、「パフォーマンスの低下」と「サポートされていないユーザー定義型」。これらすべての欠点は、何か他のものの必要性を引き起こしました。これは、開発者が頭に過度のストレスをかけることなく、適切に最適化されたコードを作成するのに役立ちます。

    オラクルは、ほぼ5年の時間を要しました。最後に、1999年2月にOracle Database 8i、正確にはOracle Databaseバージョン8.1.5のリリースに伴い、Dynamic SQLの改良バージョンをリリースしました。その安定した性質により、この改良バージョンのDynamicSQLはPL/のネイティブ部分になりました。 SQL言語であり、その名前は「ネイティブダイナミックSQL」であり、現在ではそれによって知られています。これは、Oracleデータベースでのネイティブ動的SQLの起源の簡単な紹介です。

    ネイティブの動的SQLを理解するには、まずOracleデータベースの静的SQLとは何かを理解する必要がありますか?

    静的SQLとは何ですか?

    名前が示すように、実行時に変更されないSQLステートメントは静的SQLステートメントと呼ばれます。

    静的SQLステートメントの利点は、ステートメントを記述しているすべての依存オブジェクトが存在するかどうかをすでに認識していることです。静的SQLステートメントのもう1つの利点は、それらをアプリケーションにハードコーディングすることです。したがって、最適なパフォーマンスが得られるように調整できます。

    静的SQLとは何かを学んだので、動的SQLとは何かを見てみましょう。

    ネイティブ動的SQLとは何ですか?

    繰り返しになりますが、名前が示すように、実行時に作成されるSQLステートメントは動的SQLと呼ばれます 。これらのステートメントはその場で作成されます。したがって、アプリケーションにハードコーディングすることはできません。これにより、柔軟性が向上します。

    一方、静的SQLでは、PL/SQLブロック内でDMLステートメントのみを実行できます。一方、動的SQLを使用すると、DDLステートメントを実行できます。これもPL/SQLブロック内で実行できます。したがって、動的SQLを使用すると、PL / SQLブロック内で表を作成したり、索引を削除したり、表を切り捨てたりすることができます。これは、静的SQLに対するネイティブ動的SQLの利点です。

    ネイティブダイナミックPL/SQLとは何ですか?

    動的SQLと同様に、実行時にPL/SQLコードを作成するプロセスは動的PL/SQLと呼ばれます。

    次に、OracleデータベースのDBMS_SQLパッケージに対するネイティブ動的SQLの利点を見てみましょう。

    ネイティブ動的SQLの利点

    • 使いやすいコード: DBMS_SQLパッケージと比較すると、ネイティブ動的SQLは非常に使いやすいです。これは主に、SQL自体に組み込まれているためです。これは、PL/SQLコード内で静的SQLを使用するのと同じです。また、ネイティブ動的SQLコードは、DBMS_SQLパッケージよりもコンパクトで読みやすくなっています。後者は、厳密な順次手順のために大量のコードを必要とします。それはそれをより複雑にします。
    • コードのパフォーマンスの向上: PL / SQLインタプリタには、ネイティブ動的SQLのサポートが組み込まれています。したがって、それを使用するプログラムは、DBMS_SQLパッケージを使用するプログラムよりも効率的です。基本的に、ネイティブ動的SQLは、準備、バインド、および実行を含むステップを1つの操作に結合します。これにより、プロシージャの呼び出しとデータコピーのオーバーヘッドが削減され、パフォーマンスが向上します。
    • ユーザー定義タイプのサポート: DBMS_SQLパッケージとは異なり、ネイティブ動的SQLはすべての種類のユーザー定義型をサポートします。たとえば、ユーザー定義のオブジェクト、REF、コレクション。
    • レコードへのフェッチのサポート: クエリの結果である行は、ネイティブの動的SQLを使用してPL/SQLレコードに直接フェッチできます。これは、DBMS_SQLパッケージでは不可能です。

    Oracleデータベースの動的SQLの機能は何ですか?

    1. まず、任意のバインド変数を使用した動的DDLおよびDML。
    2. 次に、動的DQLと
    3. 第3に、バインド変数の既知のリストを使用した動的DML

    これらは、DynamicSQLがPL/SQLプログラミングに追加する3つの機能です。

    では、Oracleデータベースで動的SQLをどのように使用しますか?

    OracleDatabaseで動的SQLとPL/SQLを使用する最も一般的な2つの方法は次のとおりです。

    1. 即時ステートメントを実行して
    2. Open-For、Fetch&Closeブロック。

    クエリが単一行データを返す場合は、ExecuteImmediateステートメントが使用されます。クエリが複数行のデータを返す場合は、Open-For、Fetch、およびcloseブロックを利用できます。今後のチュートリアルで、「即時実行」と「開封」、「ブロックの取得と終了」について詳しく学習します。

    Oracle Databaseで動的SQLを使用する他の方法はありますか?

    上記の最も一般的に使用される方法とは別に、動的SQLまたはPL/SQLを使用する他の方法は

    です。
    • バルクフェッチあり
    • 2番目に一括実行即時
    • BulkFORALLおよび
    • とともに
    • 最後にBulkCollectIntoステートメントを使用

    バルクデータ処理に関する前のシリーズで、上記のすべてのコマンドとステートメントを学習しました。

    ビデオチュートリアルで学習したい場合は、ぜひチェックしてください。

    これは、OracleDatabaseのネイティブ動的SQLの詳細な概要です。あなたが読書を楽しんだことを願っています。必ずこのブログのリンクを共有してください ソーシャルメディアで友達と一緒に。また、YouTubeチャンネルに登録して、このシリーズをフォローし、新しくて面白いことを学んでください。

    ありがとう、そして素晴らしい一日を!


    1. Oracle用のマクロメディアドライバでtnsエントリを使用する方法

    2. SQL Server(T-SQL)でAM/PMを時間値に追加する方法

    3. MacOSXでのOracleSQLDeveloper入門

    4. テーブルに4つの列があり、3番目の列をフェッチしたい場合はどうすればよいですか。