1 for迴圈
語法:begin
for i in reverse 1..10 loop
insert into users values(i,』歐巴馬『)。
end loop;
end;
注意:迴圈變數 i 是隱含新增的。所以無法看到
2 goto語句
goto 語句用於跳轉到特定的位置去執行語句。因為goto語句會降低程式的可讀性,所以普通情況下
不建議使用goto語句
3 null語句
null語句不會執行不論什麼操作,可是能夠新增程式的可讀性
4 建立返回值是乙個結果集的儲存過程
(1) 建立乙個包:
sql> create or replace package testpackage as
type test test_cursor is ref cursor;
end testpackage;
(2) 建立儲存過程
sql> create or replace procedure sp_procedure1
(stuno in number, param_cursor out testpackage.test_cursor) is
begin
open param_cursor for select * from emp where sutno=stuno;
end;
5 分頁
(1) sql語句
select * from
(select *,rownum no from
(select * from emp) where rownum <=20) where rownum >=10;
(2) 建立乙個包
create or replace package testpackage2 as
type test test_cursor is ref cursor;
end testpackage2;
(3) 建立儲存過程
sql> create or replace procedure procedurename2
(tablename in varchar2, -- 表名
pagesize in number, -- 每頁顯示的記錄數
pagenow in number, -- 當前是第幾頁
pagecount out number, -- 總頁數
p_cursor out testpackage2.test_cursor) is
v_sql varchar2(1000);
v_beginnum number := (pagenow -1)* pagesize + 1;
v_endnum number := pagenow * pagesize;
begin
v_sql := 'select * from (select *,rownum no from (select * from '|| tablename ||')
where rownum <= '|| v_endnum ||') where rownum >= '|| v_beginnum;
open p_cursor for v_sql;
-- 建立乙個sql語句
v_sql := 'select count(*) from ' || tablename;
-- 執行sql語句,將結果儲存
execute immediate v_sql into rows。
if mod(rows,pagesize) = 0
then pagecount := rows / pagesize;
else
pagecount := rows / pagesize + 1;
end if;
-- 關閉游標
close p_cursor;
end;
6 異常處理
(1) 提前定義異常
(2) 非提前定義異常
(3) 自己定義異常
例1sql> declare v_name emp.ename%type;
begin
select ename into v_name from emp where empno = &no;
dbms_output.put_line('名字:' || v_name);
exception
when no_data_found
then dbms_output.put_line('編號沒有!
');
end;
提前定義異常
a case_not_found
在編寫case 語句時。假設在when子句中沒有包括必須的條件分支(沒有符合條件的)。就會觸發case_not_found異常
b cursor_already_open
當又一次開啟已經開啟的游標時觸發此異常
c dup_val_on_index
在唯一索引所相應的列上插入反覆值時觸發此異常
d invalid_cursor
當試圖在不合法的游標上進行操作時觸發此異常
e invalid_number
當輸入的數字無效時觸發此異常
f too_many_rows
當返回值不止是一條記錄時觸發此異常
g zero_divide
當進行 x/0,即除數為零的操作時觸發此異常
h value_error
當進行賦值操作時,假設變數的長度不足以儲存實際資料時觸發此異常
i login——denide
當使用者非法登入時會觸發此異常
j not_logged_on
假設使用者沒有登入就執行dml操作,就會觸發此異常
k storage_error
假設超出了記憶體空間,就會觸發此異常
l timeout_on_resource
當oracle等待資源時。假設發生超時情況,就會觸發此異常
自己定義異常
sql> create or replace procedure procedurename2(sp_empno number) is
myexpception exceptiom; -- 自己定義乙個異常
begin
update emp set sal = sal * 1.2 where empno = &no;
if sql%notfound then
raise myexpception; -- 觸發自己定義異常
end if;
exception
when no_data_found
then dbms_output.put_line('沒有更新資料!
');
end;
PL SQL 程式設計 二
1 for迴圈 語法 begin for i in reverse 1.10 loop insert into users values i,歐巴馬 end loop end 注意 迴圈變數 i 是隱含增加的,所以無法看到 2 goto語句 goto 語句用於跳轉到特定的位置去執行語句。由於goto...
pl sql程式設計(二)
建立乙個函式 輸入姓名 返回年薪 表裡存的是月薪 create function sp fun2 spname varchar2 return number is yearsal number 10,2 begin select sal 12 into yearsal from emp where ...
plsql程式設計詳解 二
九 迴圈語句 一共有三種迴圈方式 oracle中沒有自增 自身 自身 1即可 while 條件 loop end loop loop exit when 條件 end loop for i in 1.5 必須為連續區間 loop end loop 例1 while迴圈列印數字的1 10set ser...