1. 建立存儲過程:
1.1 在指令視窗建立:
該視窗有兩個面闆。
對話框面闆:執行sql語句
編輯器面闆:編輯sql, 其就是一個文本編輯器
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPR9EeNpHW2ZFShZjSYplb1cVWv5kMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLwETN5ETO0MjMxATMwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
1.2 在存儲過程檔案夾中建立
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”表示存儲過程編譯成功
5. 可能出現的問題
5.1 存儲過程卡在這裡了,沒有出現編譯通過的提示, 這種情況多半是存過程末尾沒有“/”, 在這裡輸入"/” 然後回車即可。
5.2 提示編譯錯誤, 如下圖, 這是因為存儲過程中有文法
可以輸入 show error 檢視具體的出錯原因, 如下圖