1. 程式人生 > >Oracle儲存過程語法及編譯過程講解

Oracle儲存過程語法及編譯過程講解

語法

?
1 2 3 4 5 6 7 8 9 10 CREATE
[ORReplace] PROCEDURE [ schema .] procedure_name   [(argument [{ IN | OUT |INOUT}] datatype,   ...   argument [{ IN | OUT |INOUT}] datatype)]
  { IS | AS }   [descriptionpart說明部分]    BEGIN   SQLSTATEMENT語句序列   [EXCEPTION例外處理]    END [procedureName過程名];

語法分析

OR REPLACE

是一個可選的關鍵字,建議使用者使用此關鍵字。如果過程已經存在,該關鍵字將重新建立過程,這樣就不必刪除和重新建立過程。

關鍵字IS和AS均可

它們本身沒有區別。IS後面是一個完整的PL/SQL塊,可以定義區域性變數,但不能以DECLARE開始。區域性變數在過程內部存放值。

形式引數可以有三種模式:IN、OUT、INOUT。如果沒有為形式引數指定模式,那麼預設的模式是IN。

IN表示輸入引數

OUT表示輸出引數

HelloWorld!

建立第一個儲存過程HelloWorld

?
1 2 3 4 5 SQL> create or replace procedure helloworld as begin dbms_output.put_line( 'helloworld' ); end ;
?
1 /

注:需要在儲存過程輸入完成後回車,下一行輸入”/”回車,才會建立成功。

當提示Procedure created表示儲存過程建立成功。

呼叫HelloWorld!

執行

?
1 2 SQL> set serveroutput on ; SQL> exec [ute] helloworld;

顯示如下結果

?
1 2 helloworld PL/SQL procedure successfully completed

編譯過程

注意:

儲存過程不論建立是否成功,建立過程/函式命令CREATE PROCEDURE或CREATE FUNCTION都將自動把其原始碼存入資料庫中,而編譯程式碼只有在編譯成功後才能存入資料庫中。

只有編譯程式碼被存入到資料庫的儲存過程和函式才能被呼叫。

也就是說,如果你建立儲存過程的語句是錯誤的,那麼儲存過程的原始碼也會放入資料庫,只是被顯示為錯誤。

檢視錯誤請用USER_ERRORS資料字典或用SHOW ERRORS命令,可以查詢到當前系統中錯誤。