Oracle-day04 中
阿新 • • 發佈:2018-06-06
Oracle(六)循環
1.無條件循環
語法結構
1.無條件循環
語法結構
loop
--循環語句
end loop;
範例:輸出從1開始的100個數
declare
v_num number:=1;
begin
loop
dbms_output.put_line(v_num);
v_num:=v_num+1;
exit when v_num>100;
end loop;
end ;
2、條件循環
語法結構
while 條件
loop
end loop;
範例:輸出從1開始的100個數
declare v_num number:=1; begin while v_num<=100 loop dbms_output.put_line(v_num); v_num:=v_num+1; end loop; end ;
3、for循環
基本語法
for 變量 in 起始值..終止值
loop
end loop;
範例:輸出從1開始的100個數
begin
for v_num in 1..100
loop
dbms_output.put_line(v_num);
end loop;
end;
(七)遊標
1.什麽是遊標
遊標是系統為用戶開設的一個數據緩沖區,存放 SQL 語句的執行結果。我們
可以把遊標理解為 PL/SQL 中的結果集。
2.語法結構及示例
在聲明區聲明遊標,語法如下:
cursor 遊標名稱 is SQL 語句;
使用遊標語法
open 遊標名稱 loop fetch 遊標名稱 into 變量 exit when 遊標名稱%notfound end loop; close 遊標名稱
需求:打印業主類型為 1 的價格表
代碼:
declare v_pricetable T_PRICETABLE%rowtype;--價格行對象 cursor cur_pricetable is select * from T_PRICETABLE where ownertypeid=1;--定義遊標 begin open cur_pricetable;--打開遊標 loop fetch cur_pricetable into v_pricetable;--提取遊標到變量 exit when cur_pricetable%notfound;--當遊標到最後一行下面退 出循環 dbms_output.put_line( ‘價格:‘ ||v_pricetable.price ||‘噸位: ‘||v_pricetable.minnum||‘-‘||v_pricetable.maxnum ); end loop; close cur_pricetable;--關閉遊標 end ;
運行結果如下:
3.帶參數的遊標
我們的查詢語句的條件值有可能是在運行時才能決定的,比如性業主類型,
可能是運行時才可以決定,那如何實現呢?我們接下來學習帶參數的遊標,修改
上述案例
declare
v_pricetable T_PRICETABLE%rowtype;--價格行對象
cursor cur_pricetable(v_ownertypeid number) is select *
from T_PRICETABLE where ownertypeid=v_ownertypeid;--定義遊
標
begin
open cur_pricetable(2);--打開遊標
loop
fetch cur_pricetable into v_pricetable;--提取遊標到變量
exit when cur_pricetable%notfound;--當遊標到最後一行下面退
出循環
dbms_output.put_line(‘價格:‘||v_pricetable.price ||‘噸
位:‘||v_pricetable.minnum||‘-‘||v_pricetable.maxnum );
end loop;
close cur_pricetable;--關閉遊標
end ;
4.for循環提取遊標值
我們每次提取遊標,需要打開遊標 關閉遊標 循環遊標 提取遊標 控制循環的
退出等等,好麻煩!有沒有更簡單的寫法呢?有!用 for 循環一切都那麽簡單,
上例的代碼可以改造為下列形式
declare
cursor cur_pricetable(v_ownertypeid number) is select *
from T_PRICETABLE where ownertypeid=v_ownertypeid;--定義遊
標
begin
for v_pricetable in cur_pricetable(3)
loop
dbms_output.put_line(‘價格:‘||v_pricetable.price ||‘噸
位:‘||v_pricetable.minnum||‘-‘||v_pricetable.maxnum );
end loop;
end ;
二、存儲函數
(一)什麽是存儲函數
存儲函數又稱為自定義函數。可以接收一個或多個參數,返回一個結果。
在函數中我們可以使用 P/SQL 進行邏輯的處理。
(二)存儲函數語法結構
創建或修改存儲過程的語法如下:
CREATE [ OR REPLACE ] FUNCTION 函數名稱
(參數名稱 參數類型, 參數名稱 參數類型, ...)
RETURN 結果變量數據類型
IS
變量聲明部分;
BEGIN
邏輯部分;
RETURN 結果變量;
[EXCEPTION
異常處理部分]
END;
(三)案例
需求: 創建存儲函數,根據地址 ID 查詢地址名稱。
語句:
create function fn_getaddress(v_id number)
return varchar2
is
v_name varchar2(30);
begin
select name into v_name from t_address where id=v_id;
return v_name;
end;
測試此函數:
select fn_getaddress(3) from dual
輸出內容
需求:查詢業主 ID,業主名稱,業主地址,業主地址使用剛才我們創建的函數
來實現。
select id 編號,name 業主名稱,fn_getaddress(addressid) 地址
from t_owners
查詢結果如下:
Oracle-day04 中