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

Oracle 存儲過程入門:從編譯錯誤到成功建立的完整演示

     編輯:Oracle 資料庫基礎

環境

Oracle 9.2.0.1.0 Enterprise Edition。

試錯過程實錄

嘗試 1:帶參數 SELECT * 無 INTO 子句

CREATE OR REPLACE PROCEDURE get_news(aid IN VARCHAR2, atitle IN VARCHAR2) AS
BEGIN
  SELECT * FROM cf_news;
END;
/
-- 警告: PLS-00428: INTO 子句缺失

嘗試 2:語法錯誤 (BEGIN 拼寫)

CREATE OR REPLACE PROCEDURE get_news(aid IN VARCHAR2, atitle IN VARCHAR2) AS
BEGING
/
-- 警告: 編譯錯誤

嘗試 3:單參數 SELECT * 仍缺 INTO

CREATE OR REPLACE PROCEDURE get_news(aid IN VARCHAR2) AS
BEGIN
  SELECT * FROM cf_news;
END;
/
-- PLS-00428

嘗試 4:無參數 SELECT * 仍缺 INTO

CREATE OR REPLACE PROCEDURE get_news AS
BEGIN
  SELECT * FROM cf_news;
END;
/
-- PLS-00428

查看錯誤

SHOW ERRORS;
-- LINE/COL  ERROR
-- 4/1       PLS-00428: INTO 子句缺失

修正:SELECT INTO 變數

CREATE OR REPLACE PROCEDURE get_news AS
  aa NUMBER;
BEGIN
  SELECT COUNT(*) INTO aa FROM cf_news;
END;
/
-- 過程已創建。

加入輸出:DBMS_OUTPUT 拼寫錯誤

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);
END;
/
-- 過程已創建。

執行驗證

SET SERVEROUTPUT ON;
EXECUTE get_news;
-- aa=3
-- PL/SQL 過程已成功完成。

新手必記四大鐵律

  1. SELECT 必須有 INTO 子句,將結果存入變數 (或記錄型別)。
  2. 變數需在 AS/IS 後、BEGIN 前宣告 (如 aa NUMBER;)。
  3. 內建包名拼寫精確:DBMS_OUTPUT 非 DBMS_OUTPUB。
  4. SQL*Plus 顯示輸出需開啟:SET SERVEROUTPUT ON。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved