Oracle游標學習二

2021-08-30 20:04:49 字數 3062 閱讀 2557

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.宣告游標必須指定名稱...