使用游標
1)顯示游標:
cursor name_cursor is select statement;
2)開啟游標:
open name_cursor;
3)提取游標
fetch name_cursor into variable1,variable2.............
4)關閉游標
close name_cursor;
顯示游標的屬性:
%isopen:顯示游標是否開啟
%found:是否從結果集中取到資料
%notfound:是否未從結果集中取到資料
%rowcount:已經取到的資料,不是說集合中間有多少資料,請這裡注意;
declare
cursor a_cursor is select id,name from test1;
v_id test1.id%type;
v_name test1.name%type;
begin
open a_cursor;
fetch a_cursor into v_id,v_name;
dbms_output.put_line(v_id);
dbms_output.put_line(v_name);
close a_cursor;
end;
使用游標更新或者刪除資料:
如果想通過游標更新或者刪除資料的話,那麼在定義游標的時候必須指定 for update
如下:cursor my_cursor is select * from test1 for update;
update table_name set column=xx where current of name_cursor;
delete table_name where current of name_cursor;
必須指定where current of name_current;
使用例外:
exception
when e_name1 or e_name2 then
statement1;
when 2_name3 then
statement2;
else
statement3;
when others then
statement4;
其中自定義異常是這樣的:
declare
e_name exception;
begin
raise e_name;
exception
when e_name then
dbms_output.put_line('異常丟擲');
end;
使用復合資料:
type my_record_type is record
declare
type my_record_type is record(
id test1.id%type,
name test1.name%type
);r1 my_record_type;
begin
select id,name into r1 from test1 where id=1;
dbms_output.put_line(r1.id || r1.name);
end;
declare
type my_record_type is record(
id test1.id%type,
name test1.name%type
);r1 test1%rowtype;
begin
select * into r1 from test1 where id=1;
dbms_output.put_line(r1.id || r1.name);
end;
/使用pl/sql表:
declare
type my_table_type is table of number(2,0)
index by binary_integer;
name_table my_table_type;
begin
select id bulk collect into name_table from test1;
dbms_output.put_line(name_table(1));
end;
使用pl/sql記錄表:
declare
type my_table_type is table of test1%rowtype
index by binary_integer;
name_table my_table_type;
begin
select * bulk collect into name_table from test1;
dbms_output.put_line(name_table(1).name);
end;
declare
type my_table_type is table of test1%rowtype
index by binary_integer;
name_table my_table_type;
begin
select * bulk collect into name_table from test1; --count可以得到這個表的長度
for i in 1..name_table.count loop
dbms_output.put_line(name_table(i).name);
end loop;
end;
PL SQL 引用游標的使用
使用引用游標的情景 1.你可能有這樣的需求 讓乙個函式返回乙個游標,然後宿主函式呼叫並使用這個游標 2.open cursor name for v sql statement 當時用動態sql進行多行查詢時,因為此處的cursour name必須是乙個游標變數,所以需要使用。h還可檢視例子 cre...
PL SQL用游標查詢多條記錄
pl sql游標為程式提供了從資料庫中選擇多行資料,然後對每行資料單獨進行處理的方法,它為oracle提供了一種指示和控制sql處理的各個階段的方法。我將認為您已經對pl sql有一定的了解。通過本文,您將學會 一 什麼是游標 oracle使用兩種游標 顯式游標和隱式游標。不管語句返回多少條紀錄,p...
游標使用2 常用屬性及引用游標
隱式游標 四個常用的屬性 sql found sql notfound sql isopen sql rowcount declare dept no number 4 50 begin delete from dept temp where deptno dept no if sql found ...