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

PLSQLカーソルの例-明示カーソル、暗黙カーソル、および参照カーソル

    カーソルは、論理的に結果セットへのポインタとして機能します。結果セットの最後にいると判断するまで、カーソルを結果セット内で移動し、各行を処理できます。カーソルに関連付けられている構文には、カーソルの作成、カーソルを使用したフェッチ、およびカーソルを閉じるという3つのタイプがあります。さらに、論理比較で使用できるカーソルの属性がいくつかあります。 Oracleのカーソルのタイプは次のとおりです。

    明示カーソル

    明示カーソルは、宣言して使用するカーソルです。

    暗黙カーソル

    PL / SQLを使用すると、暗黙カーソルと呼ばれるカーソルを宣言せずに、SELECT文を含むSQL文をコードの一部として含めることができます。

    カーソルの参照

    カーソルは結果セットを参照します。 REF CURSORを使用すると、あるPL/SQLプログラム単位から別のPL/SQLプログラム単位にカーソル参照を渡すことができます。つまり、カーソルを受け取り、その結果セットにアクセスできるようにする変数を作成できますが、このブログでは、明示カーソルと暗黙カーソルのみの例を示し、参照カーソルと別のブログの動的カーソル .Explicit Cursorの例:DECLARE nemployeeid NUMBER; dstartdate DATE;日付を決定します。 sjobid VARCHAR2(20); --カーソルを宣言しますCURSORcurjobIS SELECT employee_id、start_date、end_date、job_id FROM hr.job_history; BEGIN OPEN curjob; LOOP FETCH curjob INTO nemployeeid、dstartdate、denddate、sjobid; curjob%NOTFOUND;で終了します。 DBMS_OUTPUT.put_line('Employee' || nemployeeid ||'had job' || sjobid ||'for' ||(denddate --dstartdate)||'days。');ループを終了します。 CLOSE curjob; END; /明示カーソルの場合と同じ例を以下に示しますが、Forループを使用すると、変数を宣言して値をフェッチしたり、開いたり閉じたりする必要がないため、Forループカーソルの方が賢くなります。ポインタはカーソルの端にあります。次に例を示します。DECLARECURSORcurjobISSELECT employee_id、start_date、end_date、job_id FROM hr.job_history; BEGIN FOR jh_rec IN curjob LOOP DBMS_OUTPUT.put_line('' Employee'|| jh_rec.employee_id ||' has job'|| jh_rec .job_id ||'for' ||(jh_rec.end_date --jh_rec.start_date ||'日。')); END LOOP; END; /暗黙カーソルの例:DECLARE nempno NUMBER; CURSOR curjob IS SELECT employee_id、start_date、end_date、job_id FROM hr.job_history;BEGIN-以下のSQLクエリは暗黙カーソルのタイプですSELECTCOUNT(*)INTO nempno FROM hr.job_history; DBMS_OUTPUT.put_line('あります'|| nempno ||'従業員履歴レコード。'); FOR jh_rec IN curjob LOOP DBMS_OUTPUT.put_line('' Employee'|| jh_rec.employee_id ||' has job'|| jh_rec.job_id ||' for'||(jh_rec.end_date --jh_rec.start_date||'days。 ' )); END LOOP; END; /
    1. OracleplsqlでgoogletranslateURLを使用する方法

    2. SQLServerのTempDBファイルの場所の変更

    3. Table-Valued-Function内のCTEのmaxrecursionオプションを設定する方法

    4. Postgresタイムスタンプクエリ範囲を最適化する