強型別的動態遊標和弱型別的動態遊標區別
阿新 • • 發佈:2019-02-01
1、簡單的來說:強型別的動態遊標是指帶有return返回語句的,而弱型別的動態遊標是指不帶return語句的(也即,弱型別的動態遊標可以與任何查詢語句匹配,但是強型別的動態遊標只能與特定的查詢語句匹配。)
2、個人理解:強型別的有點像java中使用了泛型一樣對其進行了限制,而弱型別的就像object型別。
3、弱型別的動態遊標使用示例:
--根據使用者的不同輸入來列印(custom、salerecord)資訊
declare
type ruoleixing is ref cursor; --定義一個動態遊標型別(弱)
ruoref ruoleixing; --申明遊標
e_custom custom%rowtype;
--宣告變數接收查詢出來的結果
e_salerecordsalerecord%rowtype;
receiver varchar2(1) :=upper(substr('&input',1,1));--定義變數接收使用者的輸入(其中的&input主要就要個&,input是隨便取就行)
(其中的upper,substr分別表示將接收到的使用者輸入轉換為大寫和擷取使用者輸入的第一個字母,注:在接收使用者輸入的時候如果是字串資訊得用單引號括起來即:'&input'否則會報錯!)
begin
--判斷使用者的輸入並進行相應的輸出
if (receiver = 'C') then
open ruoref for --開啟遊標
select * from custom;
loop --迴圈提取遊標中的資料
fetch ruoref into e_custom;
exit when ruoref%notfound;
dbms_output.put_line(e_custom.name || ''|| e_custom.levels); --注:別混了oracle中字串的拼接是使用 concat 或 ||;e_custom.name || ' '||e_custom.levels中的name、levels均是custom表中的欄位名
end loop;
elsif (receiver = 'S') then
open ruoref for
select * from salerecord;
loop
fetch ruoref intoe_salerecord;
exit when ruoref%notfound;
dbms_output.put_line(e_salerecord.totalmoney);--e_salerecord.money中的totalmoney是salerecord表中的一個欄位名
end loop;
else
dbms_output.put_line('請輸入C或S!');
return; --return表示退出此次操作
end if;
close ruoref; --注意要及時的關閉遊標
end;