テーブルベースのレコードデータ型を持つ強力な参照カーソル
参照カーソルの概要で学習したように、Oracleデータベースには2種類のPL/SQL参照カーソルがあります。
- 強力な参照カーソルと
- 弱い参照カーソル
このシリーズでは、これら両方のタイプの参照カーソルのすべての概念について説明します。このブログでは、最初のブログである、テーブルベースのレコードデータ型とユーザー定義のレコードデータ型を持つ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つの実行可能ステートメントがあります。これらについて説明させてください。
-
OPENFORステートメント
最初のステートメントはOPENFORステートメントです。 SELECTステートメントをカーソルの変数に関連付け、ステートメントのカーソルを開きます。さらに、SELECTステートメントの処理に必要なすべてのリソースも検索します。
-
FETCHステートメント
PL / SQLチュートリアル26で説明したように、カーソルからデータを取得するプロセスはフェッチと呼ばれます。したがって、ここでは、参照カーソルからレコード変数「Rec_Var」にデータをフェッチしています。
-
クローズステートメント
カーソルの使用が終了したら、カーソルを閉じて、Oracle Engine/Serverがそれに関連するすべてのリソースを放棄できるようにすることをお勧めします。それはまさに3番目のステートメントで行ったことです。 CLOSEキーワードに続いてカーソル変数を使用して、参照カーソルを閉じました。
-
出力ステートメント
4番目のステートメントはDBMS_OUTPUTステートメントです。従業員IDが100の従業員の名と給与が表示されます。
テーブルベースのレコード変数の動作を学習するために、PL/SQLチュートリアル33を見ることができます。
したがって結論として…
上記のコードでは、結果テーブルベースのレコードデータ型を返す「my_RefCur」という名前のPL/SQLストロング参照カーソルを作成しました。さらに、このテーブルベースのレコードデータ型は、HRスキーマのEmployeesテーブルでサポートされています。したがって、このプログラムを実行する前に、データベースのHRスキーマに接続されていることを確認する必要があります。
さらに、あなたがビデオを見ることによってよりよく学ぶならば、ここにあなたのためのものがあります。どうぞチェックしてください。
これは、OracleDatabaseで表ベースのレコード・データ型を使用してPL/SQLの強力な参照カーソルを作成する方法に関するチュートリアルです。あなたが何か新しいことを学んだことを願っています。さらに、このブログをソーシャルメディアで友達と共有してください。
ご覧いただきありがとうございます。次のチュートリアルでは、ユーザー定義のレコード変数を使用して強力な参照カーソルを作成する方法を学習しますので、しばらくお待ちください。
良い一日を!