1. 建表腳本
CREATE TABLE A (
USERID NUMBER(38),
PWD VARCHAR2(30)
) TABLESPACE USERS
PCTFREE 10 INITRANS 1 MAXTRANS 255
STORAGE (INITIAL 64K MINEXTENTS 1 MAXEXTENTS UNLIMITED);
2. 創建存儲過程(PL/SQL Developer 操作)
- 菜單 File → New → Test Window(或 Program Window)。
- 編寫代碼,按 F8 或工具欄「Compile」編譯。
2.1 查詢過程(返回 REF CURSOR)
CREATE OR REPLACE PROCEDURE up_sel (cur_test OUT SYS_REFCURSOR) IS
BEGIN
OPEN cur_test FOR SELECT * FROM a;
END up_sel;
/
2.2 刪除過程
CREATE OR REPLACE PROCEDURE up_del (userid IN VARCHAR2) IS
BEGIN
DELETE FROM a WHERE USERID = userid;
END up_del;
/
2.3 新增過程
CREATE OR REPLACE PROCEDURE up_add (
userid IN VARCHAR2,
pwd IN VARCHAR2
) IS
BEGIN
INSERT INTO a (USERID, PWD) VALUES (userid, pwd);
COMMIT;
END up_add;
/
3. 在 PL/SQL Developer 中測試調用
方法一:Test Window 手動調用
BEGIN
up_sel(cur_test => :cur_test);
END;
- 變量面板:Name 填
cur_test,Type 選 Cursor,點擊 Value 欄「...」按鈕查看結果集。
方法二:右鍵存儲過程 → Test
- 對象瀏覽器找到
UP_SEL,右鍵 Test,彈出參數輸入框,輸入後直接查看結果網格。
方法三:匿名塊調用 DML 過程
DECLARE
BEGIN
up_add('11', '222');
END;
4. 刪除存儲過程
DROP PROCEDURE up_sel;
5. 進階提示
- SYS_REFCURSOR:9i+ 內置弱類型游標,無需自定義 TYPE,跨版本兼容。
- COMMIT 策略:DML 過程建議由調用方控制事務(移除內部 COMMIT),實現業務邏輯原子性。
- 異常處理:生產代碼必須添加
EXCEPTION WHEN OTHERS THEN ... RAISE; 記錄日志並拋出。
- 調試技巧:PL/SQL Developer 設置斷點(行號左側雙擊),以 Debug 模式運行 Test Window,支持單步、變量監視、調用堆疊。