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

ユーザー定義のレコード・データ型を持つPL/SQLの強力な参照カーソル

    ユーザー定義のレコードデータ型を持つ強力な参照カーソル

    前のチュートリアルでは、表ベースのレコード・データ型変数を使用してPL/SQLの強力な参照カーソルを作成する方法を学習しました。そこで、employeesテーブルのすべての列からのデータを処理するための強力なrefカーソルの使用を示しました。したがって、これは懸念を引き起こします。テーブルの特定の列のデータが必要な場合はどうなりますか?これが、今日のチュートリアルで取り上げる内容です。

    ただし、このチュートリアルを進める前に、PL/SQL参照カーソルの知識を習得することをお勧めします。特に、強力な参照カーソルとユーザー定義のレコードデータ型。さらに、あなたの便宜のために、私はここに必要なすべてのリンクを提供しています:

    • テーブルベースのレコードを使用して強力な参照カーソルを作成する方法
    • ユーザー定義のレコードデータ型とは何ですか?

    前のチュートリアルでは、PL/SQLのStrongrefカーソルが行のすべての列からデータを取得して処理する方法を示しました。しかし、行の特定の列からのデータが必要な場合はどうでしょうか。電子メールまたは従業員の給与だけを見たいとしましょう。したがって、不要な情報をすべて取得するために高価なリソースを費やしたくありません。それで、これと同じ参照カーソルをそのために使用できますか?調べてみましょう。

    前のチュートリアルで作成したStrongRefCursorを使用して、特定の列からデータを取得できますか?

    その質問に対する答えは、いいえ、できませんです。 。

    そのStrongRefCursorは、テーブルベースのレコードデータ型を使用して作成されたためです。たとえば、テーブルベースのレコードデータ型を作成すると、Oracleエンジンは複合データ構造を作成します。この構造には、指定されたテーブルの各列に対応するフィールドがたくさんあります。

    さらに、これらのフィールドはすべて、ベーステーブルの列と同じ名前と同じデータ型で自動的に割り当てられます。ただし、特定の列を使用してレコードを初期化する場合は、このすべての作業を手動で行う必要があります。

    より明確に理解するには、PL / SQLチュートリアル34を参照してください。そこで、レコードのデータ型とその動作を初期化する方法について詳しく説明しました。

    では、この問題の解決策は何ですか?

    この問題は簡単に解決できます。 User-DefinedRecordDatatype変数を使用してPL/SQLの強力な参照カーソルを作成できます。

    例:ユーザー定義のレコードデータ型変数を持つPL/SQLストロング参照カーソル。

    たとえば、SELECTステートメントを使用して強力な参照カーソルを作成します。これは、従業員IDが100の従業員の給与のみを返します。

    SET SERVEROUTPUT ON;
    DECLARE
    	--Create User-Defined Record Datatype
        TYPE my_rec IS RECORD (
            emp_sal employees.salary%TYPE
            );
    	--Declare Strong Ref Cursor
        TYPE RefCur IS REF CURSOR RETURN my_rec;
        cur_var REFCUR;
    	--Another anchored datatype variable for holding data
        at_var  employees.salary%TYPE;
    BEGIN
       OPEN cur_var FOR SELECT salary FROM employees WHERE employee_id = 100;
        FETCH cur_var INTO at_var;
        CLOSE cur_var;
        DBMS_OUTPUT.PUT_LINE ('Salary of the employee is '||at_var);
    END;
    /
    

    それでは、このコードを壊して、ここで何が起こっているかを見てみましょう。

    宣言セクション

    DECLARE
        TYPE my_rec IS RECORD (
            emp_sal employees.salary%TYPE
            );
        TYPE RefCur IS REF CURSOR RETURN my_rec;
        cur_var REFCUR;
        at_var  employees.salary%TYPE;
    

    これが宣言セクションです。このセクションの最初の3行で、my_recという名前のユーザー定義レコードデータ型を作成しました。さらに、このユーザー定義のレコードデータ型には、emp_salというフィールドが1つだけあります。 Emp_salは、employeesテーブルのsalary列上に設計されたアンカーデータ型フィールドです。 emp_salはアンカーされたデータ型であるため、ベース列のデータ型とデータ幅(この場合は給与)が自動的に割り当てられます。

    その直後に、「RefCur」という名前のPL/SQLストロング参照カーソルを宣言しました。この強力な参照カーソルの戻りタイプは「my_rec」です。 。カーソル宣言に続いて、cur_varという名前のカーソル変数を作成しました。さらに、この変数は、コードの先頭にある強力な参照カーソルを参照するために使用されます。

    カーソル変数とは別に、このセクションで宣言されている別の変数もあります。この変数は「at_var」であり、これもアンカーされたデータ型変数です。カーソルから返されたデータを保存するために使用されます。

    それでは、実行セクションに行きましょう。

    実行セクション

    BEGIN
        OPEN cur_var FOR SELECT salary FROM employees WHERE employee_id = 100;
        FETCH cur_var INTO at_var;
        CLOSE cur_var;
        DBMS_OUTPUT.PUT_LINE('Salary of the employee is '||at_var);
    END;
    /
    

    この実行セクションには、4行の実行可能なコードがあります。それらが何であるか見てみましょう。

    1行目:ステートメントを開く

    このステートメントは、言及されたカーソルを動的に開きます。その後、FORキーワードの直後に指定されたSELECTステートメントを付加します。

    この場合、このステートメントは、カーソル変数「cur_var」(SELECTステートメント)を使用して強力な参照カーソルを開きます。これは、employeesテーブルの「salarycolumn」からのみデータを返します。

    2行目:フェッチステートメント

    このステートメントは、参照カーソルからデータをフェッチし、それを変数「at_var」に格納します。同様に重要なのは、フェッチされたデータのデータ型と、データが格納されている変数のデータ型が一致していることを確認することです。そうしないと、エラーが発生します。

    3行目:ステートメントを閉じる

    3行目はcloseステートメントです。終わったカーソルを閉じるのは良い習慣です。

    4行目:出力ステートメント

    最後に、実行セクションの最後のステートメントはDBMS_OUTPUTステートメントです。そして、従業員の給与をユーザーに表示しています。

    これらの4行は、このPL/SQLブロックの実行セクションを完了します。さらに、このコードを正常に実行すると、フォーマットされた文字列で給与が表示されます。

    ビデオを見ることでよりよく学ぶ人の一人ですか?次に、ユーザー定義のレコードデータ型を使用したStrongrefカーソルに関するビデオチュートリアルを示します。

    このチュートリアルは以上です。このブログをソーシャルメディアで共有し、他の人が学ぶのを手伝ってください。 YouTubeチャンネルに登録して、さらに興味深いチュートリアルを見ることができます。ありがとう&素晴らしい一日を!


    1. Oracle12cマルチテナントの基本管理

    2. Oracleで負の数を山形括弧でフォーマットする方法

    3. .NETのイベントとスレッド

    4. 2016年7月PSUはisqoraの作成に失敗しました