首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 預存程序建立避坑實錄:從編譯錯誤到成功執行的完整修正路徑

     編輯:Oracle 資料庫基礎

在 Oracle 中建立預存程序看似簡單,實則暗藏多個易踩地雷:SELECT 必須搭配 INTO 子句、輸出套件拼寫錯誤、伺服器輸出未開啟。本文以實際操作畫面為藍本,記錄從連續報錯到成功建立並執行 GET_NEWS 程序的完整修正路徑,作為新手避坑參考。

實驗環境

Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production

錯誤演進與修正軌跡

嘗試 1:帶參數 SELECT * 無 INTO

CREATE OR REPLACE PROCEDURE get_news (
  aid IN VARCHAR2, atitle IN VARCHAR2
) AS
BEGIN
  SELECT * FROM cf_news;
END;

錯誤:PLS-00428: 在此 SELECT 語句中缺少 INTO 子句
原因:PL/SQL 中 SELECT 必須將結果存入變數,不能直接輸出。

嘗試 2:拼寫錯誤 BEGIN → BEGING

錯誤:編譯錯誤(語法錯誤)

嘗試 3:單參數 SELECT * 無 INTO

錯誤:同樣缺少 INTO

嘗試 4:無參數 SELECT * 無 INTO

錯誤:同樣缺少 INTO

嘗試 5:正確使用 INTO 子句

CREATE OR REPLACE PROCEDURE get_news AS
  aa NUMBER;
BEGIN
  SELECT COUNT(*) INTO aa FROM cf_news;
END;

結果:程序已建立 ✓

嘗試 6:輸出套件拼寫錯誤 DBMS_OUTPUB

DBMS_OUTPUB.PUT_LINE('aa=' || aa);

錯誤:PLS-00201: 必須說明標識符 'DBMS_OUTPUB.PUT_LINE'
原因:正確套件名為 DBMS_OUTPUT。

嘗試 7:修正套件名,建立成功

CREATE OR REPLACE PROCEDURE get_news AS
  aa NUMBER;
BEGIN
  SELECT COUNT(*) INTO aa FROM cf_news;
  DBMS_OUTPUT.PUT_LINE('aa=' || aa);
END;

結果:程序已建立 ✓

執行驗證

SQL> SET SERVEROUTPUT ON;
SQL> EXECUTE get_news;
aa=3

核心知識點總結

地雷正確做法錯誤代碼
PL/SQL SELECT 無 INTOSELECT ... INTO 變數 FROM ...PLS-00428
DBMS_OUTPUT 拼寫錯誤DBMS_OUTPUT.PUT_LINEPLS-00201
未開啟伺服器輸出SET SERVEROUTPUT ON無輸出顯示
BEGIN/END 拼寫嚴格大小寫對應PLS-00103

除錯好習慣

  1. 編譯失敗立即執行 SHOW ERRORS; 定位行號與錯誤代碼
  2. 變數宣告區(AS/IS 後)預先定義所有接收變數
  3. 輸出除錯資訊務必先 SET SERVEROUTPUT ON
  4. 善用 DBMS_OUTPUT.PUT_LINE 追蹤變數值與流程

結語

預存程序編譯錯誤 90% 集中在 SELECT INTO、套件拼寫、SERVEROUTPUT 三大項。建立「先除錯、再執行」肌肉記憶,將大幅縮短開發週期。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved