函數是一個能夠計算結果值的子程序,函數除了有一個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;