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||' '||varA.empno||' '||varA.ename||' '||varA.sal); End Loop; End;/
推荐教程:《Oracle教程》
以上がオラクルカーソルとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Oracle Softwareは、データベース管理、ERP、CRM、およびデータ分析機能を通じてビジネスプロセスを簡素化します。 1)oracleerpcloudは、金融、人事、その他のプロセスを自動化します。 2)OracleCxCloudは顧客のやり取りを管理し、パーソナライズされたサービスを提供します。 3)OracleanalyticsCloudは、データ分析と意思決定をサポートしています。

Oracleのソフトウェアスイートには、データベース管理、ERP、CRMなどが含まれ、エンタープライズが運用を最適化し、効率を改善し、コストを削減するのに役立ちます。 1。OracLedatabaseはデータを管理します。2。OracleerPcloudは、ファイナンス、人事、サプライチェーンを処理します。3。oraclescmcloudを使用してサプライチェーン管理を最適化します。

MySQLとOracleの主な違いは、ライセンス、機能、および利点です。 1。ライセンス:MySQLは無料で使用するためのGPLライセンスを提供し、Oracleは高価な独自のライセンスを採用しています。 2。機能:MySQLには単純な機能があり、Webアプリケーションや中小企業に適しています。 Oracleには強力な機能があり、大規模なデータや複雑なビジネスに適しています。 3.利点:MySQLはオープンソース無料で、スタートアップに適しており、Oracleはパフォーマンスが信頼でき、大企業に適しています。

MySQLとOracleは、パフォーマンス、コスト、使用シナリオに大きな違いがあります。 1)パフォーマンス:Oracleは、複雑なクエリと高い並行性環境でパフォーマンスを向上させます。 2)コスト:MySQLはオープンソース、低コストで、中小規模のプロジェクトに適しています。 Oracleは商業化され、高コストで、大企業に適しています。 3)使用シナリオ:MySQLは、Webアプリケーションや中小企業に適しており、Oracleは複雑なエンタープライズレベルのアプリケーションに適しています。選択するときは、特定のニーズを比較検討する必要があります。

Oracleソフトウェアは、さまざまな方法でパフォーマンスを向上させることができます。 1)SQLクエリを最適化し、データ送信を削減します。 2)クエリの速度とメンテナンスコストのバランスをとるために、インデックスを適切に管理します。 3)メモリを合理的に構成し、SGAとPGAを最適化します。 4)I/O操作を削減し、適切なストレージデバイスを使用します。

Oracleは、包括的なソリューションと強力な技術サポートのため、エンタープライズソフトウェアおよびクラウドコンピューティングセクターで非常に重要です。 1)Oracleは、データベース管理からERPまで、幅広い製品ラインを提供します。2)OracleCloudPlatformやインフラストラクチャなどのクラウドコンピューティングサービスは、企業がデジタル変換を達成するのに役立ちました。

MySQLとOracleには独自の利点と欠点があり、選択する際には包括的な考慮事項を考慮する必要があります。1。MySQLは、Webアプリケーションや中小企業に適した軽量で使いやすいニーズに適しています。 2。Oracleは、大規模な企業や複雑なビジネスシステムに適した、強力な機能と高い信頼性のニーズに適しています。

MySQLは、小規模およびオープンソースプロジェクトにGPLおよび商業ライセンスを使用しています。 Oracleは、高性能を必要とする企業に商用ライセンスを使用しています。 MySQLのGPLライセンスは無料で、商業ライセンスには支払いが必要です。 Oracleライセンス料は、プロセッサまたはユーザーに基づいて計算され、コストは比較的高くなります。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

WebStorm Mac版
便利なJavaScript開発ツール

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

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