--- Oracleデータベースカーソル

-従業員番号、名前と位置の全従業員のためのクエリ。
DECLARE
-カーソルの定義
、SELECT EMPNO emp_cursor IS、ENAMEをCURSORをEMPからジョブ;
TYPE%のemp.empno v_empno;
v_enameはTYPE%とEMP.ENAME;
TYPE%のemp.job v_job;
BEGIN
-カーソルをオープンし、実行するには、照会
OPEN emp_cursorを;
- -抽出データ
ループが
FETCH emp_cursor v_empno、v_ename、v_job INTO;
DBMS_OUTPUT.PUT_LINE( '従業員番号:' || v_empno || '名前:' || v_ename || '位置:' || v_job);
-何ループを終了したときに?
- %FOUND、%NOTFOUND
EXIT WHEN emp_cursor%のNOTFOUND;
エンドループ;
-カーソルを閉じる
CLOSE emp_cursor;
ENDを、

-従業員番号、名前と位置の全従業員のためのクエリ。
DECLARE
-カーソルの定義
、SELECT EMPNO emp_cursor IS、ENAMEカーソルをEMPからジョブ;
型%emp.empno v_empno;
v_enameは型%をEMP.ENAME、
型%emp.job v_job;
BEGIN
- 、カーソルを開き、クエリ実行
--open emp_cursorを;
-カーソルが開いているかどうかを検出する
場合、emp_cursor%ISOPEN
DBMS_OUTPUT.PUT_LINE(「カーソルが既に開かれた」);
ELSE
DBMS_OUTPUT.PUT_LINE(「カーソルが開いていない」);
END IF;

終わり;

-カーソルFORループ
のDECLARE
SELECT EMPNO IS emp_cursor CURSOR、ENAME、仕事EMP FROM;
BEGIN
、forループでemp_cursor emp_record
DBMS_OUTPUT.PUT_LINEを( '従業員の数:' || emp_record.empno || '名前:' || emp_record.ename || '位置:' || emp_record.job);
END LOOP;
END;

-サブクエリで参照されるカーソルFORループは、
BEGIN
emp_record IN(SELECT EMPNO、ENAME、EMPからジョブ)forループ
DBMS_OUTPUT.PUT_LINE(「従業員番号: '|| emp_record.empno ||'、名前: '|| emp_record.ename ||'、ポジション:「|| emp_record.job);
ENDのLOOP;
END;

-参数游标
DECLARE
カーソルemp_cursor(DNO数)SELECT EMPNO、ENAME、EMPからジョブWHERE DEPTNO = DNOです。
BEGIN
emp_cursor IN emp_record FOR(&なし)LOOP
DBMS_OUTPUT.PUT_LINE( '员工号:' || emp_record.empno || '姓名: '|| emp_record.ename ||'、职位:' || emp_record.jobを)。
END LOOP;
終わり;

-従業員ユーザによる番号入力、例えば賃金などの従業員の指定された給与を更新するためには、100バラ
暗黙カーソル-
BEGIN
; SET SAL + SAL = 100&WHERE EMPNO = NO empnew UPDATEを
IFは、その後のSQL%のFOUND
DBMS_OUTPUT.PUT_LINE(「正常に変更を賃金);
COMMIT;
ELSE
DBMS_OUTPUT.PUT_LINE( '賃金は'を変更することができなかった);!
ROLLBACK;
END IF;
END;

empnew SELECT * FROM。

-プレスタイトルの従業員昇給は、社長は他の従業員は300元上昇し、最大1,000元、500元マネージャーが上昇しました。
--1:ビジネス、従来の方法でカーソルの表示を達成するための要件
DECLARE
-カーソル定義する
ジョブempnew FROM、SELECT EMPNO empnew_cursor ISカーソルを、
TYPE%のempnew.empno v_empno;
TYPE%のempnew.job v_job;
BEGIN
-カーソルオープン
OPEN empnew_cursorを。
-データ抽出
LOOP
; v_job、INTOのv_empno empnew_cursor FETCH
IF v_job = '大統領THEN
SET SAL + SAL empnew UPDATE WHERE EMPNO = v_empno = 1000;
ELSIF v_job = 'MANAGER' THEN
SET SAL + SAL = 500 = WHERE EMPNO empnew UPDATE v_empno;
ELSE
SET SAL + SAL = 300 empnew UPDATE = WHERE EMPNO v_empno;
END IF;
EXIT empnew_cursor%NOTFOUND;
エンドループ;
A COMMIT。
-カーソルを閉じ
CLOSE empnew_cursorを;
END;

