ホームページ データベース Oracle オラクルカーソルとは何ですか

オラクルカーソルとは何ですか

Feb 23, 2022 am 11:35 AM
oracle カーソル

Oracle では、カーソルは、キーワード CURSOR を使用して、Oracle によってクエリされるデータ セットのセットを定義するメカニズムです。クエリされたデータ セットはメモリに格納でき、カーソルはデータの 1 つを指します。データ セットをループするという目的を達成するために、ループ カーソルを介して記録します。

オラクルカーソルとは何ですか

このチュートリアルの動作環境: Windows 7 システム、Oracle 11g バージョン、Dell G3 コンピューター。

Oracle では、カーソルは SELECT ステートメントに名前を割り当て、その SQL ステートメント内の情報を処理できるメカニズムです。

Oracle カーソルは、キーワード CURSOR を通じて Oracle によって照会されるデータ セットのセットを定義します。配列と同様に、照会されたデータ セットはメモリに格納され、カーソルはレコードの 1 つを指し、カーソルがループ データ セットをループする目的を達成します。

カーソルの機能は何ですか?

①結果セット内の特定の行の位置を指定します。

②現在の結果セットの位置に基づいて、1 行または連続する複数の行を取得します。

③ 結果セットの現在位置にある行のデータを変更します。

④ 他のユーザーによるデータ変更に対してさまざまな機密レベルを定義します。

⑤データベースにはプログラムからアクセスできます。

Oracle カーソルの種類?

1. 静的カーソル: 結果セットが確認されている (静的に定義されている) カーソル。暗黙的カーソルと明示的カーソルに分けられる

  • 暗黙的カーソル: すべての DML ステートメントは暗黙的カーソルであり、SQL ステートメントの情報は暗黙的カーソル属性を通じて取得できます。

  • カーソルの表示: ユーザーは、宣言されたカーソル、つまり指定された結果セットを表示します。クエリが複数行の結果を返す場合は、明示的なカーソルが必要です。

2. REF カーソル: 結果セットを動的に関連付ける一時オブジェクト。

Oracle カーソルのステータスとカーソル属性の使用方法は何ですか?

①カーソルの状態を属性で表現します。

  • %Found: Fetch ステートメント (レコードの取得) の実行ステータスが True または False です。

  • %NotFound: 最後のレコードが True として抽出されるか False として抽出されるか。

  • %ISOpen: カーソルが開いているかどうか。True または False。

  • %RowCount: カーソルによって現在抽出されている行の数。

②カーソルのプロパティを利用します。

例:

/* conn scott/tiger */
  Begin
   Update emp Set  SAL = SAL + 0.1  Where JOB = 'CLERK';
   If  SQL%Found  Then
    DBMS_OUTPUT.PUT_LINE('已经更新!');
   Else
    DBMS_OUTPUT.PUT_LINE('更新失败!');
   End  If;
  End;

ディスプレイ カーソルを使用するにはどうすればよいですか?ループカーソルを反復するにはどうすればよいですか?

1. 表示カーソルを使用します

  • カーソルを宣言します: 記憶領域を分割します。この時点では Select ステートメントは実行されないことに注意してください。 。

CURSOR 游标名( 参数 列表)   [返回值类型]   IS   Select 语句;
  • カーソルを開く: Select ステートメントを実行し、結果セットを取得してカーソルに格納します。このとき、カーソルは先頭を指します。最初のレコードではなく、結果セットです。

 Open 游标名( 参数 列表);
  • レコードの取得: カーソルを移動してレコードを取得します

Fetch  游标名InTo  临时记录或属性类型变量;
  • カーソル: カーソルはバッファー プールに配置され、リソースは完全には解放されません。再開可能です。

Close  游标名;

2. ループ カーソルの移動

  • ループ カーソルの場合

ループ カーソルは次のとおりです。暗黙的にオープン カーソルは自動的にスクロールしてレコードを取得し、レコードを保存するための一時レコード タイプ変数を自動的に作成します。処理後、カーソルは自動的に閉じられます。

     For  变量名  In  游标名 
     Loop
      数据处理语句;
     End Loop;
  • ループ カーソル

     。。。
    Loop
     Fatch  游标名InTo  临时记录或属性类型变量;
     Exit  When   游标名%NotFound;
    End   Loop;
     。。。

