西南科技大學資料庫實驗三(Oracle 11g)

2021-10-01 05:35:13 字數 3507 閱讀 3983

/*

*實驗三 儲存過程與觸發器

*聯絡:[email protected]

*附言:把**寫成一首詩。

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