ユーザー定義のレコードデータ型を持つ強力な参照カーソル
前のチュートリアルでは、表ベースのレコード・データ型変数を使用して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チャンネルに登録して、さらに興味深いチュートリアルを見ることができます。ありがとう&素晴らしい一日を!