ORACLE預存程序【轉載】
http://blog.bossma.cn/archives/2008/01/80
1、插入資料:
向一張表裡插入若干條資料
- /*
- 建立表tb1
- 包含兩個欄位col1、col2
- */
- create table tb1(
- col1 char(20),
- col2 char(20));
-
- /*插入資料的預存程序*/
- CREATE OR REPLACE PROCEDURE INSERTAMOUNTTEST
- (
- ST_NUM IN NUMBER,/*起始數值*/
- ED_NUM IN NUMBER/*結束數值*/
- )
- IS
- BEGIN
- declare
- i number;
- begin
- /*迴圈插入*/
- FOR i IN ST_NUM..ED_NUM LOOP
- INSERT INTO tb1 values(i,'test');
- END LOOP;
- end;
- commit;
- /*異常處理*/
- EXCEPTION
- WHEN OTHERS THEN
- rollback;
- END;
-
- /*在CommondLine下執行*/
- exec INSERTAMOUNTTEST(1,2000);
2、更新資料
- CREATE OR REPLACE PROCEDURE UPDATEAMOUNTTEST
- (
- WHERE_NUM IN VARCHAR2/*SQL語句條件值*/
- )
- IS
- BEGIN
- UPDATE tb1 SET col2='test2' where col1 like WHERE_NUM||'%';
- /*異常處理*/
- EXCEPTION
- WHEN OTHERS THEN
- rollback;
- END;
-
- /*在CommondLine下執行*/
- exec UPDATEAMOUNTTEST('11');
3、預存程序之間的調用
以一個查詢更新為例子
- /*
- 查詢更新預存程序,調用更新預存程序UPDATEAMOUNTTEST2
- */
- CREATE OR REPLACE PROCEDURE SELECTUPDATETEST
- (
- tJStr IN CHAR
- )
- is
- upStr CHAR(20);
- begin
- /*
- 查詢出要更新的欄位值
- */
- select a.col2 into upStr from tb1 a where a.col1 = tJStr;
- /*
- 調用更新預存程序
- 傳入用於更新的兩個參數
- */
- UPDATEAMOUNTTEST2('11',upStr);
- end SELECTUPDATETEST;
-
- /*
- 更新用的預存程序,被SELECTUPDATETEST調用
- */
- CREATE OR REPLACE PROCEDURE UPDATEAMOUNTTEST2
- (
- WHERE_NUM IN VARCHAR2,/*更新條件*/
- SET_NAME IN VARCHAR2/*更新後的欄位值*/
- )
- IS
- BEGIN
- UPDATE tb1 SET col2=SET_NAME where col1 like WHERE_NUM||'%';
- EXCEPTION
- WHEN OTHERS THEN
- rollback;
- END;
在測試的過程中遇到查詢不到值的問題,經確認是字串類型的問題,所以一定要考察欄位的字串類型與傳入的參數類型是否一致。
關於這個問題,下邊這篇文章給與了詳細說明:
[關於資料類型的比較規則(Datatype Comparison Rules)]http://sonic.itpub.net/post/17575/93972
另外ORACLE的關鍵字可在v$reserved_words視圖中查看
select * from v$reserved_words order by keyword