例 1:

/* conn scott/tiger */
   Declare
     Cursor myCur is select empno,ename,sal from emp;
     vna varchar2(10);
     vno number(4);
     vsal number(7,2);
  Begin
     open myCur;
     fetch myCur into vno,vna,vsal;
     dbms_output.put_line(vno||'    '||vna||'    '||vsal);
     close myCur;
  End;
  /

例 2: ループを使用してカーソルを移動します。

 /* conn scott/tiger */
  Declare
     Cursor myCur is select ename,job,sal,empno from emp;
     varE myCur%rowType;
  Begin
     if myCur%isopen = false then
        open myCur;
       dbms_output.put_line('Opening...');
     end if;
     loop
        fetch myCur into varE;
        exit when myCur%notfound;
        dbms_output.put_line(myCur%rowCount||'    '||vare.empno||'    '||vare.ename||'    '||vare.sal);
     end loop;
     if myCur%isopen then
        Close myCur;
        dbms_output.put_line('Closing...');
     end if;
  End;
  /

例 3: For ループを使用してカーソルを移動します。

  /* conn scott/tiger */
  Declare
     Cursor myCur is select * from emp;
  Begin
     for varA in myCur
      loop
         dbms_output.put_line(myCur%rowCount||'    '||varA.empno||'    '||varA.ename||'  '||varA.sal);
      end loop;
  End;
  /

表示されたカーソル内のレコードを更新および削除するにはどうすればよいですか?

①UPDATE または DELETE ステートメントの WHERE CURRENT OF 部分文字列は、UPDATE または DELETE 操作を実行するテーブルから取得された最新のデータを具体的に処理します。

このメソッドを使用するには、カーソルを宣言するときに FOR UPDATE 部分文字列を使用する必要があります。ダイアログで FOR UPDATE 部分文字列を使用してカーソルを開くと、

戻りセット内のすべてのデータ行が行レベル (ROW-LEVEL) 排他ロックにある場合、他のオブジェクトはこれらのデータ行のクエリのみを行うことができ、

は UPDATE、DELETE、または SELECT...FOR UPDATE 操作を実行できません。

複数テーブルのクエリでは、OF 句を使用して特定のテーブルをロックします。OF 句が無視されると、すべてのテーブルで選択されたデータ行がロックされます。

これらのデータ行が他のセッションによってロックされている場合、通常の状況では、ORACLE はデータ行のロックが解除されるまで待機します。

② 更新または削除を使用します:

⑴ 表示カーソルを更新または削除することを宣言します:

   Cursor 游标名IS  SELECT 语句   For Update [ Of  更新列列名];
   Cursor 游标名IS  SELECT 语句   For Delete [ Of  更新列列名];

⑵ 表示カーソルを使用して現在のレコードを更新または削除します:

   Update  表名   SET   更新语句  Where   Current  Of   游标名;
   Delete  From  表名   Where   Current  Of   游标名;

例 1: 表示カーソル レコードを更新します

   /*conn scott/tiger*/
   Declare
     Cursor myCur is select job from emp for update;
       vjob empa.job%type;
       rsal empa.sal%type;
    Begin
       open myCur;
       loop
          fetch myCur into vjob;
          exit when myCur%notFound;
          case  (vjob)
             when 'ANALYST' then  rsal := 0.1;
            when  'CLERK' then  rsal := 0.2;
             when  'MANAGER' then  rsal := 0.3;
             else
               rsal := 0.5;
          end case;
        update emp set sal = sal + rsal where current of myCur;
       end loop;
    End;
    /

例 2: 表示カーソル レコードを削除します

    /*conn scott/tiger
    Crate table  empa  Select * from scott.emp;
    */
    Declare
      Cursor MyCursor  Select   JOB  From  empa  For  Update;
      vSal   emp.Sal%TYPE;
    Begin
      Loop
       Fetch  MyCursor  InTo  vSal;
       Exit  When  MyCursor%NotFound;
       If   vSal < 800 Then
        Delete  From empa  Where  Cursor  Of   MyCursor;
       End  If;  
      End    Loop;
    End;/

