在 Oracle 中建立預存程序時,初學者常因語法細節導致編譯錯誤。本文透過實際錯誤案例,說明 SELECT INTO 必要性、DBMS_OUTPUT 拼寫陷阱,並提供完整可執行的正確範本。
CREATE OR REPLACE PROCEDURE get_news AS
BEGIN
SELECT * FROM cf_news; -- 錯誤:PL/SQL 要求 SELECT 必須有 INTO
END;
錯誤訊息:PLS-00428: 此 SELECT 語句中缺少 INTO 子句
BEGIN
dbms_outpub.put_line('aa=' || aa); -- 錯誤:套件名拼寫錯誤
END;
錯誤訊息:PLS-00201: 必須宣告識別符 'DBMS_OUTPUB.PUT_LINE'
如 BEGIN 後直接 END、參數宣告與主體不匹配等,皆會觸發「警告: 程序建立時帶有編譯錯誤」。
CREATE OR REPLACE PROCEDURE get_news AS
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM cf_news;
DBMS_OUTPUT.PUT_LINE('count=' || v_count);
END;
/
SHOW ERRORS;
SHOW ERRORS; 檢視詳細行號與錯誤代碼。SET SERVEROUTPUT ON;EXECUTE get_news;SELECT 必須搭配 INTO 將結果存入變數。DBMS_OUTPUT 非 OUTPUB)。AS/IS 與 BEGIN 之間宣告。