PL SQL 程式設計 二

2022-09-19 01:24:08 字數 3599 閱讀 9756

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