検索
ホームページデータベース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 までご連絡ください。
什么是oracle asm什么是oracle asmApr 18, 2022 pm 04:16 PM

oracle asm指的是“自动存储管理”,是一种卷管理器,可自动管理磁盘组并提供有效的数据冗余功能;它是做为单独的Oracle实例实施和部署。asm的优势:1、配置简单、可最大化推动数据库合并的存储资源利用;2、支持BIGFILE文件等。

oracle怎么查询所有索引oracle怎么查询所有索引May 13, 2022 pm 05:23 PM

方法:1、利用“select*from user_indexes where table_name=表名”语句查询表中索引;2、利用“select*from all_indexes where table_name=表名”语句查询所有索引。

Oracle怎么查询端口号Oracle怎么查询端口号May 13, 2022 am 10:10 AM

在Oracle中,可利用lsnrctl命令查询端口号,该命令是Oracle的监听命令;在启动、关闭或重启oracle监听器之前可使用该命令检查oracle监听器的状态,语法为“lsnrctl status”,结果PORT后的内容就是端口号。

oracle全角怎么转半角oracle全角怎么转半角May 13, 2022 pm 03:21 PM

在oracle中,可以利用“TO_SINGLE_BYTE(String)”将全角转换为半角;“TO_SINGLE_BYTE”函数可以将参数中所有多字节字符都替换为等价的单字节字符,只有当数据库字符集同时包含多字节和单字节字符的时候有效。

oracle怎么删除sequenceoracle怎么删除sequenceMay 13, 2022 pm 03:35 PM

在oracle中,可以利用“drop sequence sequence名”来删除sequence;sequence是自动增加数字序列的意思,也就是序列号,序列号自动增加不能重置,因此需要利用drop sequence语句来删除序列。

oracle怎么查询数据类型oracle怎么查询数据类型May 13, 2022 pm 04:19 PM

在oracle中,可以利用“select ... From all_tab_columns where table_name=upper('表名') AND owner=upper('数据库登录用户名');”语句查询数据库表的数据类型。

oracle查询怎么不区分大小写oracle查询怎么不区分大小写May 10, 2022 pm 05:45 PM

方法:1、利用“LOWER(字段值)”将字段转为小写,或者利用“UPPER(字段值)”将字段转为大写;2、利用“REGEXP_LIKE(字符串,正则表达式,'i')”,当参数设置为“i”时,说明进行匹配不区分大小写。

Oracle怎么修改sessionOracle怎么修改sessionMay 13, 2022 pm 05:06 PM

方法:1、利用“alter system set sessions=修改后的数值 scope=spfile”语句修改session参数;2、修改参数之后利用“shutdown immediate – startup”语句重启服务器即可生效。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境