數(shù)據(jù)庫oracle銀行管理系統(tǒng)(共51頁)_第1頁
數(shù)據(jù)庫oracle銀行管理系統(tǒng)(共51頁)_第2頁
數(shù)據(jù)庫oracle銀行管理系統(tǒng)(共51頁)_第3頁
數(shù)據(jù)庫oracle銀行管理系統(tǒng)(共51頁)_第4頁
數(shù)據(jù)庫oracle銀行管理系統(tǒng)(共51頁)_第5頁
已閱讀5頁,還剩46頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上目 錄專心-專注-專業(yè)摘 要 隨著計算機的飛速發(fā)展及應(yīng)用領(lǐng)域的擴大,特別是計算機網(wǎng)絡(luò)和電子商務(wù)的發(fā)展,極大的改變了商業(yè)銀行傳統(tǒng)的經(jīng)營模式。能夠為客戶提供方便、快捷、安全的服務(wù),也能夠有效的降低銀行的營運成本,這是銀行存儲系統(tǒng)追求的目標(biāo)。目前,對于現(xiàn)代化銀行運營的要求是客戶可以實現(xiàn)方便安全的業(yè)務(wù)交易,銀行職員可以進行高效合理的工作管理,實現(xiàn)銀行業(yè)務(wù)電子化。方便用戶快速的進行存款、取款、修改密碼以及完成一些轉(zhuǎn)賬的交易,大大提高辦公效率,能夠及時、準(zhǔn)確、有效的幫用戶辦理各種繁瑣的手續(xù),也減緩了銀行工作人員的壓力。1、 設(shè)計銀行管理系統(tǒng)結(jié)構(gòu)圖1.1系統(tǒng)結(jié)構(gòu)圖銀行系統(tǒng)信息查詢財

2、務(wù)管理賬戶管理圖1.1系統(tǒng)結(jié)構(gòu)圖2、 銀行管理系統(tǒng)E-R圖和表結(jié)構(gòu)2.1E-R圖身份證號開戶開戶信息表住址聯(lián)系電話開戶名聯(lián)系電話開戶名身份證號 圖2.1開戶開戶金額是否掛失用戶編號密碼開戶日期貨幣種類余額卡號存款類型銀行信息表 圖2.2卡號交易金額交易日期交易類型交易信息表交易2.2表結(jié)構(gòu) 通過對銀行管理系統(tǒng)的需求分析,應(yīng)該為該系統(tǒng)設(shè)計3個表,分別為用戶信息表、銀行卡信息表和交易信息表。 用戶信息表用于存儲用戶的基本信息,包括用戶的編號、開戶名、身份證號、聯(lián)系電話和家庭住址等信息 表2.1 用戶信息表字段名稱字段描述數(shù)據(jù)類型長度約束customer用戶編號Number4主鍵customer開戶

3、名Varhcar220必填PID身份證號Varchar218必填telephone聯(lián)系電話Varchar213必填A(yù)ddress家庭地址Varchar250無 銀行卡信息表用于存儲銀行卡相關(guān)的信息主要包括卡號、存儲的貨幣類型,存款方式,開戶時間,開戶金額,余額、銀行卡密碼、是否掛失和用戶編號等信息, 表2.2銀行卡信息表字段名稱字段描述數(shù)據(jù)類型長度約束cardID卡號Varchar220主鍵curType貨幣種類Varhcar210必填SavingType存款類型Varchar28非空Opendate開戶日期DATETIME必填openmoney開戶金額Number8必填Balance帳戶余額

4、Number8必填I(lǐng)sreportloss是否掛失Varchar22必填Customer開戶編號Varchar4外鍵 交易信息表用于存儲用戶的交易記錄,主要包括交易日期,卡號、交易類型,交易金額等信息。 表2.3交易信息表字段名稱字段描述數(shù)據(jù)類型長度屬性Transdate交易日期DatetimePKcardID卡號Varhcar220非空transTYPE交易類型VARCHAR24非空transMoney交易金額NUMBER4非空remark備注VARCHAR250非空 三、創(chuàng)建系統(tǒng)數(shù)據(jù)表3.1創(chuàng)建表空間和用戶 使用system用戶連接數(shù)據(jù)庫后,創(chuàng)建表空間space_zqp,指定數(shù)據(jù)文件為D:

5、Bank.dbf,代碼如下圖: 圖3.1表空間和用戶3.2創(chuàng)建用戶信息表并添加約束用戶信息表保存了用戶的基本信息,該表的創(chuàng)建語句如下,CREATE TABLE userInfo(customerID NUMBER(4) NOT NULL,customerName VARCHAR2(20) NOT NULL,PID VARCHAR2(18) NOT NULL,telephone VARCHAR2(13) NOT NULL,address VARCHAR2(50)PARTITION BY HASH(PID)( PARTITION pid1, PARTITION pid2, PARTITION pi

6、d3,);ALTER TABLE userInfoADD CONSTRAINT PK_customerID PRIMARY KEY(customerID)ADD CONSTRAINT UK_PID UNIQUE(PID)ADD CONSTRAINT CK_PID CHECK(LENGTH(PID)=18 OR LENGTH(PID)=15)ADD CONSTRAINT CK_telephone CHECK(telephone LIKE 0-90-90-90-9-0-90-90-90-90-90-90-90-9ORLENGTH(telephone)=13);-創(chuàng)建可以自動生成自增主列的序列 cu

7、stomerid_seqCREATE SEQUENCE customerid_seqSTART WITH 1INCREMENT BY 1NOCACHE 如上述語句所示,在userInfo表中包含用戶編號(customerid)、開戶名(customername)、身份證號(PID)、聯(lián)系電話(telephone)、家庭住址(address)。其中,customerid為主鍵,自增(從1開始);PID只能是18位或15位,并且是唯一的;telephone必須是xxxx-xxxxxxxx的格式或13位的手機號碼。 圖3.2用戶信息表3.3創(chuàng)建銀行卡信息表 銀行卡信息表(cardinfo)中包含了卡

8、號(cardid),貨幣種類(curType),存款類型(savingtype),開戶日期(opendate),開戶金額(openmoney),余額(balance),密碼(pass),是否掛失(isREPORTLOSS)和用戶編號(customerID)的信息。其中,cardID為主鍵,必須為1010 3756 xxxx xxxx的格式;CURTYPE默認(rèn)為RMB,openmoney必須不能低于一元;balance也必須不能低于一元;pass默認(rèn)為;ISREPORTLOSS的值必須是“是/否”中之一,默認(rèn)為否;customerID為外鍵,引用userInfo表中的customerID列。圖3

9、.3 3.4創(chuàng)建交易信息表 交易信息表中包含了五個字段,分別為transdate(交易日期),cardID(卡號)、TRANSTYPE(交易類型),transmoney(交易金額)和remark(備注)。其中,transdate默認(rèn)為系統(tǒng)當(dāng)前日期;cardid位外鍵,引用cardinfo表中的cardid列,可重復(fù);transtype只能是“存入/取出”之一;transmoney必須大于0.圖3.4交易信息表四、模擬常規(guī)業(yè)務(wù)操作4.1建立更新賬號觸發(fā)器結(jié)果如下:圖4.1創(chuàng)建before update觸發(fā)器4.2存取款交易操作 當(dāng)用戶辦理取款或存款業(yè)務(wù)時,不僅需要向交易信息表中添加一條交易記錄,

10、還需要修改當(dāng)前賬戶中的余額,如果辦理取款業(yè)務(wù),如果將當(dāng)前賬戶總的余額減去支取余額,如果辦理托管業(yè)務(wù),多叫當(dāng)前賬戶中的金額加上存款金額。 在交易信息表中包含一個名為transtype的字段,該字段用于表示交易類型,取值范圍必須是存入或者自取,因此可以為transINFO表創(chuàng)建BEFORE INSERTR觸發(fā)器。根據(jù)要辦理里的交易類型,判斷出當(dāng)前的交易類型,如果transtype字段值為“支取”,則表示要辦理取款業(yè)務(wù),檢測當(dāng)前余額是否大于或等于要支取的金額,如果滿足條件,則要修改cardinfo表中的balance字段值,將該字段值減去交易金額(transmoney),如果transtype字段值

11、為“存入”,則表示要辦理存款業(yè)務(wù),修改cardinfo表中的balance字段值,將該值加上交易金額(transmoney)。代碼如下:reate or replace trigger trig_transbefore insert or update on transinfofor each rowdeclare my_balance number;rate_exception exception;begin select balance into my_balance from cardinfo where cardid=:new.cardid; if :new.transtype=支取

12、then if my_balance:new.transmoney-1 then update cardinfo set balance=balance-:new.transmoney where cardId=:new.cardId; end if;elsif :new.transtype=存入 thenupdate cardinfo set balance=balance+:new.transmoney where cardid=:new.cardId; end if; dbms_output.put_line(交易成功!); exception when rate_exception t

13、hen raise_application_error(-20001,交易失敗); end;select * from cardInfo_vw;insert into transInfo (transdate,cardID,transType,transMoney) values(sysdate,1010 3576 8888 6666,存入,1000);commit;4.3用戶開戶 根據(jù)身份證號查詢是否在該行開過戶,為萬無一失,還需要查詢生成的卡號是否已經(jīng)被使用,如果這兩個條件都符合要求(此人從未在該行開過戶,生成的卡號也無人使用),則向userinfo表中插入開戶人的基本信息記錄,并根據(jù)開戶

14、人的身份證號獲取開戶人的編號,從而向cardinfo表中插入開戶人的基本信息記錄,同時還需要將生成的卡號顯示給開戶人。如果收到卡號已經(jīng)被使用,得提醒用戶開戶失??;如果當(dāng)前開戶人已經(jīng)在此行開過戶,則提示用戶此身份證已有賬號。 結(jié)果如下圖:圖4.24.4更改密碼 一個銀行賬號對應(yīng)一個密碼,因此當(dāng)用戶輸入的卡號密碼相對應(yīng)時,可以為該銀行卡設(shè)置新的密碼,代碼: create or replace procedure proc_updateUserPass(temp_cardid varchar2, -卡號oldpass varchar2, -舊密碼newpass varchar2 -新密碼)asi n

15、umber;pass_i VARCHAR2(6);beginselect count(*) into i from cardInfo where cardID=temp_cardid;select pass into pass_i from cardInfo where cardID=temp_cardid;if i=0 thendbms_output.put_line(此卡號不存在!);elsif i0 thenif pass_i=oldpass thenUPDATE cardInfo set pass=newpass where cardid=temp_cardid;dbms_output

16、.put_line(密碼更改成功!);elsedbms_output.put_line(舊密碼不正確!);end if;end if;commit;exceptionwhen others thendbms_output.put_line(密碼更改失?。?;end4.5賬號掛失 當(dāng)用戶的銀行卡丟失后,可以對該卡進行掛失,銀行管理系統(tǒng)需要驗證用戶的真實性,當(dāng)用戶輸入銀行卡號和密碼相對應(yīng),才可以對該卡進行掛失操作,即修改cardinfo表中的IsreportLOSS列為“是”,否則提示“無權(quán)掛失”。結(jié)果如圖: 圖4.34.6余額查詢 用戶可以使用銀行管理系統(tǒng),辦理余額查詢等業(yè)務(wù),系統(tǒng)要求用戶輸入銀

17、行卡賬號和密碼,當(dāng)用戶輸入的賬號和密碼都合法時,系統(tǒng)就查詢該用戶的賬戶余額,否則將提示用戶“賬號或密碼錯誤!”,代碼:CREATE OR REPLACE procedure pro_query_balance(card_id varchar2, -帳戶card_pass varchar2) -密碼asi NUMBER:=0;not_data_found exception;user_balance NUMBER(8);beginselect count(*) into i from cardInfo where cardID=card_id and pass=card_pass;if i=0

18、thenraise not_data_found;elseselect balance into user_balance from cardInfo where cardID=card_id and pass=card_pass;dbms_output.put_line(你帳號的余額為:|user_balance);end if;exceptionwhen not_data_found thendbms_output.put_line(帳號或密碼錯誤!);end;4.7轉(zhuǎn)賬業(yè)務(wù)設(shè)置 自助銀行管理系統(tǒng)辦理轉(zhuǎn)賬業(yè)務(wù)時,要求用戶輸入正確的用于轉(zhuǎn)賬的卡號和密碼,以及獲得轉(zhuǎn)賬的卡號和轉(zhuǎn)賬金額,系統(tǒng)將根

19、據(jù)用戶輸入的卡號和密碼,檢測該銀行卡是否存在,如果存在,則判斷該銀行卡余額是否大于要轉(zhuǎn)賬的余額;如果大于,則向表中插入兩條交易記錄,一條支取的記錄,一條為存入的記錄,并提示用戶轉(zhuǎn)賬成功;如果用戶輸入的卡號和密碼不正確,則提示“你的卡號或密碼有誤!”。4.8銀行盈利結(jié)算 銀行的管理人員可以統(tǒng)計銀行的資金流通余額和盈利結(jié)算,資金流動金額等于總存入-總支數(shù)金額;盈利結(jié)算,等于總支出金額乘以8%-總存入金額乘以3%,代碼如圖:圖4.44.9撤戶操作 當(dāng)用戶不再需要使用某張銀行卡時,可去銀行辦理撤戶操作,撤戶操作需要用戶輸入正確的卡號和密碼,系統(tǒng)將根據(jù)用戶輸入的數(shù)據(jù)對該銀行卡進行驗證,如果該銀行卡存在,

20、都需要將卡上的余額全部取出,并刪除該卡在cardinfo表中的記錄,以及在transinfo表中所有的交易記錄。代碼如下圖圖4.5五、總 結(jié) 通過此次課程設(shè)計,使我更加扎實的掌握了有關(guān)數(shù)據(jù)庫方面的知識,在設(shè)計過程中雖然遇到了一些問題,但經(jīng)過一次又一次的思考,一遍又一遍的檢查終于找出了原因所在,也暴露出了前期我在這方面的知識欠缺和經(jīng)驗不足。實踐出真知,通過親自動手制作,使我們掌握的知識不再是紙上談兵。在課程設(shè)計過程中,我們不斷發(fā)現(xiàn)錯誤,不斷改正,不斷領(lǐng)悟,不斷獲取。最終的檢測調(diào)試環(huán)節(jié),本身就是在踐行“過而能改,善莫大焉”的知行觀。這次課程設(shè)計終于順利完成了,在設(shè)計中遇到了很多問題,最后在老師的指

21、導(dǎo)下,終于游逆而解。在今后社會的發(fā)展和學(xué)習(xí)實踐過程中,一定要不懈努力,不能遇到問題就想到要退縮,一定要不厭其煩的發(fā)現(xiàn)問題所在,然后一一進行解決,只有這樣,才能成功的做成想做的事,才能在今后的道路上劈荊斬棘,而不是知難而退,那樣永遠不可能收獲成功,收獲喜悅,也永遠不可能得到社會及他人對你的認(rèn)可!參考文獻1郝安林,Oracle 11g基礎(chǔ)教程與實驗指導(dǎo),清華大學(xué)出版社 2王珊,數(shù)據(jù)庫系統(tǒng)概論,高等教育出版社3王霓虹,數(shù)據(jù)庫系統(tǒng)原理 ,哈爾濱工業(yè)出版社(十二五規(guī)劃教材)4李建中,數(shù)據(jù)庫系統(tǒng)原理,電子工業(yè)出版社(原理)5Stephens著,數(shù)據(jù)庫設(shè)計,機械工業(yè)出版社6李丙洋.涂抹oracle-三思筆記

22、之一步一步學(xué)oracleM中國水利水電出版社,2010.17KarenMorton.OracleSQL高級編程M.人民郵電出版社,2011.118梁敬彬,梁敬弘.收獲不止oracleM.電子工業(yè)出版社,2013.59蓋國強.循序漸進oracle數(shù)據(jù)庫管理、優(yōu)化與備份恢復(fù)M.人民郵電出版社,2011.810LanAbramson,MicheaelAbbey,MichaelJ.Corey,竇朝輝.oracledatabase11g:初學(xué)者指南M.清華大學(xué)出版社,2010-01附錄程序源代碼:CREATE TABLESPACE space_zqpDATAFILE D:Bank.dbf SIZE 50

23、MAUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED;創(chuàng)建用戶zqp,用戶密碼:zqpCREATE USER zqpIDENTIFIED BY zqpDEFAULT TABLESPACE space_zqp;TEMPORARY TABLESPACE tempQUOTA 20M ON space_xianglin;/用戶已創(chuàng)建GRANT DBA TO XIANGLIN;/授權(quán)成功CONNECT xianglin/accp;/已連接REATE TABLE userInfo(customerID NUMBER(4) NOT NULL,customerName VARCHA

24、R2(20) NOT NULL,PID VARCHAR2(18) NOT NULL,telephone VARCHAR2(13) NOT NULL,address VARCHAR2(50)-根據(jù)身份證ID創(chuàng)建散列分區(qū)PARTITION BY HASH(PID)( PARTITION pid1, PARTITION pid2, PARTITION pid3,);-為userInfo表添加約束條件ALTER TABLE userInfoADD CONSTRAINT PK_customerID PRIMARY KEY(customerID)ADD CONSTRAINT UK_PID UNIQUE(P

25、ID)ADD CONSTRAINT CK_PID CHECK(LENGTH(PID)=18 OR LENGTH(PID)=15)ADD CONSTRAINT CK_telephone CHECK(telephone LIKE 0-90-90-90-9-0-90-90-90-90-90-90-90-9ORLENGTH(telephone)=13);/表已更改-創(chuàng)建可以自動生成自增主列的序列 customerid_seqCREATE SEQUENCE customerid_seqSTART WITH 1INCREMENT BY 1NOCACHE;/序列已創(chuàng)建CREATE TABLE cardIof

26、o(cardID VARCHAR2(20) NOT NULL,curType VARCHAR2(10) NOT NULL,savingType VARCHAR2(8) NOT NULL,openDate DATE NOT NULL,openMoney NUMBER(8) NOT NULL,balance NUMBER(8) NOT NULL,pass VARCHAR2(6) NOT NULL,IsReportLoss VARCHAR2(2) NOT NULL,customerID NUMBER(4) NOT NULL)-根據(jù)開戶日期創(chuàng)建表分區(qū)PARTITION BY RANGE(openDat

27、e)(PARTITION openDate_p1 VALUES LESS THAN(TO_DATE(01/01/2007,dd/mm/yyyy),PARTITION openDate_p2 VALUES LESS THAN(TO_DATE(01/04/2007,dd/mm/yyyy),PARTITION openDate_p3 VALUES LESS THAN(TO_DATE(01/07/2007,dd/mm/yyyy),PARTITION openDate_p4 VALUES LESS THAN(TO_DATE(01/10/2007,dd/mm/yyyy),PARTITION openDat

28、e_p5 VALUES LESS THAN(TO_DATE(01/01/2008,dd/mm/yyyy),PARTITION openDate_p6 VALUES LESS THAN(TO_DATE(01/04/2008,dd/mm/yyyy),PARTITION openDate_p7 VALUES LESS THAN(TO_DATE(01/07/2008,dd/mm/yyyy),PARTITION openDate_p8 VALUES LESS THAN(TO_DATE(01/10/2008,dd/mm/yyyy),PARTITION openDate_p9 VALUES LESS THA

29、N(TO_DATE(01/01/2009,dd/mm/yyyy),PARTITION openDate_p10 VALUES LESS THAN(TO_DATE(01/04/2009,dd/mm/yyyy),PARTITION openDate_p11 VALUES LESS THAN(TO_DATE(01/07/2009,dd/mm/yyyy),PARTITION openDate_p12 VALUES LESS THAN(maxvalue);/表已創(chuàng)建-為cardInfo表添加約束條件ALTER TABLE cardIofoADD CONSTRAINT PK_cardID PRIMARY

30、KEY(cardID)ADD CONSTRAINT CK_cardID CHECK(TRANSLATE(cardID, ,xxxxxxxxxx )=xxxx xxxx xxxx xxxx ANDINSTR(cardID,1010 3576 )=1)ADD CONSTRAINT CK_sav CHECK(savingType IN (活期,定期兩便,定期)ADD CONSTRAINT CK_openMoney CHECK (openMoney=1)ADD CONSTRAINT CK_pass CHECK(LENGTH(pass)=6)ADD CONSTRAINT CK_IsRePortLoss

31、CHECK(IsReportLoss IN (是,否)ADD CONSTRAINT FK_customerID FOREIGN KEY(customerID) REFERENCES userInfo(customerID)MODIFY(curType DEFAULT RMB)MODIFY(openDate DEFAULT sysdate)MODIFY(pass DEFAULT )MODIFY(IsReportLoss DEFAULT 否);/表已更改CREATE TABLE transInfo(transDate DATE NOT NULL,cardID VARCHAR2(20) NOT NU

32、LL,transType VARCHAR2(4) NOT NULL,transMoney NUMBER(4) NOT NULL,remark VARCHAR2(50)-根據(jù)交易時間創(chuàng)建表分區(qū)PARTITION BY RANGE(transDate)(PARTITION transDate_p1 VALUES LESS THAN(to_date(01/01/2007,dd/mm/yyyy),PARTITION transDate_p2 VALUES LESS THAN(to_date(01/04/2007,dd/mm/yyyy),PARTITION transDate_p3 VALUES LES

33、S THAN(to_date(01/07/2007,dd/mm/yyyy),PARTITION transDate_p4 VALUES LESS THAN(to_date(01/10/2007,dd/mm/yyyy),PARTITION transDate_p5 VALUES LESS THAN(to_date(01/01/2008,dd/mm/yyyy),PARTITION transDate_p6 VALUES LESS THAN(to_date(01/04/2008,dd/mm/yyyy),PARTITION transDate_p7 VALUES LESS THAN(to_date(0

34、1/07/2008,dd/mm/yyyy),PARTITION transDate_p8 VALUES LESS THAN(to_date(01/10/2008,dd/mm/yyyy),PARTITION transDate_p9 VALUES LESS THAN(to_date(01/01/2009,dd/mm/yyyy),PARTITION transDate_p10 VALUES LESS THAN(to_date(01/04/2009,dd/mm/yyyy),PARTITION transDate_p11 VALUES LESS THAN(to_date(01/07/2009,dd/m

35、m/yyyy),PARTITION transDate_p12 VALUES LESS THAN(maxvalue);/表已創(chuàng)建-為transInfo表添加表約束ALTER TABLE transInfoADD CONSTRAINT FK_cardID FOREIGN KEY(cardID) REFERENCES cardIofo(cardID)ADD CONSTRAINT CK_transType CHECK(transType IN (存入,支取)ADD CONSTRAINT CK_transMoney CHECK(transMoney0)MODIFY(transDate DEFAULT

36、sysdate);/表已更改-創(chuàng)建 userInfo表視圖CREATE OR REPLACE VIEW userInfo_vwASSELECT customerID as 用戶編號,customerName as 用戶名稱,PID as 身份證號,telephone as 聯(lián)系電話,address as 家庭住址 FROM userInfo;-創(chuàng)建 cardInfo表視圖CREATE OR REPLACE VIEW cardInfo_vw ASSELECT cardID as 銀行卡號,curType as 貨幣類型,savingTYpe as 存款類型,openDate as 開戶日期,op

37、enMoney as 開戶金額,balance as 余額,pass as 密碼,IsReportLoss as 是否掛失,customerID as 用戶編號 FROM cardInfo;-創(chuàng)建 transInfo表視圖CREATE OR REPLACE VIEW transInfo_vw ASselect transDate as 交易日期,cardID as 卡號,transType as 交易類型,transMoney as 交易金額,remark as 備注 FROM transInfo;-創(chuàng)建 查詢掛失的客戶信息視圖CREATE OR REPLACE VIEW userInfo_I

38、sReportLoss_vw ASselect u.customerID as 用戶編號,u.customerName as 開戶名,u.pid as 身份證號,u.telephone as 聯(lián)系電話,u.address as 家庭地址 FROM userInfo u INNER JOIN cardInfo c ON u.customerID=c.customerID WHERE IsReportLoss=是;-創(chuàng)建 查詢本周開戶的卡號 顯示相關(guān)信息視圖CREATE OR REPLACE VIEW query_week_information_vw ASSELECT cardID as 卡號,

39、curType as 貨幣類型,savingType as 存款類型,openDate as 開戶日期,openMoney as 開戶金額,balance as 余額,pass as 密碼,IsReportLoss as 是否掛失,customerID as 用戶編號FROM cardInfo WHERE openDate BETWEEN TRUNC(sysdate,day) AND sysdate;-創(chuàng)建 查詢本月交易金額最高的卡號 的視圖CREATE OR REPLACE VIEW top_balance_vw ASSELECT DISTINCT cardID as 交易最高的卡號,tra

40、nsMoney as 交易金額 FROM transInfo WHERE transMoney=(SELECT Max(transMoney) FROM transInfo);- 查看視圖 -select * from userInfo_vw; -userInfo表視圖select * from cardInfo_vw; -cardInfo表視圖select * from transInfo_vw; -transInfo表視圖select * from userInfo_IsReportLoss_vw; -查詢掛失的客戶信息視圖select * from query_week_informat

41、ion_vw; -查詢本周開戶的卡號select * from top_balance_vw; -查詢本月交易金額最高的卡號/*select u.customerName as 客戶名字,c.balance as 余額,t.transMoney as 交易金額 from userInfo u ,cardInfo c ,transInfo t where u.customerName=張三and u.customerid=c.customerid and c.cardid=t.cardid;select u.customerName as 客戶名稱,c.balance as 余額 from us

42、erInfo u INNER JOIN cardInfo c on u.customername=張三and u.customerid=c.customerid;*/-不允許更新cardInfo表的cardID列-不能更新卡號的觸發(fā)器create or replace trigger trg_cardInfo_cardID_notUpdatebefore update of cardIDon cardInfofor each rowbeginraise_application_error(-20001,此列不允許修改!);end;-創(chuàng)建觸發(fā)器實現(xiàn)交易操作create or replace tr

43、igger trig_transbefore insert or update on transinfofor each rowdeclare my_balance number;rate_exception exception;begin select balance into my_balance from cardinfo where cardid=:new.cardid; if :new.transtype=支取 then if my_balance:new.transmoney-1 then update cardinfo set balance=balance-:new.trans

44、money where cardId=:new.cardId; end if;elsif :new.transtype=存入 thenupdate cardinfo set balance=balance+:new.transmoney where cardid=:new.cardId; end if; dbms_output.put_line(交易成功!); exception when rate_exception then raise_application_error(-20001,交易失敗); end;select * from cardInfo_vw;-插入交易數(shù)據(jù) 自動觸發(fā)一系列

45、操作insert into transInfo (transdate,cardID,transType,transMoney) values(sysdate,1010 3576 8888 6666,存入,1000);commit;select * from cardInfo_vw;select * from transInfo_vw;create or replace TRIGGER trg_cardIofo_card_notUpdateBEFORE UPDATE OF cardIDON cardIofoFOR EACH ROW BEGINRAISE_APPLICATION_ERROR(-20

46、001,賬號不允許修改);END;CREATE OR REPLACE FUNCTION random_cardIdRETURN VARCHAR2AScard_id VARCHAR2(20):=1010 3576;tem CHAR(5);re_card_id_count NUMBER:=0;BEGINLOOPtem:=to_char(dbms_random.value(1000,9999),0000);card_id:=card_id|tem;tem:=to_char(dbms_random.value(1000,9999),0000);card_id:=card_id|tem;SELECT C

47、OUNT(*) INTO re_card_id_count FROM cardInfo WHERE cardID=card_id;EXIT WHEN re_card_id_count=0;END LOOP;RETURN card_id;END;開戶過程:CREATE OR REPLACE procedure proc_openUser( uname varchar2, -開戶的姓名 p_id varchar2, -身份證 tel varchar2, -電話號碼 address varchar2, -地址 savingtype varchar2, -存款類型 curType varchar2,

48、-貨幣類型 openMoney number, -開戶金額 pass varchar2 -開戶密碼)ascid varchar2(20); -卡號customer_id number; -顧客IDi NUMBER;c NUMBER;Begin-調(diào)用函數(shù)生成卡號cid:=random_cardId;-查詢此人是否在此行開過戶select count(*) into i from userinfo where PID=p_id;-查詢卡號是否應(yīng)該有了select count(*) into c from cardinfo where cardID=cid;if i=0 thenif c=0 the

49、nInsert intouser Info values(customerid_seq.nextval,uname,p_id,tel,address);-根據(jù)身份證號獲取顧客編號select customerId into customer_id from userInfo where PID=p_id;insert into cardInfo(cardId,curType,Savingtype,Openmoney,balance,pass,customerId) values(cid,curType,savingType,openMoney,openMoney,pass,customer_i

50、d);DBMS_OUTPUT.PUT_LINE(您已成功開戶!);DBMS_OUTPUT.PUT_LINE(您的卡號為:|cid);elsif c0 thendbms_output.put_line(開戶失敗!);end if; elsif i0 thendbms_output.put_line(此身份證已開有帳號!);END IF;EXCEPTIONwhen others thendbms_output.put_line(開戶失敗!);end;create or replace procedure proc_updateUserPass(temp_cardid varchar2, -卡號ol

51、dpass varchar2, -舊密碼newpass varchar2 -新密碼 ) as i number;pass_i VARCHAR2(6);begin select count(*) into i from cardInfo where cardID=temp_cardid; select pass into pass_i from cardInfo where cardID=temp_cardid; if i=0 thendbms_output.put_line(此卡號不存在!);elsif i0 thenif pass_i=oldpass thenUPDATE cardInfo set pass=newpass where cardid=temp_cardid;dbms_output.put_line(密碼更改成功!);else dbms_output.put_line(舊密碼不

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論