| 工具 | 用途 | 備註 |
|---|---|---|
| 文本編輯器 | 編寫 .sql 腳本 | Notepad++、VS Code、Sublime Text,支援語法高亮 |
| SQL*Plus | 命令行執行腳本、交互調試 | Oracle Client 自帶,輕量、標準 |
| Oracle 10g XE / 11g XE / 21c Free | 免費開發數據庫 | 本地安裝或 Docker 運行 |
創建 skeleton.sql:
CREATE OR REPLACE PROCEDURE skeleton IS
BEGIN
NULL; -- PL/SQL 塊至少需一條語句,NULL 為無操作佔位
END skeleton;
/
逐行解析:
CREATE OR REPLACE PROCEDURE skeleton:創建或替換名為 skeleton 的過程,OR REPLACE 避免「已存在」報錯。IS:聲明區開始(等同 AS)。BEGIN:可執行區開始。NULL;:空語句,滿足語法要求。END skeleton;:結束標記,可選重複名稱增強可讀性。/:SQL*Plus 專用執行終結符,單獨一行。sqlplus scott/tiger@orcl 或 sqlplus / as sysdba。SQL> @skeleton.sqlSQL> /Procedure created.SQL> EXECUTE skeleton;
PL/SQL procedure successfully completed.
SQL> BEGIN
2 skeleton;
3 END;
4 /
PL/SQL procedure successfully completed.
skeleton.sql,替換 NULL;:CREATE OR REPLACE PROCEDURE skeleton IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Hello World!');
END skeleton;
/
@skeleton.sql + /),提示 Procedure created.。SQL> SET SERVEROUTPUT ON(否則不顯示)。EXECUTE skeleton; → 輸出 Hello World!。實際商業過程包含多表連接、遊標循環、條件分支、動態 SQL,編譯錯誤常見類型:
| 錯誤類型 | 典型原因 | 定位方法 |
|---|---|---|
| PLS-00103: Encountered symbol ... | 語法錯誤(少分號、關鍵字拼寫、括號不匹配) | SHOW ERRORS 或 SELECT * FROM user_errors WHERE name='SKELETON'; |
| PL/SQL: ORA-00942: table or view does not exist | 引用對象不存在或權限不足 | 確認對象名、授權 GRANT SELECT ON tab TO user; |
| PLS-00302: component 'X' must be declared | 變量/遊標/類型未聲明 | 檢查 DECLARE 區、包規格 |
| PL/SQL: numeric or value error | 運行時數據類型轉換、溢出 | 添加 EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLERRM); 打印錯誤碼 |
調試循環:修改 .sql → @script → / → 查錯誤 → 修正 → 重複,直到 Procedure created.。
SQL> DROP PROCEDURE skeleton;
Procedure dropped.
CREATE、ALTER、RENAME、TRUNCATE。@script 在 SQL*Plus/SQL Developer 執行。EXECUTE 或匿名塊調用,SET SERVEROUTPUT ON 觀察輸出。USER_ERRORS、SHOW ERRORS、運行時異常捕獲。DROP,避免對象蔓延。CallableStatement、ODP.NET OracleCommand、Python cx_Oracle.callproc。BEFORE/AFTER INSERT/UPDATE/DELETE ON table CALL proc_name;DBMS_SCHEDULER.CREATE_JOB(job_action => 'proc_name');從 CREATE OR REPLACE PROCEDURE skeleton IS BEGIN NULL; END; 起步,掌握「編寫→部署→運行→修改→調試→刪除」完整生命周期,是每位 Oracle 開發者的必經之路。建議養成腳本化管理、版本控制、錯誤日誌輸出、單元測試覆蓋的工程化習慣,讓存儲過程從「能跑」進化為「可維護、可觀測、可演進」。