天天看點

oracle 存儲過程-第一個存儲過程

1. 建立存儲過程:

1.1 在指令視窗建立: 

該視窗有兩個面闆。

對話框面闆:執行sql語句

編輯器面闆:編輯sql, 其就是一個文本編輯器

oracle 存儲過程-第一個存儲過程

1.2 在存儲過程檔案夾中建立

oracle 存儲過程-第一個存儲過程

2. 存儲過程文法

CREATE [OR REPLACE] PROCEDURE pro_name [(i_NAME IN VARCHAR2, o_age OUT NUMBER)] AS 
    ...
BEGIN

    ...
exception
when others then
    ...
END [pro_name];

create:建立存儲過程的動作指令
or replace: 如果存儲過程名稱已存在,則替換
procedure: 存儲過程關鍵字
pro_name:存儲過程名稱,自定義,一般以“pro_”開頭
(i_NAME IN VARCHAR2, o_age OUT NUMBER): 參數,分入參, 出參。 如果沒有參數則括号也不能有

as和begin:as和begin之間用來聲明變量
begin和end: begin和end之間是存儲過程邏輯處理區域
exception和end:exception和end之間是異常處理邏輯, 可省略
end後面的pro_name: 存儲過程名稱, 可省略
           

3.存儲過程案例:

/*
注意事項:
  1. 沒有參數時,聲明部分不能有括号
  2. 聲明變量時可以顯示指定變量模式:in表示為入參, out表示為出參, 不寫則既可以是入參,也可以是出參。 最好明确具體模式
  3. 參數需要指定參數類型, 但不能指定參數精度,如:varchar2(400)
  4. 字元串的拼接使用雙豎線"||", 不能用“+”, “+”隻用在數字操作
  5. 變量指派使用":=", 如: age := 34;
  6. 除了表字段别名可以使用雙引号,其他的都用單引号。 表别名的雙引号是可以省略的,是以盡量不在存儲過程中使用雙引号
  7. 單引号既有引号的作用, 又有轉義下一個單引号的作用。  簡單了解:連續的兩個引号(除了最外層的一個引号)表示輸出一個單引号
  8. 存儲過程最後的”/" 在指令視窗中編譯存儲過程時,需要用"/"辨別該存儲過程已經結束。 非指令視窗時,可以不寫

*/
CREATE OR REPLACE PROCEDURE pro_demo_create (i_NAME IN VARCHAR2, o_age OUT NUMBER) AS 
   /* as 和begin之間是聲明變量的區域 */
   v_NAME VARCHAR2(40) := 'changez';-- 聲明變量并指派
   v_age NUMBER DEFAULT 20; --聲明變量并指派

BEGIN
   IF i_NAME IS NOT NULL THEN
      v_NAME := i_name;
   END IF;
   -- dbms_output.put_line() 輸出内容到控制台
   dbms_output.put_line('第一個存儲過程');
   
   -- 字元串的拼接用 "||"
   dbms_output.put_line('v_NAME=' || v_NAME || ',v_age=' || v_age);
EXCEPTION --異常部分
WHEN OTHERS THEN --OTHERS 異常類型,可以捕獲所有的異常
   -- Sqlcode: 異常碼
   -- SQLERRM: 異常資訊
   dbms_output.put_line(Sqlcode||', '||SQLERRM);   
END pro_demo_create;
/
           

4. 存儲過程編譯

在指令視窗的“編輯器”面闆全選,然後按F8, 或者将要編譯的完成代碼複制到“對話框”面闆,即可完成編譯,當對話框裡面出現“Procedure created”表示存儲過程編譯成功

oracle 存儲過程-第一個存儲過程

5. 可能出現的問題

5.1 存儲過程卡在這裡了,沒有出現編譯通過的提示, 這種情況多半是存過程末尾沒有“/”, 在這裡輸入"/” 然後回車即可。

oracle 存儲過程-第一個存儲過程

5.2 提示編譯錯誤, 如下圖, 這是因為存儲過程中有文法

oracle 存儲過程-第一個存儲過程

可以輸入 show error 檢視具體的出錯原因, 如下圖

oracle 存儲過程-第一個存儲過程