pl sql 使用游標屬性,案例

2021-09-01 21:56:23 字數 2829 閱讀 8417

使用游標

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 ...