oracle存儲過程的基本語法


1.基本結構 
CREATE OR REPLACE PROCEDURE 存儲過程名字
(
    參數1 IN NUMBER,
    參數2 IN NUMBER
) IS
變量1 INTEGER :=0;
變量2 DATE;
BEGIN

END 存儲過程名字

2.SELECT INTO STATEMENT
  將select查詢的結果存入到變量中,可以同時將多個列存儲多個變量中,必須有一條
  記錄,否則拋出異常(如果沒有記錄拋出NO_DATA_FOUND)
  例子: 
  BEGIN
  SELECT col1,col2 into 變量1,變量2 FROM typestruct where xxx;
  EXCEPTION
  WHEN NO_DATA_FOUND THEN
      xxxx;
  END;
  ...

3.IF 判斷
  IF V_TEST=1 THEN
    BEGIN 
       do something
    END;
  END IF;

4.while 循環
  WHILE V_TEST=1 LOOP
  BEGIN
 XXXX
  END;
  END LOOP;

5.變量賦值
  V_TEST := 123;

6.用for in 使用cursor

  ...
  IS
  CURSOR cur IS SELECT * FROM xxx;
  BEGIN
 FOR cur_result in cur LOOP
  BEGIN
   V_SUM :=cur_result.列名1+cur_result.列名2
  END;
 END LOOP;
  END;

7.帶參數的cursor
  CURSOR C_USER(C_ID NUMBER) IS SELECT NAME FROM USER WHERE TYPEID=C_ID;
  OPEN C_USER(變量值);
  LOOP
 FETCH C_USER INTO V_NAME;
 EXIT FETCH C_USER%NOTFOUND;
    do something
  END LOOP;
  CLOSE C_USER;

 

8.異常中的錯誤代碼和錯誤消息

      Oracle內置函數SQLCODE和SQLERRM是特別用在OTHERS處理器中,分別用來返回Oracle的錯誤代碼和錯誤消息。
   OTHERS處理器應該是異常處理塊中的最后的異常處理器,因為它是用來捕獲除了別的異常處理器處理以外的所有的Oracle異常,所以在程序的最外層使用一個OTHERS處理器的話,將可以確保所有的錯誤都會被檢測到。
    在一個內在的異常中,SQLCODE返回Oracle錯誤的序號,而SQLERRM返回的是相應的錯誤消息,錯誤消息首先顯示的是錯誤代碼。SQLCODE返回的是負數,除非Oracle的錯誤為“ORA-01403:NO DATA FOUND”(譯:ORA-01403:未找到數據),當Oracle錯誤為“ORA-01403:NO DATA FOUND”時,其對應的SQLCODE為+100。對於用戶自定義的異常,SQLCODE返回的是+1,而SQLERRM返回的是User-Defined Exception。
    一個Oracle的錯誤消息最多只能包含512個字節的錯誤代碼。如果沒有異常被觸發,則SQLCODE返回0,SQLERRM返回“ORA-0000:normal, successful completion”。

...

EXCEPTION
    WHEN OTHERS THEN
      ROLLBACK;
      c_sqlcode := SQLCODE;
      c_sqlerrm := SUBSTRB(SQLERRM, 1, 512);
      o_sts        := ‘-1’;
      c_error      := c_process_sts_error;
  END PROC_SEND_RECEIVE_ERR_INS;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM