首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle PL/SQL 游標完整教程:顯式/隱式、參數化、FOR LOOP、REF CURSOR 與可更新游標

     編輯:Oracle 資料庫相關知識

游標屬性

  • %FOUND:最近 SQL 影響行數 >0
  • %NOTFOUND:相反
  • %ISOPEN:顯式游標是否打開
  • %ROWCOUNT:已提取行數(每次 FETCH 遞增)

顯式游標標準循環

DECLARE
CURSOR c_dept IS SELECT * FROM dept;
r_dept dept%ROWTYPE;
BEGIN
OPEN c_dept;
FETCH c_dept INTO r_dept;
WHILE c_dept%FOUND LOOP
DBMS_OUTPUT.PUT_LINE(r_dept.deptno||' '||r_dept.dname);
FETCH c_dept INTO r_dept;
END LOOP;
CLOSE c_dept;
END;

參數化游標

CURSOR c_dept(p_no VARCHAR2) IS SELECT * FROM dept WHERE deptno = p_no;
OPEN c_dept(10);

FOR LOOP 簡化寫法(自動 OPEN/FETCH/CLOSE)

FOR r IN c_dept(10) LOOP
DBMS_OUTPUT.PUT_LINE(r.deptno||' '||r.dname);
END LOOP;

可更新游標 FOR UPDATE

CURSOR c_dept IS SELECT dname FROM dept FOR UPDATE;
...
UPDATE dept SET dname = RTRIM(dname,'_t') WHERE CURRENT OF c_dept;

REF CURSOR 動態查詢

TYPE t_ref IS REF CURSOR;
c_ref t_ref;
OPEN c_ref FOR 'SELECT * FROM person';
LOOP FETCH c_ref INTO r_person; EXIT WHEN c_ref%NOTFOUND; ... END LOOP;

隱式游標

FOR r IN (SELECT dname FROM dept) LOOP ... END LOOP;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved