--隱式游標
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...