/*
*實驗三 儲存過程與觸發器
*附言:把**寫成一首詩。
*/1、建立儲存過程完成圖書管理系統中的借書功能,並呼叫該儲存過程實現借書功能。
功能要求:
借書時要求輸入借閱流水號,借書證號,圖書編號。(即該儲存過程有3個輸入引數)
借書時,借書日期為系統時間。
圖書的是否借出改為「是」。
呼叫儲存過程實現借書證號「20051001」借出圖書編號為「1005050」的圖書。
create
orreplace
procedure pr_借書
(v_借閱流水號 in 借閱.借閱流水號%
type
,v_借書證號 in 借閱.借書證號%
type
,v_圖書編號 in 借閱.圖書編號%
type)as
begin
insert
into 借閱 values
(v_借閱流水號,v_借書證號,v_圖書編號,sysdate,
null
,null
,null);
update 圖書 set 圖書.是否借出=
'是'where 圖書.圖書編號=v_圖書編號;
end;
call pr_借書(7,
20051001
,1005050);
--呼叫完成。
exec pr_借書(8,
20051001
,1005050);
--pl/sql 過程已成功完成。
2、建立儲存過程完成圖書管理系統中的預約功能。
預約時要求輸入預約流水號,借書證號,isbn。(即該儲存過程有3個輸入引數)
儲存過程先檢查輸入的isbn版本的圖書是否都已借出,如果是則進行預約,否則提示「該書目有可借圖書,請查詢」。
預約時間為系統時間。
呼叫儲存過程實現借書證號「20081237」預約isbn為「9787508040110」的圖書。
create
orreplace
procedure pr_預約
(v_預約流水號 in 預約.預約流水號%
type
,v_借書證號 in 預約.借書證號%
type
,v_isbn in 預約.isbn%
type)as
v_數量 number;
begin
select
count(*
)into v_數量 from 圖書 where 圖書.isbn=v_isbn and 圖書.是否借出=
'否';
if v_數量=
0then
insert
into 預約 values
(v_預約流水號,v_借書證號,v_isbn,sysdate)
;commit
;else
dbms_output.put_line(
'該書目有可借圖書,請查詢!');
endif
;end
;call pr_預約(2,
20081237
,9787508040110);
3、建立儲存過程完成圖書管理系統中的還書功能。
還書時要求輸入借書證號,圖書編號,罰款分類號(即該儲存過程有3個輸入引數)。
還書日期為系統時間。
圖書的是否借出改為『否』。
呼叫儲存過程實現借書證號「20051001」歸還圖書編號為「1005050」的圖書。
create
orreplace
procedure pr_還書
(v_借書證號 借閱.借書證號%
type
,v_圖書編號 借閱.圖書編號%
type
,v_罰款分類號 借閱.罰款分類號%
type)as
begin
update 借閱 set 借閱.歸還日期=sysdate,借閱.罰款分類號=v_罰款分類號 where 借閱.借書證號=v_借書證號 and 借閱.圖書編號=v_圖書編號;
update 圖書 set 圖書.是否借出=
'否'where 圖書.圖書編號=v_圖書編號;
end;
call pr_還書(
20051001
,1005050
,null);
4、通過序列和觸發器實現借閱表中借閱流水號欄位的自動遞增。
create sequence seq_序列
minvalue 1
maxvalue 1.0e28
start
with
1increment by
1cache 20
;create
orreplace
trigger tr_借閱流水號自增 before insert
on 借閱 for each row
begin
select seq_序列.nextval into :new.借閱流水號 from dual;
end;
5、修改借書功能的儲存過程。
該儲存過程要求:
(1)借書時輸入借書證號,圖書編號。(即該函式有2個輸入引數)
(2)借書時,借書日期為系統時間。
*該儲存過程主體部分只有insert
into語句。
create
orreplace
procedure pr_借書
(v_借書證號 in 借閱.借書證號%
type
,v_圖書編號 in 借閱.圖書編號%
type)as
v_是否借出 圖書.是否借出%
type
;begin
select 圖書.是否借出 into v_是否借出 from 圖書 where 圖書.圖書編號=v_圖書編號;
if v_是否借出=
'否'then
insert
into 借閱(借書證號,圖書編號,借書日期)
values
(v_借書證號,v_圖書編號,sysdate)
;update 圖書 set 圖書.是否借出=
'是'where 圖書.圖書編號=v_圖書編號;
commit
;else
dbms_output.put_line(
'該書已經被借走了!');
endif
;end
;6、建立與借書儲存過程相對應的觸發器,當借閱表中加入借閱資訊時,該觸發器觸發,自動修改所借圖書的是否借出改為『是』。
create
orreplace
trigger tr_借書 after
insert
on 借閱 for each row
begin
update 圖書 set 圖書.是否借出=
'是'where 圖書.圖書編號=:new.圖書編號;
end;
西南科技大學OJ題 迴圈佇列0965
迴圈佇列 根據給定的空間構造順序迴圈佇列,規定隊滿處理方法為少用乙個元素空間。例如,給定5個元素空間構造迴圈佇列,則只能存放4個元素。試根據入隊及出隊操作判斷佇列最後的元素存放情況,並輸出最後佇列中的元素值,即完成給定入隊及出列操作後一次性全部出隊的元素值。要求採用順序佇列完成,少用乙個儲存空間的方...
河南科技大學《Python課程設計》實驗三
python課程設計 熟悉程式設計結構的三種方式。掌握if單分支語句 if二分支語句 if多分支語句及if語句巢狀的使用方法。掌握 while語句的使用方法。掌握for語句的使用方法。理解帶 else 子句的迴圈結構執行流程。掌握迴圈巢狀的使用方法。理解迴圈語句中的 break 語句和continu...
西南科技大學OJ題 逆置單鏈表0957
逆置單鏈表 建立長度為n的單鏈表,然後將其資料元素逆置,即第1個元素變為最後乙個元素,第2個元素變為倒數第2個元素,以此類推,最後乙個元素變為第1個元素。處理的資料型別為字元型。必須使用鍊錶完成。輸入第一行為鍊錶長度n 第二行為鍊錶中的n個資料元素的值。輸出 逆置後的原始的值。樣例輸入 10 abc...