oracle 函數的用法(三)
阿新 • • 發佈:2017-07-07
order 全局 接收 報錯 sysdate times 變量 pda was
-- 函數
1.oracle自帶的標準函數 to_date,to_number
2.自定義函數
-- 自定義函數語法
1 CREATE OR REPLACE FUNCTION FUNCTION_name 2 [ (PARAMETERS [MODEL] datatype ... ) ] 3 RETURN datatype IS|AS 4 [local_variable_declarations ; ...] 5 BEGIN 6 -- action; 7 RETURN expression; 8 END [function_name];
-- 建立第一個函數 獲取給定員工id的薪水
1 CREATEOR REPLACE FUNCTION get_sal 2 ( 3 ID employees.employee_id%Type 4 ) 5 RETURN NUMBER IS 6 sal employees.salary%TYPE := 0; 7 BEGIN 8 SELECT salary INTO sal FROM employees WHERE employee_id = ID; 9 RETURN sal; 10 END get_sal;
-- 執行方式
1 -- 全局變量的方式執行 2 VARIABLE salary NUMBER 3 EXECUTE :salary :=get_sal(100); 4 -- 本地塊的方式執行 5 DECLARE sal employees.salary%TYPE; 6 BEGIN 7 sal := get_sal(100); 8 END; 9 --命令行執行 10 execute dbms_output.put_line(get_sal(100)); 11 -- SQL語句執行 12 SELECT get_sal(100) FROM dual;
-- 函數在SQL語句中的使用 類似於avg count 等函數
1 CREATE OR REPLACE FUNCTION tax(VALUE IN NUMBER) 2 RETURNNUMBER IS 3 BEGIN 4 RETURN (VALUE * 0.08); 5 END; 6 7 SELECT tax(100) FROM dual;
函數的限制 : 只接收in 類型的參數
-- 函數會犯的錯誤
1 CREATE OR REPLACE FUNCTION dml_call_sql 2 ( 3 sal NUMBER 4 ) 5 RETURN NUMBER IS 6 BEGIN 7 INSERT INTO employees 8 (employee_id,last_name,email,hire_date,job_id,salary) 9 VALUES 10 (1,‘forst‘,‘[email protected]‘,SYSDATE,‘sa_man‘,sal); 11 RETURN (sal + 100); 12 END; 13 14 UPDATE employees SET salary = dml_call_sql(2000) WHERE employee_id = 170;
報錯 : update,insert中不能調用 有insert 的函數
-- 刪除一個函數
1 drop function function_name
-- function 的數據字典
1 SELECT text FROM user_source WHERE TYPE=‘FUNCTION‘ ORDER BY line; -- 顯示函數內容
2 SELECT object_name FROM user_objects WHERE object_type=‘FUNCTION‘; -- 顯示函數
-- user_objects對象的結構
1 SQL> desc user_objects; 2 Name Type Nullable Default Comments 3 -------------- ------------- -------- ------- ---------------------------------------------------------------------------- 4 OBJECT_NAME VARCHAR2(128) Y Name of the object 5 SUBOBJECT_NAME VARCHAR2(30) Y Name of the sub-object (for example, partititon) 6 OBJECT_ID NUMBER Y Object number of the object 7 DATA_OBJECT_ID NUMBER Y Object number of the segment which contains the object 8 OBJECT_TYPE VARCHAR2(19) Y Type of the object -- 類型 function, procedure 等 9 CREATED DATE Y Timestamp for the creation of the object 10 LAST_DDL_TIME DATE Y Timestamp for the last DDL change (including GRANT and REVOKE) to the object 11 TIMESTAMP VARCHAR2(19) Y Timestamp for the specification of the object 12 STATUS VARCHAR2(7) Y Status of the object -- 無效狀態的在數據庫巡檢時抓出來 重新編譯 13 TEMPORARY VARCHAR2(1) Y Can the current session only see data that it place in this object itself? 14 GENERATED VARCHAR2(1) Y Was the name of this object system generated? 15 SECONDARY VARCHAR2(1) Y Is this a secondary object created as part of icreate for domain indexes? 16 NAMESPACE NUMBER Y Namespace for the object 17 EDITION_NAME VARCHAR2(30) Y Name of the edition in which the object is actual
-- 無效對象重新編譯腳本 【擴展知識】
D:\oracle11g\app\Administrator\product\11.2.0\dbhome_1\RDBMS\ADMIN
utlrp.sql腳本文件
函數和存儲過程的異同
oracle 函數的用法(三)