程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> Oracle中的子程序之二函數

Oracle中的子程序之二函數

編輯:Oracle數據庫基礎

函數是一個能夠計算結果值的子程序,函數除了有一個RETURN子句之外,其它結構跟過程類似。值得 注意的是,Oracle中的函數必須提供返回值,如果你定義的子程序沒有返回值,那麼你不應該把它定義 成函數,而應該定義成過程。

一、函數

示例1:創建不帶參數的函數

CREATE OR REPLACE FUNCTION currentTime  --沒有參數,不能加括號
RETURN VARCHAR2
AS
BEGIN
RETURN TO_CHAR(SYSDATE,'YYYY"年"MM"月 "DD"日"HH24"時"MI"分"SS"秒"');
END;

既然函數有返回值,那麼函數就可以在允許有表達式的地方出現(帶有輸出參數或輸入輸出參數的函 數除外)如:

DECLARE
myStr VARCHAR2(30);
BEGIN
myStr:=currentTime;
DBMS_OUTPUT.PUT_LINE(myStr);
END;

也可以使用SELECT語句查看函數的返回值:

SELECT currentTime FROM DUAL;

示例2:創建帶有輸入參數的函數

CREATE OR REPLACE FUNCTION getEmpNameByEmpNo(no [IN] NUMBER)
RETURN VARCHAR2
AS
name VARCHAR2(20);
BEGIN
SELECT eName INTO name FROM EMP WHERE empNo=no;
RETURN name;
EXCEPTION
WHEN NO_DATA_FOUND THEN
name:=' 無此員工';
RETURN name;
END;

示例3:創建帶有輸出參數的函數

CREATE OR REPLACE FUNCTION getEmpNameAndJobByEmpNo(no NUMBER,job OUT VARCHAR2)
RETURN VARCHAR2
AS
name VARCHAR2(20);
BEGIN
SELECT eName,job INTO name,job FROM EMP WHERE empNo=no;
RETURN name;
END;

調用方式如下:

DECLARE
job emp.job%TYPE;
BEGIN
DBMS_OUTPUT.PUT_LINE (getEmpNameAndJobByEmpNo(7788,job));
DBMS_OUTPUT.PUT_LINE(job);
END;

示例4:創建帶有默認值的函數

CREATE OR REPLACE FUNCTION getEmpNameAndJobByEmpNo(no NUMBER DEFAULT 7788,job OUT VARCHAR2)
RETURN VARCHAR2
AS
name VARCHAR2(20);
BEGIN
SELECT eName,job INTO name,job FROM EMP WHERE empNo=no;
RETURN name;
END;

調用方式如下:

DECLARE
job EMP.JOB%TYPE;
BEGIN
DBMS_OUTPUT.PUT_LINE (getEmpNameAndJobByEmpNo(job=>job));
DBMS_OUTPUT.PUT_LINE(job);
END;

示例5:創建帶有輸入輸出參數的函數

CREATE OR REPLACE FUNCTION getHiredateAndJobByEmpName(nb IN OUT VARCHAR2)
RETURN DATE
AS
hireDate DATE;
BEGIN
SELECT hiredate,job INTO hireDate,nb FROM EMP WHERE eName=nb;
RETURN hireDate;
END;

當函數中有輸出參數時,不能直接通過SELECT語句查看,必須在BEGIN  END塊中調用,如下:

DECLARE
n emp.eName%TYPE:='SCOTT';
BEGIN
DBMS_OUTPUT.PUT_LINE (getHiredateAndJobByEmpName(n));
DBMS_OUTPUT.PUT_LINE(n);
END;

二、維護函數

1、刪除函數

DROP FUNCTION Fun_Name;

2、查看函數狀態

SELECT object_name,status  FROM USER_OBJECTS WHERE object_type='FUNCTION';

3、重新編譯函數

ALTER FUNCTION Fun_Name COMPILE;

4、查看函數代碼

SELECT * FROM USER_SOURCE WHERE TYPE='FUNCTION'

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved