Oracle–plsql函數

來源:互聯網
上載者:User
  • 一個儲存函數是一個命名的PL/SQL 塊,它可以接受參數並且可以被調用。一般來說,函數用於計算一個值。
  • 函數和過程有相似的結構,但函數必須返回一個值到主叫環境。反之,過程可以沒有傳回值,也可以由多個值返回到它的主叫環境。
  • 象過程一樣,函數有一個頭,一個聲明部分,一個執行部分和一個異常處理部分。在函數的頭中必須有一個RETURN 子句,並且在執行部分至少有一個 RETURN 語句。
  • 函數可以作為一個方案對象被儲存在資料庫中用於反覆執行。
  • 函數可以作為一個SQL 運算式或 PL/SQL運算式的一部分被調用。

函數文法:CREATE [OR REPLACE] FUNCTION function_name<br />[(parameter1 [mode1] datatype1,<br /> parameter2 [mode2] datatype2,<br /> . . .)]<br />RETURN datatype<br />IS|AS<br />PL/SQL Block;<br /> PL/SQL
塊必須至少有一個 RETURN 語句

文法說明

參數  說明  

function_name   函數的名字  

parameter   一個 PL/SQL變數的名字,其值被傳遞到函數中  

mode  參數的類型;可以是 IN、out、inout 參數 ,一般使用IN參數

datatype   參數的資料類型  

RETURNdatatype  RETURN 值的資料類型  

PL/SQLblock   定義要由函數執行的動作的程式體   

使用步驟:

1.在一個編輯器中輸入CREATE FUNCTION語句的文本並且將它儲存為一個SQL 指令檔
2.運行儲存原始碼的指令檔並且編譯函數
3.用SHOW ERRORS查看編譯錯誤

CREATE OR REPLACE FUNCTION get_sal<br /> (p_id IN emp.empno%TYPE)<br /> RETURN NUMBER<br />IS<br /> v_sal emp.sal%TYPE :=0;<br />BEGIN<br /> SELECT sal<br /> INTO v_sal<br /> FROM emp<br /> WHERE empno = p_id;<br /> RETURN v_sal;<br />END get_sal;<br />/ <br />在sql*plus建立函數並調用

VARIABLE g_sal NUMBER

EXEC :g_sal := get_sal(7369)

Print g_sal


調用使用者定義函數的位置

•SELECT語句的Select
列表中•WHERE和HAVING子句的條件中•START WITH、ORDER BY和GROUPBY子句中•INSERT語句的VALUES子句中•UPDATE語句的SET子句中

SELECT empno, tax(sal)

FROM  emp

WHERE tax(sal)>(SELECTMAX(tax(sal))

       FROM  emp

       WHERE deptno = 30)

ORDER BY tax(sal) DESC;

SQL中調用函數的限制

為了從SQL 運算式中調用函數,使用者定義函數必須:

•只接受IN參數•只接受有效SQL 資料類型,而不接受PL/SQL特殊的類型

 作為參數

•返回資料類型為有效SQL資料類型,而非PL/SQL 特殊的

 類型

•在一個表上的UPDATE或DELETE語句中調用的函數不能查詢及更新同一個表•從SQL
語句中調用的函數不能包含結束事務的語句

函數刪除:

DROP FUNCTION function_name<br />


過程與函數:

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.