--2:用游标FOR循环的方式实现业务需求
DECLARE
-定义游标
カーソルempnew_cursorはSELECT EMPNO、empnew FROM仕事です。
BEGIN
empnew_cursor LOOP IN empnew_record FOR
(empnew_record.empno || '----' || empnew_record.job)をDBMS_OUTPUT.PUT_LINE。
empnew_record.job = '大統領は' THEN IF
empnew SETのSALを更新= SAL + 1000年WHERE EMPNO = empnew_record.empno。
ELSIF empnew_record.job = 'MANAGER'はTHEN
empnewセットを更新SAL = SAL + 500 WHERE EMPNO = empnew_record.empno。
ELSE
UPDATE empnew SETのSAL = SAL + 300 EMPNO = empnew_record.empno。
END IF;
END LOOP;
- コミット;
終わり;

更新のためのempnewから選択*;


--- 3:カーソルがUPDATE句のカーソルを使用して定義されている場合、カーソルを使用して、データの追加や削除がロックデータ行レベルから抽出することができる
DECLAREを
-カーソル定義
UPDATE FOR empnewのジョブから、SELECT EMPNO empnew_cursor ISカーソルを、
BEGIN
FORをループempnew_cursor empnew_record
DBMS_OUTPUT.PUT_LINE(empnew_record.empno || '----' || empnew_record.job);
IF empnew_record.job = '大統領THEN
SET empnew UPDATE = SAL + SAL 1000のWHERE CURRENT empnew_cursor;
ELSIFのempnew_record = .JOB 'MANAGER' THEN
SET SAL + SAL OF = 500 empnew UPDATE WHERE CURRENT empnew_cursor;
ELSE
SET SAL + SAL OF = 300 empnew UPDATE WHERE CURRENT empnew_cursor;
END IF;
エンドループ;
A COMMIT;
END;

empnew SELECT * FROM。

ロックを待機しない--FORのUPDATE NOWAIT、データ列に見られるような、ロック操作を有し、すぐに戻り、待機しません
DECLAREを
-カーソルを定義
し、ジョブUPDATE NOWAIT empnew FROM SELECT EMPNO empnew_cursor CURSORを、
BEGIN
FORループはINをempnew_record empnew_cursor
DBMS_OUTPUT.PUT_LINE(empnew_record.empno || '----' || empnew_record.job);
IF empnew_record.job = '大統領THEN
SET empnew UPDATE = SAL + SAL 1000 CURRENT empnew_cursor WHERE;
ELSIF empnew_record.job =' MANAGER「THEN
SET SAL + SAL OF = 500 empnew UPDATE WHERE CURRENT empnew_cursor;
ELSE
SET SAL + SAL OF = 300 empnew UPDATE WHERE CURRENT empnew_cursor;
END IF;
エンドループ;
A COMMIT;
END;

empnew SELECT * FROM。

-使用OF子句在特定表上加行共享锁
DECLARE
CURSOR empnew_cursor IS
SELECT d.dname dnameの、e.ename ENAME
e.deptno = d.deptnoにDEPT dを参加empnew Eから
WHERE e.deptno =&DEPTNO
UPDATE FOR e.deptno OF;
BEGIN
empnew_record、IN empnew_cursor LOOP FOR
(:|| empnew_record.dname || '部门名称' '员工名:' || empnew_record.ename)DBMS_OUTPUT.PUT_LINE。
WHERE empnew_cursor OF CURRENT empnew。DELETE FROM。
END LOOP;
コミット;
終わり;

ここで、DEPTNO = 20 empnew SELECT * FROM。

 

 

 

 

 


おすすめ

転載: www.cnblogs.com/xiaomifeng1010/p/11117347.html