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

テーブルベースのレコードデータ型を持つ強力な参照カーソル

    テーブルベースのレコードデータ型を持つ強力な参照カーソル

    参照カーソルの概要で学習したように、Oracleデータベースには2種類のPL/SQL参照カーソルがあります。

    1. 強力な参照カーソルと
    2. 弱い参照カーソル

    このシリーズでは、これら両方のタイプの参照カーソルのすべての概念について説明します。このブログでは、最初のブログである、テーブルベースのレコードデータ型とユーザー定義のレコードデータ型を持つStrongRefCursorsから始めます。

    OracleデータベースのPL/SQLストロング参照カーソルとは何ですか?

    戻りタイプが固定されている参照カーソルは、OracleDatabaseではStrongRefCursorと呼ばれます。リターンタイプが固定されているため、強力な参照カーソルは選択的にのみ使用できます。たとえば、データ型がカーソルの宣言中に修正した結果と一致する結果を返すSELECTステートメントを使用します。

    OracleDatabaseのSELECTステートメントでStrongRefCursorを使用できますか?

    いいえ、SELECTステートメントでStrongRefCursorsを使用することはできません。これは、「リターンタイプ」が固定されているためです。

    それでも、データ型がカーソルの「ReturnClause」と一致する結果を返すSELECTステートメントでのみ使用できます。

    強力な参照カーソルを宣言するためにPL/SQLデータ型を使用できますか?

    いいえ、できません。さらに、強力な参照カーソルの戻りタイプは、常にレコードデータ型である必要があります。テーブルベースのレコードデータ型またはユーザー定義のレコードデータ型のいずれかです。

    テーブルベースのレコードデータ型を持つ強力な参照カーソルの例

    例を書いてみましょう。ここでは、テーブルベースのレコードデータ型を使用して強力な参照カーソルを作成します。

     SET SERVEROUTPUT ON
     DECLARE
        	/*Create Ref Pointer Type*/
    	TYPE	my_RefCur	IS REF CURSOR RETURN 	employees%ROWTYPE;
    	/*Create Cursor Variable*/
    	cur_var my_RefCur;
    	rec_var     employees%ROWTYPE;
     BEGIN
    	OPEN cur_var FOR SELECT * FROM employees WHERE employee_id = 100;
    	FETCH cur_var INTO rec_var;
    	CLOSE cur_var;
    	DBMS_OUTPUT.PUT_LINE ('Employee '||rec_var.first_name||' has salary '||rec_var.salary||'.');
    END;
    /
    

    参照カーソルの作成は2段階のプロセスです。

    参照ポインタタイプを作成します。

    まず、refポインタ型を作成する必要があります。したがって、TYPEステートメントを使用して、上記のコードと同じようにRefCursorTypeポインターを作成します。このステートメントでは、最初にキーワードTYPEを記述し、次にrefカーソルの名前を記述します。その後、予約フレーズISREFCURSORを作成する必要があります。 REFCURSORであるタイプを作成していることをコンパイラーに通知します。続いて、RETURN句を指定する必要があります。

    TYPE	my_RefCur	IS REF CURSOR RETURN 	employees%ROWTYPE;

    カーソル変数を作成する

    2番目のステップでは、カーソル変数を作成します。カーソル変数を作成するには、最初に変数の名前を入力し、次にRefカーソルの名前を入力する必要があります。その後、この変数は、それが作成される参照カーソルを参照するために使用されます。

    cur_var my_RefCur;

    上記のコードのカーソル変数とは別に、追加の変数もあります。これもテーブルベースのレコードデータ型であり、「Employees」テーブルを使用して設計されています。さらに、この変数はカーソルからフェッチされたデータを保持します。

    rec_var     employees%ROWTYPE;

    実行セクション

    コードの実行セクションには、4つの実行可能ステートメントがあります。これらについて説明させてください。

    1. OPENFORステートメント

    最初のステートメントはOPENFORステートメントです。 SELECTステートメントをカーソルの変数に関連付け、ステートメントのカーソルを開きます。さらに、SELECTステートメントの処理に必要なすべてのリソースも検索します。

    1. FETCHステートメント

    PL / SQLチュートリアル26で説明したように、カーソルからデータを取得するプロセスはフェッチと呼ばれます。したがって、ここでは、参照カーソルからレコード変数「Rec_Var」にデータをフェッチしています。

    1. クローズステートメント

    カーソルの使用が終了したら、カーソルを閉じて、Oracle Engine/Serverがそれに関連するすべてのリソースを放棄できるようにすることをお勧めします。それはまさに3番目のステートメントで行ったことです。 CLOSEキーワードに続いてカーソル変数を使用して、参照カーソルを閉じました。

    1. 出力ステートメント

    4番目のステートメントはDBMS_OUTPUTステートメントです。従業員IDが100の従業員の名と給与が表示されます。

    テーブルベースのレコード変数の動作を学習するために、PL/SQLチュートリアル33を見ることができます。

    したがって結論として…

    上記のコードでは、結果テーブルベースのレコードデータ型を返す「my_RefCur」という名前のPL/SQLストロング参照カーソルを作成しました。さらに、このテーブルベースのレコードデータ型は、HRスキーマのEmployeesテーブルでサポートされています。したがって、このプログラムを実行する前に、データベースのHRスキーマに接続されていることを確認する必要があります。

    さらに、あなたがビデオを見ることによってよりよく学ぶならば、ここにあなたのためのものがあります。どうぞチェックしてください。

    これは、OracleDatabaseで表ベースのレコード・データ型を使用してPL/SQLの強力な参照カーソルを作成する方法に関するチュートリアルです。あなたが何か新しいことを学んだことを願っています。さらに、このブログをソーシャルメディアで友達と共有してください。

    ご覧いただきありがとうございます。次のチュートリアルでは、ユーザー定義のレコード変数を使用して強力な参照カーソルを作成する方法を学習しますので、しばらくお待ちください。

    良い一日を!


    1. JDBC接続に失敗しました、エラー:ホストへのTCP/IP接続に失敗しました

    2. 環境変数を設定せずにMacOS/XにOracleInstantclientをインストールしますか?

    3. PowerBIでのMicrosoftAccessの使用

    4. PG ::UndefinedTable:エラー:正しいRailsの命名と規則で関係が存在しません