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

OracleデータベースでPL/SQLSYS_REFCURSORを作成する方法

    OracleデータベースのPL/SQLSYS_REFCURSOR

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

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

    このシリーズのこれまでのところ、強参照カーソルと弱参照カーソルの概念について説明してきました。まだ変更されていないカーソルのタイプは、OracleDatabaseのPL/SQLSYS_REFCURSORのみです。これについては、このブログで学習します。

    PL / SQL SYS_REFCURSORとは何ですか?

    SYS_REFCURSORは、Oracleデータベースソフトウェアに組み込まれている事前定義された弱参照カーソルです。

    事前定義された参照カーソルであるとどのように役立ちますか?

    SYS_REFCURSORは、事前定義された弱参照カーソルです。つまり、前のチュートリアルで明示的な弱参照カーソルを使用した場合のように、コードに定義する必要はありません。そのチュートリアルで学んだように、弱参照カーソルの作成は2段階のプロセスです。最初に「弱い参照カーソルタイプ」を作成する必要があり、次にその参照カーソルを使用して「カーソル変数」を作成する必要があります。

    SYS_REFCURSORを使用する場合は、カーソル変数を作成するだけで済みます。 SYS_REFCURSORは、弱参照カーソルタイプを作成する最初のステップを完全に最小化します。

    Sys_Refcursorは組み込みのrefカーソルですが、その定義はどこにありますか?

    PL / SQL SYS_REFCURSORの定義は、「stdspec.sql」という名前のスクリプトで確認できます。このスクリプトは、パスが次のディレクトリにあります。

    %ORACLE_HOME% \RDBMS\ADMIN\stdspec.sql

    SYS_REFCURSOR定義は次のようになります:

    SYS_REFCURSORとはどのタイプの参照カーソルですか?

    上記の定義で述べたように、SYS_REFCURSORは弱参照カーソルです。

    これで、SYS_REFCURSORに関するほとんどすべての疑問が解消されました。最後にもう1つ質問したいのですが。

    情報:REFとCURSORの間にスペースはありません。 「RefCursor」という一言です。
    間違い:SYS_REF CURSOR
    正解:SYS_REFCURSOR

    事前定義されたカーソルがあるのに、なぜ誰かが弱い参照カーソルを宣言するのですか?

    それは実際には非常に良い質問です。この質問に対する答えは、いいえ、弱参照カーソルを明示的に作成する必要はありません。 Oracle Database 9i以降、SYS_REFCURSORを標準パッケージの一部として出荷することにより、弱参照カーソルを作成する必要性を最小限に抑えましたが、作成するオプションは引き続き利用できます。

    これは個人的な選択のようなものです。誰かが弱い参照カーソルを作成したい場合は、それが可能です。そうでない場合は、SYS_REFCURSORをいつでも自由に使用できます。親愛なる友人のスティーブン・フォイアースタインは、この質問に答える非常に優れたブログ投稿を行いました。これはここで読むことができます。

    OracleDatabaseでPL/SQLSYS_REFCURSORを使用する方法を示す非常に簡単な例を見てみましょう。

    例:OracleデータベースでPL / SQL SYS_REFCURSORを作成するにはどうすればよいですか?

    SET SERVEROUTPUT ON;
    DECLARE
        --Declare cursor variable of SYS_REFCURSOR type
        cur_var SYS_REFCURSOR;
        
        --Declare variables for holding data
        f_name  employees.first_name%TYPE;
        emp_sal employees.salary%TYPE;
    BEGIN
    OPEN cur_var FOR SELECT first_name, Salary FROM employees WHERE employee_id = 100;
        FETCH cur_var INTO f_name, emp_sal;
        CLOSE cur_var;
        DBMS_OUTPUT.PUT_LINE(f_name ||' '||emp_sal);
    END;
    /
    

    上記のコードの詳細な説明については、YouTubeチャンネルのビデオチュートリアルをご覧ください。

    あなたが読書を楽しんで、何か新しいことを学んだことを願っています。このブログをソーシャルメディアで友達と共有してください。ありがとう、そして素晴らしい一日を。


    1. Oracleで文字列を複数の行に分割する

    2. Oracleで2列のデータをA、B形式で取得する方法

    3. 日付範囲の比較

    4. トリガー関数で動的テーブル名を使用してINSERT