パラメータ付き表示カーソルとは何ですか?

1. プロシージャや関数と同様に、パラメータをカーソルに渡してクエリで使用できます。

パラメータはデータ型のみを定義し、サイズは定義しません (Oracle のすべての仮パラメータはデータ型のみを定義し、サイズは定義しません)。

与过程不同的是,游标只能接受传递的值,而不能返回值。

  可以给参数设定一个缺省值,当没有参数值传递给游标时,就使用缺省值。

游标中定义的参数只是一个占位符,在别处引用该参数不一定可靠。

2、使用带参数的显示游标

  • 声明带参数的显示游标:

   CURSOR 游标名  [(parameter[,parameter],...)]    IS   Select语句;

参数形式:

1,参数名 数据类型

2,参数名 数据类型 DEFAULT 默认值

例子:

    /*conn scott/tiger
    Crate table  empa  Select * from scott.emp;
    */
    Declare
      Cursor MyCursor(pSal  Number  Default   800)  Select   JOB  From  empa Where  SAL >  pSal ;
      varA  MyCursor%ROWTYPE;
    Begin
      Loop
       Fetch  MyCursor  InTo  varA;
       Exit  When  MyCursor%NotFound;
       DBMS_OUTPUT.PUT_LINE(MyCursor%RowCount||&#39;    &#39;||varA.empno||&#39;    &#39;||varA.ename||&#39;  &#39;||varA.sal); 
      End    Loop;
    End;/

推荐教程:《Oracle教程

以上がオラクルカーソルとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Stock Market GPT

Stock Market GPT

AIを活用した投資調査により賢明な意思決定を実現

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ビッグデータ環境でHadoopとのOracleデータベースの統合を使用する ビッグデータ環境でHadoopとのOracleデータベースの統合を使用する Jun 04, 2025 pm 10:24 PM

OracleデータベースをHadoopと統合する主な理由は、Oracleの強力なデータ管理およびトランザクション処理機能、およびHadoopの大規模なデータストレージおよび分析機能を活用することです。統合方法には、次のものが含まれます。1。OracleBigDataconnectorからHadoopへのデータのエクスポート。 2。データ送信にはapachesqoopを使用します。 3. Oracleの外部テーブル関数を介してHadoopデータを直接読み取ります。 4. OracleGoldEngateを使用して、データの同期を実現します。

特定のフィールド値を取得せずにオラクルを行う方法 特定のフィールド値を取得せずにオラクルを行う方法 Jun 04, 2025 pm 10:21 PM

Oracleデータベースでは、クエリ時に特定のフィールドの値を返さない場合は、次の3つの方法を使用できます。選択ステートメントに必要なフィールドのみをリストし、不要なフィールドを選択しないでください。ビューを作成してクエリを簡素化しますが、ビューの複雑さとメンテナンスコストに注意してください。サブクリーリーまたは結合を使用して不要な列を除くことは、列の動的除外に適していますが、クエリのパフォーマンスに影響を与える可能性があります。各方法には、適用可能なシナリオと潜在的な欠点があり、特定のニーズとパフォーマンスに関する考慮事項に基づいて、最も適切な方法を選択する必要があります。

不可能なクラウドネットワーク(ICNT)とは何ですか?どうやって? Binanceがまもなく開始するICNプロジェクトの包括的な紹介 不可能なクラウドネットワーク(ICNT)とは何ですか?どうやって? Binanceがまもなく開始するICNプロジェクトの包括的な紹介 Jul 07, 2025 pm 07:06 PM

内容1。ICNとは何ですか? 2。ICNT最新の更新3。ICNと他のDEPINプロジェクトと経済モデルの比較と経済モデル4。5月末のDePINトラックの次の段階の結論、ICN(不可能なもの)@ICN_Protocolは、NGPCAPITALへの戦略的投資を4億7000万ドルの評価で受け取ったと発表しました。多くの人々の最初の反応は、「XiaomiはWeb3に投資しましたか?」でした。これはレイ・ジュンの直接的な動きではありませんでしたが、Xiaomi、Helium、およびWorkFusionに賭けた人は

Oracleの物理的データベース構造と論理データベース構造の違いは何ですか? Oracleの物理的データベース構造と論理データベース構造の違いは何ですか? Jun 10, 2025 am 12:01 AM

Oracleデータベースの論理構造は、テーブル、ビュー、パターン、テーブルスペースなど、ユーザーや開発者がデータを編成する方法に焦点を当てています。物理構造には、データファイル、redoログ、制御ファイルなどを含むディスク上のデータの実際のストレージが含まれます。1。論理構造には、テーブル、ビュー、インデックス、パターン、テーブルスペースが含まれ、ユーザーがデータにアクセスする方法を決定します。 2。物理構造は、データファイル、redoログ、制御ファイル、アーカイブログで構成されています。これらは、データの持続性と回復を担当します。 3.テーブルスペースは、論理と物理学をつなぐ重要なブリッジであり、その容量は基礎となるデータファイルによって制限されます。 4.異なる役割にはさまざまなレベルの注意があり、開発者は論理の最適化に焦点を当てており、DBAは身体管理により多くの注意を払っています。 5。2つの違いを理解することで、問題を効率的にトラブルシューティングし、パフォーマンスを最適化し、合理的な管理を行うことができます

Oracleの一時的なテーブルスペースの目的は何ですか? Oracleの一時的なテーブルスペースの目的は何ですか? Jun 27, 2025 am 12:58 AM

一時的な標準装置は、dataduringsqloperations likesorting、hashing、andglobaltempolarytables.1)surtingoperationssuchasorderby、groupby、ordistcistinctskskspaceifmemoryisufficient.2)ハスヨン症の角膜下触能筋関節系

