CREATE OR REPLACE PROCEDURE get_news(
aid IN VARCHAR2, atitle IN VARCHAR2) AS
BEGIN
SELECT * FROM cf_news;
END;
/
錯誤:PLS-00428: 在此 SELECT 語句中缺少 INTO 子句
CREATE OR REPLACE PROCEDURE get_news(
aid IN VARCHAR2, atitle IN VARCHAR2) AS
BEGIN
NULL; -- 空主體
END;
/
錯誤:編譯通過但無實際邏輯
CREATE OR REPLACE PROCEDURE get_news(aid IN VARCHAR2) AS
BEGIN
SELECT * FROM cf_news;
END;
/
錯誤:PLS-00428
CREATE OR REPLACE PROCEDURE get_news AS
BEGIN
SELECT * FROM cf_news;
END;
/
錯誤:PLS-00428: 在此 SELECT 語句中缺少 INTO 子句
CREATE OR REPLACE PROCEDURE get_news AS
aa NUMBER;
BEGIN
SELECT COUNT(*) INTO aa FROM cf_news;
END;
/
結果:過程已建立
CREATE OR REPLACE PROCEDURE get_news AS
aa NUMBER;
BEGIN
SELECT COUNT(*) INTO aa FROM cf_news;
DBMS_OUTPUB.PUT_LINE('aa=' || aa); -- 拼寫錯誤
END;
/
錯誤:PLS-00201: 必須說明標識符 'DBMS_OUTPUB.PUT_LINE'
CREATE OR REPLACE PROCEDURE get_news AS
aa NUMBER;
BEGIN
SELECT COUNT(*) INTO aa FROM cf_news;
DBMS_OUTPUT.PUT_LINE('aa=' || aa); -- 正確:DBMS_OUTPUT
END;
/
結果:過程已建立
SQL> SET SERVEROUTPUT ON;
SQL> EXECUTE get_news;
aa=3
PL/SQL 過程已成功完成。
| 錯誤代碼 | 原因 | 解決方案 |
|---|---|---|
| PLS-00428 | SELECT 無 INTO 子句 | PL/SQL 中 SELECT 必須用 INTO 接收結果 |
| PLS-00201 | 標識符未宣告 | 檢查拼寫(如 DBMS_OUTPUT vs OUTPUB)、權限、拼寫 |
| PLS-00103 | 語法錯誤 | 檢查分號、關鍵字拼寫、區塊結構 |
SET SERVEROUTPUT ON + DBMS_OUTPUT.PUT_LINESHOW ERRORS 立即查看詳細錯誤位置CREATE OR REPLACE PROCEDURE proc_name(
p_param_in IN VARCHAR2,
p_param_out OUT NUMBER
) AS
v_local_var NUMBER;
BEGIN
-- 業務邏輯
SELECT COUNT(*) INTO v_local_var FROM some_table WHERE col = p_param_in;
-- 輸出參數賦值
p_param_out := v_local_var;
-- 除錯輸出
DBMS_OUTPUT.PUT_LINE('Processed: ' || v_local_var);
EXCEPTION
WHEN NO_DATA_FOUND THEN
p_param_out := 0;
DBMS_OUTPUT.PUT_LINE('No data found');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM);
RAISE;
END;
/