1. -- 定義游標是,可以返回多個列:使用變數處理
declare
cursor cur_emp is select p.empno,p.ename from scott.emp p; ----宣告顯示游標
t_empno scott.emp.empno%type;
t_ename scott.emp.ename%type;
begin
open cur_emp;
loop
fetch cur_emp into t_empno,t_ename; -- 注意fetch可以依次將多列資料放入到變數中
exit when cur_emp%notfound ;
dbms_output.put_line(t_empno);
dbms_output.put_line(t_ename);
end loop;
close cur_emp;
end;
2.-- 定義游標是,可以返回多個列 : 使用rowtype進行處理
declare
cursor cur_emp is select * from scott.emp p; -->必須返回整個表中的所有 列方可與t_emp 匹配
t_emp scott.emp%rowtype;
begin
open cur_emp;
loop
fetch cur_emp into t_emp; -- 注意fetch可以依次將多列資料放入到變數中
exit when cur_emp%notfound ;
dbms_output.put_line(t_emp.empno);
dbms_output.put_line(t_emp.ename);
end loop;
close cur_emp;
end;
3.-- 定義含有引數的游標(引數型別和儲存過程一樣,不能指定大小)
declare
cursor cur_emp(t_no varchar2) is select p.empno,p.ename from scott.emp p where
-- 注釋:引數的型別還可以為scott.emp.empno%type也是可以的
p.empno = t_no;
t_empno scott.emp.empno%type;
t_ename scott.emp.ename%type;
begin
open cur_emp('7369'); -- 傳入引數到游標中
loop
fetch cur_emp into t_empno,t_ename;
exit when cur_emp%notfound ;
dbms_output.put_line(t_empno);
dbms_output.put_line(t_ename);
end loop;
close cur_emp;
end;
4.-- 定義動態游標
declare
type cur_ref is ref cursor ; -- a 宣告ref游標型別
cur_emp cur_ref; -- b 宣告ref游標型別的變數
t_emp scott.emp%rowtype;
t_sql varchar2(4000);
begin
t_sql:='';
t_sql := t_sql || 'select * from scott.emp '; -- c 拼接sql語句(可拼接表名、條件、列名等)
open cur_emp for t_sql; -- d 動態執行sql
--注意:for後也可以直接跟sql: open cur_emp form select * from emp ;
loop
fetch cur_emp into t_emp; -- 注意fetch可以依次將多列資料放入到變數中
exit when cur_emp%notfound ;
dbms_output.put_line(t_emp.empno);
dbms_output.put_line(t_emp.ename);
end loop;
close cur_emp;
end;
1.-- pl/sql還提供了一種簡單型別的迴圈,可以自動控制游標的開啟、推進和關閉,叫做游標的for迴圈。
declare
cursor cur_emp is select p.empno,p.ename from scott.emp p;
begin
----開始游標for迴圈,隱含地開啟c_salary游標。
for t_emps in cur_emp -- 自動定義變數t_emps ,自動選擇使用合適的型別。來儲存游標返回值
loop
----乙個隱含的fetch語句在這裡被執行
dbms_output.put_line(t_emps.empno);
dbms_output.put_line(t_emps.ename);
--在迴圈繼續前,乙個隱含的c_auths%notfound被檢測。
end loop;
--現在迴圈已經結束,c_auths游標的乙個隱含的close操作被執行。
end;
2.--current of c_emp_cursor :如何通過游標來修改資料
declare
--通過游標修改資料要上行級鎖
cursor c_emp_cursor is
select * from emp2 where deptno = 30 for update;
begin
for v_row in c_emp_cursor loop
-- delete from emp2 where current of c_emp_cursor;
-- where current of 游標,作為條件,用在刪除、修改、查詢(賦值)中;
end loop;
commit;
end;
select * from emp;
oracle 游標 學習
1,什麼是游標?從表中檢索出結果集,從中每次指向一條記錄進行互動的機制。這些應用程式需要一種機制來一次處理一行或連續的幾行。而游標是對提供這一機制的結果集的擴充套件。游標是通過游標庫來實現的。游標庫是常常作為資料庫系統或資料訪問 api 的一部分而得以實現的軟體,用來管理從資料來源返回的資料的屬性 ...
Oracle游標學習筆記
游標按以下操作進行 parse 解析 bind 繫結 open 開啟 execute 執行 fetch 回取 close 關閉 1.寫自己第乙個游標pl sql declare cursor c s is select from user tables begin open c s 開啟游標 clo...
oracle學習筆記(五)游標
游標在資料庫操作中有著十分重要的作用,它簡單地說就相當於指標,針對表中檢索出來的結果進行操作,游標分為顯示游標和隱式游標。顯示游標是使用者可以自己宣告和操作的,通常用於操作查詢結果集。通過他來處理資料主要分為四步驟,首先是宣告游標,其次是開啟游標,然後讀取游標,最後關閉游標。1.宣告游標必須指定名稱...