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

Oracle 存儲過程與函數完整語法指南:定義、執行、異常處理、參數模式、調用方式

     編輯:Oracle 教學

Oracle 存儲過程與函數完整語法指南

一、存儲過程結構三部曲

CREATE OR REPLACE PROCEDURE proc_name (param_list) IS
  -- 1. 定義部:變量/常量/游標/異常聲明
  v_ename VARCHAR2(20);
  v_sal   NUMBER(7,2);
BEGIN
  -- 2. 執行部:業務邏輯 SQL/PLSQL
  SELECT ename, sal INTO v_ename, v_sal FROM emp WHERE empno = p_empno;
  DBMS_OUTPUT.PUT_LINE('員工:'||v_ename||' 薪資:'||v_sal);
EXCEPTION
  -- 3. 異常處理部
  WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.PUT_LINE('員工編號不存在');
END;
/

二、參數模式

  • IN(默認):只讀,可傳常量/變量/表達式。
  • OUT:只寫,必須傳變量,返回值給調用者。
  • IN OUT:可讀寫,傳變量,進出雙向傳值。

三、帶參數過程示例

CREATE OR REPLACE PROCEDURE update_sal (p_ename VARCHAR2, p_sal NUMBER) IS
BEGIN
  UPDATE emp SET sal = p_sal WHERE ename = p_ename;
END;
/
-- 調用
EXEC update_sal('SCOTT', 1200);
-- 或
CALL update_sal('SCOTT', 1200);

四、函數(必須有 RETURN)

CREATE OR REPLACE FUNCTION get_annual_sal (p_ename VARCHAR2) RETURN NUMBER IS
  v_annual NUMBER;
BEGIN
  SELECT sal*12 + NVL(comm,0) INTO v_annual FROM emp WHERE ename = p_ename;
  RETURN v_annual;
END;
/
-- 調用
VAR ys NUMBER;
CALL get_annual_sal('SCOTT') INTO :ys;
PRINT ys;

五、調用方式總結

方式無參過程有參過程函數
SQL*PlusEXEC proc(); / CALL proc();EXEC proc('A',1); / CALL proc('A',1);VAR r NUMBER; CALL func('A') INTO :r;
PL/SQL 塊proc();proc('A',1);v := func('A');
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved