plsql經(jīng)典測試題_第1頁
plsql經(jīng)典測試題_第2頁
plsql經(jīng)典測試題_第3頁
plsql經(jīng)典測試題_第4頁
plsql經(jīng)典測試題_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、PL/SQL編程摸底考試日期:2010年10月18日考生姓名:試題一:從2個table中產(chǎn)生報表,generatereportfrom2tables假定有2個tables:checking和savings,止匕2個tables已注入數(shù)據(jù):1 號顧客有 checking accout賬號為10001,同時還有 savings account賬號為CheckingSavingsCus_IDAcct_NoCus_IDAcct_No110001150001210002350002500012 號顧客有 checking accout3 號顧客有 savings account賬號為10002,但是沒有

2、savingsaccount賬號為50002,但是沒有checkingaccount寫SQL語句,產(chǎn)生這樣的報表:UseSQLstatementtogeneratethisreportCus_IDCheckingAccountSavingsAccount11000150001210002350002selecta.CusID,a.AcctNoChecking_Account,b.Acct_NoSavings_Accountfromcheckinga,savingsbwherea.Cus_ID=b.Cus_ID(+)unionselecta.Cus_ID,a.Acct_NoChecking_Ac

3、count,b.Acct_NoSavings_Accountfromcheckinga,savingsbwherea.CusID(+)=b.CusID;用jion更簡單試題二:從1個table中產(chǎn)生報表,generatereportfrom1table情況與上題相似,但是數(shù)據(jù)在1個table里:Datastoredin1tableinsteadof2tablesAccountsCus_IDAcct_NoAcct_Type110001Checking150001Savings210002Checking350002Savings寫SQL語句,產(chǎn)生這樣的報表(與上題相同的報表):selecta.r

4、ow id,max (decode(a.firstname,max (decode(a.firstname,UseSQLstatementtogeneratethisreportCus_IDCheckingAccountSavingsAccount11000150001210002350002selectb.Row_id,max(casewhenb.firstname='Savings'end),max(casewhenb.firstname='Checking'end)fromtest1bbyb.Rowid;'C

5、hecking',,null)CheckingAccount,'Savings',,null)SavingsAccountfromtest1aroupbya.Rowid;(3)報表 report試題三:(1)數(shù)據(jù)同步datasync,(2)觸發(fā)器trigger,有2個表:Account和payment:Acct_No:賬號AccountnumberDate_created:賬戶創(chuàng)建日期DateacountwascreatedAmount:應(yīng)付的金額AmountchargedSerial_No:支付的序歹U號serialnumberforpayme

6、ntPayment:支付金額amountpaidDate_paid:支付日期DatepaidAccountAcct_NoDate_CreatedAmount10002010-1-1490010012010-4-1550010022010-6-20200010032010-8-4300010042010-10-104400PaymentAcct_NoSerial_NoPaymentDate_paid100014502010-1-30100024502010-2-22100213002010-7-20100223002010-8-20100233002010-9-301003110002010-9

7、-9我們需要這樣一份應(yīng)收款分類報表:reportWeneed a categorized account receivableBalanceAcct_NoLast_act_date<=30days>30days10012010-4-1550010022010-9-30110010032010-9-9200010042010-10-104400Last_act_date:最近的活動日期,即最近的支付日期,如無支付,就用賬戶創(chuàng)建日期1000:余額為零,不顯不'在報表中1001:無paymnet,它的賬戶創(chuàng)建日期就是最近的活動日期,已超過30天1002:余額為1400,其最近的p

8、ayment是2010-9-30,在30天內(nèi)1003:余額為2000,其最近的payment是2010-9-9,已超過30天1004:無paymnet,它的賬戶創(chuàng)建日期就是最近的活動日期,在30天內(nèi)。由于這樣的SQL書寫比較復(fù)雜,而且運行的時間也會比較長,有人建議在Account表中增加2個字段:Pay_sum每個賬戶的payment的總和Last_act_date:最近的活動日期,即最近的支付日期,如無支付,就用賬戶創(chuàng)建日期AccountAcct_NoDate_CreatedAmountPay_sumLast_act_date10002010-1-1490010012010-4-155001

9、0022010-6-20200010032010-8-4300010042010-10-104400試題三:(1)數(shù)據(jù)同步datasync(兩種方法都要做)數(shù)據(jù)同步方法data sync. method 1創(chuàng)建Storedprocedure,用Cursor游標來逐行從payment表中拿到數(shù)據(jù),更新Account表中的Pay_sum和Last_act_date。Usecursortoupdatepay_sumandlast_act_daterowbyrow.createorreplaceprocedureAccount_datasync_Pro(一一aSuccoutinteger,aReaso

10、noutvarchar2)is|vSqlvarchar2(2000);vCursysrefcursor;vAcctNovarchar2(20);vPaysuminteger;vLastactdatedate;beginvSql:='selectb.AcctNo,sum(b.Payment)Paysum,max(b.Datepaid)LastactdatefromPaymentbgroupbyb.AcctNo'openvCurforvSqlfetchvCurintovAcctNo,vPaysum,vLastactdate;exitwhenvCur%notfound;vSql:=&

11、#39;updateAccountaseta.Paysum=:Paysum,a.Lastactdate=:Lastactdatewherea.AcctNo=:AcctNo'executeimmediatevSqlusingvPaysum,vLastactdate,vAcctNo;closevCur;exceptionend;數(shù)據(jù)同步方法二:datasycn.Method2不用Cursor,直接用UPDATES句從payment表中拿到數(shù)據(jù),更新Account表中的Pay_sum和Last_act_date。Donotusecursor,useupdatestatement.update

12、Accountaset(a.Pay_sum,a.Last_act_date)=(一一selectc.Paysum,c.Lastactdatefromselectb.Acct_No,sum(b.Payment)Pay_sum,max(b.Date_paid)Last_act_datefromPaymentbgroupbyb.AcctNo)cwherea.Acct_No=c.Acct_No);一一試題三:(2)創(chuàng)建觸發(fā)器createtriiger創(chuàng)建trigger,以后每次payment表更新時,account表中的Pay_sum和Last_act_date將會自動更新。Createatrigge

13、rtoupdatepay_sumandlast_act_dateautomaticallycreateorreplacetriggerAccountdatasynctrigbeforeinsertorupdateonPaymentforeachrowdeclarevUserNamevarchar2(30);beginupdateAccountaset(a.Pay_sum,a.Last_act_date)=a.Pay_sum+:new.Payment,:new.Datepaidwherea.AcctNo=:new.AcctNo;end;試題三:(3)產(chǎn)生報表,應(yīng)收款分類報表:在數(shù)據(jù)同步程序運行完

14、畢后,寫SQL語句來產(chǎn)生應(yīng)收款分類報表報表:UseSQLstatementtogeneratethiscategorizedaccountreceivablereport:BalanceAcct_NoLast_act_date<=30days>30days10012010-4-1550010022010-9-30110010032010-9-9200010042010-10-104400selecta.Acct_No,a.Lastactdate,(casewhensysdate-a.Last_act_date<=30thena.Amount-Pay_sumend)<=30days,(casewhensysdate-a.Lastactdate>30thena.Amount-Paysumend)>30daysfromAccounta;附加題一:比較數(shù)據(jù)同步的方法一和方法二,有什么優(yōu)勢和劣勢?在什么情況下用方法一?在什么情況下用方法二?Comparemethod1andme

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論