資源描述:
《oracle存儲過程語法》由會員上傳分享,免費在線閱讀,更多相關內容在教育資源-天天文庫。
1、存儲過程 1CREATEORREPLACEPROCEDURE存儲過程名 2IS 3BEGIN 4NULL; 5END; 行1: CREATEORREPLACEPROCEDURE是一個SQL語句通知Oracle數(shù)據(jù)庫去創(chuàng)建一個叫做skeleton存儲過程,如果存在就覆蓋它;行2: IS關鍵詞表明后面將跟隨一個PL/SQL體。行3: BEGIN關鍵詞表明PL/SQL體的開始。行4: NULLPL/SQL語句表明什么事都不做,這句不能刪去,因為PL/SQL體中至少需要有一句;行5: END關鍵詞表明
2、PL/SQL體的結束存儲過程創(chuàng)建語法:?createorreplaceprocedure存儲過程名(param1intype,param2outtype)as變量1類型(值范圍);--vs_msg???VARCHAR2(4000);變量2類型(值范圍);BeginSelectcount(*)into變量1from表Awhere列名=param1;???If(判斷條件)then??????Select列名into變量2from表Awhere列名=param1;??????Dbms_output。Put_line(‘打
3、印信息’);???Elsif(判斷條件)then??????Dbms_output。Put_line(‘打印信息’);???Else??????Raise異常名(NO_DATA_FOUND);???Endif;Exception???Whenothersthen??????Rollback;End;注意事項:1,存儲過程參數(shù)不帶取值范圍,in表示傳入,out表示輸出類型可以使用任意Oracle中的合法類型。2,?變量帶取值范圍,后面接分號3,?在判斷語句前最好先用count(*)函數(shù)判斷是否存在該條操作記錄4,?用
4、select。。。into。。。給變量賦值5,?在代碼中拋異常用raise+異常名CREATEORREPLACEPROCEDURE存儲過程名(--定義參數(shù)?is_ym?INCHAR(6),the_countOUTNUMBER,)AS--定義變量vs_msg???VARCHAR2(4000);???--錯誤信息變量vs_ym_beg??CHAR(6);??????--起始月份vs_ym_end??CHAR(6);??????--終止月份vs_ym_sn_beg?CHAR(6);?????--同期起始月份vs_ym_s
5、n_end?CHAR(6);?????--同期終止月份--定義游標(簡單的說就是一個可以遍歷的結果集)CURSORcur_1IS?SELECT。。。?FROM。。。???WHERE。。。??GROUPBY。。。;BEGIN--用輸入?yún)?shù)給變量賦初值,用到了Oralce的SUBSTRTO_CHARADD_MONTHSTO_DATE等很常用的函數(shù)。vs_ym_beg:=SUBSTR(is_ym,1,6);vs_ym_end:=SUBSTR(is_ym,7,6);vs_ym_sn_beg:=TO_CHAR(ADD_MON
6、THS(TO_DATE(vs_ym_beg,'yyyymm'),-12),'yyyymm');vs_ym_sn_end:=TO_CHAR(ADD_MONTHS(TO_DATE(vs_ym_end,'yyyymm'),-12),'yyyymm');--先刪除表中特定條件的數(shù)據(jù)。DELETEFROM表名WHEREym=is_ym;?--然后用內置的DBMS_OUTPUT對象的put_line方法打印出影響的記錄行數(shù),其中用到一個系統(tǒng)變量SQL%rowcountDBMS_OUTPUT.put_line('del上月記錄=
7、'
8、
9、SQL%rowcount
10、
11、'條');INSERTINTO表名(area_code,ym,CMCODE,rmb_amt,usd_amt)SELECTarea_code,is_ym,CMCODE,SUM(rmb_amt)/10000,SUM(usd_amt)/10000FROMBGD_AREA_CM_M_BASE_T?WHEREym>=vs_ym_beg?ANDym<=vs_ym_endGROUPBYarea_code,CMCODE;DBMS_OUTPUT.put_line('ins當月記錄='
12、
13、SQL%ro
14、wcount
15、
16、'條');--遍歷游標處理后更新到表。遍歷游標有幾種方法,用for語句是其中比較直觀的一種。FORrecINcur_1LOOP?UPDATE表名?SETrmb_amt_sn=rec.rmb_amt_sn,usd_amt_sn=rec.usd_amt_sn??WHEREarea_code=rec.area_code??ANDCMCODE=rec