Oracleは、やり直しおよび元に戻すメカニズムを使用して、トランザクションコミットとロールバックをどのように管理しますか? Oracleは、やり直しおよび元に戻すメカニズムを使用して、トランザクションコミットとロールバックをどのように管理しますか? Jul 08, 2025 am 12:16 AM

OracleEresurestransactionDurabilityandConsingsinging of oforcommitsundundoforrollbacks.duringAcommit、OraclegeneratesAcomitredologbuffer、MarksChangesAspranentinredologs、およびAndUpdatestesctestescntecntecntorescntoreflectthecurrentdatabasetate.forrollbacks、oracle

Ethereum Cross-Chain Bridgeとは何ですか?資産譲渡を達成する方法は? Ethereum Cross-Chain Bridgeとは何ですか?資産譲渡を達成する方法は? Jul 02, 2025 pm 10:57 PM

ブロックチェーンテクノロジーは、Ethereum、Binance Smart Chain、Polygonなどの多くの独立したネットワークを生み出しました。各ネットワークには独自のデザインとプロトコルがあります。しかし、この独立は、異なるチェーン間で自由に流れる困難な資産と情報の課題も提示しています。たとえば、EthereumのERC-20トークンは、ポリゴンネットワークで直接使用することはできません。この分離の問題を解決するために、クロスチェーンブリッジが出現し、さまざまなブロックチェーンネットワークを接続するための重要なインフラストラクチャになりました。

Oracle Data Dictionaryとは何ですか?また、メタデータをどのように照会できますか? Oracle Data Dictionaryとは何ですか?また、メタデータをどのように照会できますか? Jul 03, 2025 am 12:07 AM

OracLedatadictionaryは、メタデータを保存するOracleデータベースのコアリード専用構造であり、データベースオブジェクト、アクセス許可、ユーザー、ステータスなどの情報を提供します。 1.主なビューには、user_xxx(現在のユーザーオブジェクト)、all_xxx(現在のユーザーアクセスオブジェクト)、dba_xxx(完全なライブラリオブジェクトにはDBA許可が必要です)が含まれます。 2。テーブル列情報、一次キーの制約、テーブルアノテーションなどのメタデータは、SQLクエリを通じて取得できます。 3.使用シナリオ開発構造のレビュー、デバッグ許可分析、クエリパフォーマンスの最適化、自動化されたスクリプト生成をカバーします。命名規則と一般的なビューのマスター化は、データベースの構成と構造情報を効率的に取得できます。

See all articles