游標的語法

2021-07-27 10:18:21 字數 3931 閱讀 5224

--隱式游標

set serveroutput on;

begin

if sql%isopen then dbms_output.put_line('before:已開啟');

else dbms_output.put_line('before:未開啟');

end if;

update emp set sal=222222222 where empno=&npo;

if sql%isopen then dbms_output.put_line('after:已開啟');

else dbms_output.put_line('after:未開啟');

end if;

if sql%notfound then

dbms_output.put_line('沒有書籍更新');

else

commit;

dbms_output.put_line('更新資料成功'||sql%rowcount);

end if;

exception

when others then

rollback;

dbms_output.put_line('更新失敗');

end;

--顯示游標  loop迴圈

set serveroutput on;

declare

--建立游標

cursor cs_emp is select empno,ename,job,sal from emp;

em emp.empno%type;

en emp.ename%type;

jo emp.job%type;

sa emp.sal%type;

begin

--開啟游標

if not cs_emp%isopen then

dbms_output.put_line('游標未開啟');

open cs_emp;

dbms_output.put_line('游標已開啟');

end if;

loop

--操作游標

fetch cs_emp into em,en,jo,sa;

dbms_output.put_line(em||':'||en||':'||jo||':'||sa);

exit when cs_emp%notfound;

end loop;

--關閉游標

close cs_emp;

end;

--顯示游標 while迴圈

set serveroutput on;

declare

--建立游標

cursor cs_emp is select empno,ename,job,sal from emp;

em emp.empno%type;

en emp.ename%type;

jo emp.job%type;

sa emp.sal%type;

begin

--開啟游標

if not cs_emp%isopen then

dbms_output.put_line('游標未開啟');

open cs_emp;

dbms_output.put_line('游標已開啟');

end if;

fetch cs_emp into em,en,jo,sa;

dbms_output.put_line(em||':'||en||':'||jo||':'||sa);

while cs_emp%found

loop

--操作游標

fetch cs_emp into em,en,jo,sa;

dbms_output.put_line(em||':'||en||':'||jo||':'||sa);

end loop;

--關閉游標

close cs_emp;

end;

set serveroutput on;

declare

--e emp%rowtype;

cursor cs_emp is select * from emp;

begin

for e in cs_emp loop

dbms_output.put_line(e.empno||':'||e.ename||':'||e.job);

end loop;

if cs_emp%isopen then

close cs_emp;

end if;

end;

---動態游標,引用游標 /*

1、定義動態游標資料型別 type型別名稱 is ref cursor

2、宣告此型別的游標變數 變數名 型別名稱;

3、開啟游標並制定所引用的結果集: open游標變數名 for select語句

4、操作游標 fetch 游標名 into 變數名

5、關閉 */

set serveroutput on;

declare

type my_cr is ref cursor;

cs_ref my_cr;

num int:=0;

eno emp.empno%type;

enm emp.ename%type;

begin

num:=&nm;

if num=1 then

open cs_ref for select empno,ename from emp;

dbms_output.put_line('編號-姓名');

loop

fetch cs_ref into eno,enm;

exit when cs_ref%notfound;

dbms_output.put_line(eno||'-'||enm);

end loop;

else

open cs_ref for select deptno,dname from dept;

dbms_output.put_line('編號-部門編號');

loop

fetch cs_ref into eno,enm;

exit when cs_ref%notfound;

dbms_output.put_line(eno||'-'||enm);

end loop;

end if;

--關閉游標

if cs_ref%isopen then

close cs_ref;

end if;

end;

/*--在程式包定義動態游標型別

create or replace package pkg_test is

type mycur is ref cursor;

end;

--從表中查詢資料的儲存過程proc_select_test

create or replace procedure proc_select_test(cur_return out pkg_test.mycur) is

begin

open cur_return for select empno,ename from emp;

end; */

--在程式包中定義動態游標型別

create or replace package pkg_test is

type mycur is ref cursor;

end;

--從表中查詢資料的儲存過程proc_select_test

create or replace procedure proc_select_test(cur_return out pkg_test.mycur) is

begin

open cur_return  for select empno,ename from emp;

end;

sql游標的使用語法

例子 table1結構如下 id int name varchar 50 declare id int declare name varchar 50 declare cursor1 cursor for 定義游標cursor1 select from table1 使用游標的物件 跟據需要填入se...

游標的定義 顯示游標 隱式游標語法

游標的定義 1.顯示游標 普通顯示游標 帶引數 cursor c pi month varchar2,file type varchar2 is select item id,item title from item where month id pi month 不帶引數 cursor c is ...

Cursor游標(游標)的使用

為了處理sql語句,oracle 將在記憶體中分配乙個區域,這就是上下文區。這個區包含了已經處理完的行數 指向被分析語句的指標,整個區是查詢語句返回的資料行集。游標就是指向上下文區控制代碼或指標。兩種游標 一 顯示游標 需要明確定義!顯示游標被用於處理返回多行資料的select 語句,游標名通過cu...