記錄一次在 Oracle 9i 環境下創建預存程序的完整試錯過程,展示常見錯誤(PLS-00428、PLS-00201)的成因與修正,最終實現帶輸出的計數查詢程序。
Oracle 9i Enterprise Edition Release 9.2.0.1.0
JServer Release 9.2.0.1.0
SQL> create or replace procedure get_news as
2 begin
3 select * from cf_news;
4 end;
5 /
警告: 創建的過程帶有編譯錯誤。
SQL> show errors;
LINE/COL ERROR
4/1 PLS-00428: 在此 SELECT 語句中缺少 INTO 子句
原因:PL/SQL 中 SELECT 必須將結果存入變數,不能直接輸出。
SQL> create or replace procedure get_news as
2 aa number;
3 begin
4 select count(*) into aa from cf_news;
5 dbms_outpub.put_line('aa='||aa);
6 end;
7 /
警告: 創建的過程帶有編譯錯誤。
SQL> show errors;
LINE/COL ERROR
6/1 PLS-00201: 必須說明標識符 'DBMS_OUTPUB.PUT_LINE'
修正:正確包裝名為 DBMS_OUTPUT。
SQL> create or replace procedure get_news as
2 aa number;
3 begin
4 select count(*) into aa from cf_news;
5 dbms_output.put_line('aa=' || aa);
6 end;
7 /
過程已創建。
SQL> set serveroutput on;
SQL> execute get_news;
aa=3
PL/SQL 過程已成功完成。
| 錯誤代碼 | 含義 | 解決方案 |
|---|---|---|
| PLS-00428 | SELECT 缺少 INTO | 宣告變數,使用 SELECT ... INTO var FROM ... |
| PLS-00201 | 標識符未聲明 | 檢查拼寫,確認權限與包名正確 |
SET SERVEROUTPUT ON 必須在客戶端開啟,否則 DBMS_OUTPUT 不顯示。IN(預設)、OUT、IN OUT。SHOW ERRORS 定位行號,再針對性修正。