1、常規過程化形式
declareo_booking_flag
char(10
);begin
--call the procedure
destine_ticket('
000000037',
20,'e
',2,
o_booking_flag);
dbms_output.put_line(o_booking_flag);
end;
2、儲存過程
createorreplace
procedure destine_ticket(i_flightid in
char
, --不需要些型別值
i_luggagelimit
innumber
, i_class_code
inchar
, i_seats
innumber
, o_booking_flag out
char
) is
v_temp
integer
; v_temp1
integer
;begin
begin
select
1into v_temp from flight t1 where t1.flightid=i_flightid and to_number(t1.estdeparturedatetime-sysdate)*
24>=3;
exception --異常捕獲
when no_data_found then
v_temp:=0
; --複製要寫:=
end;
return; --退出儲存過程
end destine_ticket;
異常處理
--一異常處理的**
--sqlcode 異常編號
--sqlerrm 訊號字串
/*在plsql 塊中格式
declare
變數begin
**塊exception
when 異常的名稱 then
如生上面的異常時做的具體工作。
end;
*/set serveroutput on
;create
orreplace
procedure
pr12
as--
定義乙個int變liang
v_age integer
;v_name
varchar(30
);begin
v_age:=89
;--通過select給v_name設定值
--修改成過程
select name into v_name from stud where id=1;
dbms_output.put_line(
'沒有出錯');
exception
when value_error then
sys.dbms_output.put_line(
'數值錯誤');
when no_data_found then
sys.dbms_output.put_line(
'沒有資料');
when others then
sys.dbms_output.put_line(sqlcode||'
你出錯了'||
sqlerrm);
end;exec
pr12();
-----------------------------------------
--自定義異常自己丟擲異常/
/*定義乙個自己的異常
myexception exception;
丟擲異常
raise myexception;
處理自己的異常:
exception
when myexception then
....
*/set serveroutput on
;declare
myex exception;
begin
dbms_output.put_line(
'這裡沒錯');
raise myex;
dbms_output.put_line(
'不會輸出,前面丟擲異常');
--處理異常
exception
when myex then
dbms_output.put_line(
'自己的異常
'||sqlcode||''
||sqlerrm);
when others then
dbms_output.put_line(
'不知知道什麼錯誤
'||sqlcode||
sqlerrm);
end;
---出錯直接丟擲
declare
begin
dbms_output.put_line(
'no errors');
--直接丟擲
20000, 'a'
);dbms_output.put_line(
'go okk....');
exception
when others then
dbms_output.put_line(sqlcode||'
'||sqlerrm);
end;
3、過程呼叫
declareo_booking_flag
char(10
);begin
--call the procedure
destine_ticket(i_flightid =>
'000000037',
i_luggagelimit
=>20,
i_class_code
=>'e
',i_seats
=>2,
o_booking_flag
=>
o_booking_flag);
end;
4、觸發器
注意,一般刪除、更新等觸發器,不能呼叫觸發器表本身
createorreplace
trigger
flight_staff_check
before
insert
orupdate
ordelete
onflight
foreach row
declare
--local variables here
cap_id char(100
); fir_id
char(100
); flag
integer
;begin
if inserting then
--select :new.captainstaffid into cap_id,:new.firstofficerstaffid into fir_id from dual;
cap_id:=
:new.captainstaffid;
fir_id:
=:new.firstofficerstaffid;
endif;
if updating then
--select :new.captainstaffid into cap_id,:new.firstofficerstaffid into fir_id from dual;
cap_id:=
:new.captainstaffid;
fir_id:
=:new.firstofficerstaffid;
endif;
if deleting then
--select :old.captainstaffid into cap_id,:old.firstofficerstaffid into fir_id from dual;
cap_id:=
:old.captainstaffid;
fir_id:
=:old.firstofficerstaffid;
endif;
end
oracle資料庫入門pl sql基本操作
create table tablename id number not null primary key,name varchar 20 create time date,total consumption number 4,2 insert into tablename values 222,s...
plsql 排序 PLSQL基本查詢與排序
課程 一pl sql 基本查詢與排序 本課重點 寫select 語句進行資料庫查詢 進行數學運算 處理空值 使用別名 aliases 連線列 在sql plus 中編輯緩衝,修改 sql scripts order by 進行排序輸出。使用where 字段。一 寫 sql命令 不區分大小寫。sql語...
PL SQL 的基本結構
基於塊結構 pl sql是塊結構語言。塊由declare,begin,exception,end關鍵字劃分,並且劃分為3個不同的區域 3個區域中,只有執行區域是必須的,其他兩個區域都是可選的 declare declaration statements begin execution stateme...