get_news 程序查詢 cf_news 表連線環境:Oracle 9i Enterprise Edition 9.2.0.1.0
| 嘗試 | 代碼片段 | 錯誤訊息 | 原因分析 | 修正 |
|---|---|---|---|---|
| 1 | SELECT * FROM cf_news 無 INTO | PLS-00428: 缺少 INTO 子句 | PL/SQL SELECT 必須將結果存入變數 | 加 INTO 變數 |
| 2 | 拼寫 beging | 編譯錯誤 | 關鍵字拼寫錯誤 | 改正 BEGIN |
| 3 | SELECT COUNT(*) INTO aa 但未宣告 aa | PLS-00428 / 變數未宣告 | 變數需在 DECLARE/AS 區塊宣告 | 加 aa NUMBER; |
| 4 | dbms_outpub.put_line | PLS-00201: 識別符須宣告 | 套件名拼錯 outpub → output | 修正 dbms_output.put_line |
| 5 | 完整正確版本 | Procedure created. | — | — |
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 procedure successfully completed.
%ROWTYPE 記錄。AS/IS 之後、BEGIN 之前,型別建議用 %TYPE/%ROWTYPE 鎖定資料字典。SET SERVEROUTPUT ON 才會顯示;生產環境慎用,改用日誌表或 UTL_FILE。/ 執行斜線:SQL*Plus 中單獨一行 / 代表執行緩衝區 PL/SQL 區塊,不可省略。CREATE OR REPLACE PROCEDURE get_news_cnt(
p_table IN VARCHAR2 DEFAULT 'cf_news',
p_count OUT NUMBER
) AS
v_sql VARCHAR2(200);
BEGIN
v_sql := 'SELECT COUNT(*) FROM ' || p_table;
EXECUTE IMMEDIATE v_sql INTO p_count;
EXCEPTION
WHEN OTHERS THEN
p_count := -1;
dbms_output.put_line('Error: ' || SQLERRM);
RAISE;
END;
OUT 參數回傳結果,支援動態表名。EXECUTE IMMEDIATE 執行動態 SQL。EXCEPTION 區塊記錄錯誤並重拋,保證呼叫端可捕捉。預存程序開發核心在於「語法正確性」→「變數綁定」→「輸出驗證」三步驟。養成 SHOW ERRORS、SET SERVEROUTPUT ON、%TYPE 習慣,能避開 90% 的新手坑。