Oracle 自定義函式
一、函式
函式與儲存過程相似,也是資料庫中儲存的已命名PL-SQL程式塊。函式的主要特徵是它必須有一個返回值。通過return
來指定函式的返回型別。在函式的任何地方可以通過return expression
語句從函式返回,返回型別必須和宣告的返回型別一致。
語法:
create [or replace] function function_name
[(parameter_list)]
return datatype
{is/as}
[local_declarations]
begin
executable_statements;
[exception_handlers;]
end;
說明:
function_name:函式名稱。
parameter_list:函式列表,可選。
return datatype:指定函式的返回型別,不能指定大小。
local_declarations:區域性變數宣告,可選。
executable_statements:要執行的PL-SQL語句。
exception_handlers:異常處理,可選。
or repalce:是否覆蓋,可選。
簡單的例子: 讀入兩個值, 返回比較大的值
create or replace function function1(para1 in number, para2 in number)
return number
as
begin
if para1 > para2 then
return para1;
else
return para2;
end if;
end function1;
二、函式和儲存過程的優點:
1、共同使用的程式碼可以只需要被編寫一次,而被需要該程式碼的任何應用程式呼叫(.net,c++,java,也可以使DLL庫)。
2、這種幾種編寫、幾種維護更新、大家共享的方法,簡化了應用程式的開發維護,提高了效率和效能。
3、這種模組化的方法使得一個複雜的問題、大的程式逐步簡化成幾個簡單的、小的程式部分,進行分別編寫,因此程式的結構更加清晰,簡單,也容易實現。
4、可以在各個開發者之間提供處理資料、控制流程、提示資訊等方面的一致性。
5、節省記憶體空間。它們以一種壓縮的形式被儲存在外存中,當被呼叫時才被放入記憶體進行處理。而且多個使用者在呼叫同一個儲存過程或函式時,只需要載入一次即可。
6、提高資料的安全性和完整性。通過把一些對資料的操作方到儲存過程或函式中,就可以通過是否授予使用者有執行該語句的許可權,來限制某些使用者對資料庫進行這些操作。
三、函式和儲存過程的區別:
1、儲存過程使用者在資料庫中完成特定操作或者任務(如插入,刪除等),函式用於返回特定的資料。
2、儲存過程宣告用procedure,函式用function。
3、儲存過程不需要返回型別,函式必須要返回型別。
4、儲存過程可作為獨立的pl-sql執行,函式不能作為獨立的plsql執行,必須作為表示式的一部分。
5、儲存過程只能通過out和in/out來返回值,函式除了可以使用out,in/out以外,還可以使用return返回值。
6、sql語句(DML或SELECT)中不可用呼叫儲存過程,而函式可以。
四、適用場合:
1、如果需要返回多個值和不返回值,就使用儲存過程;如果只需要返回一個值,就使用函式。
2、儲存過程一般用於執行一個指定的動作,函式一般用於計算和返回一個值。
3、可以再SQL內部呼叫函式來完成複雜的計算問題,但不能呼叫儲存過程。
Oracle之自定義函式
資料庫中函式包含四個部分:宣告、返回值、函式體和異常處理。
Sql程式碼
--沒有引數的函式
create or replace function get_user return varchar2 is
v_user varchar2(50);
begin
select username into v_user from user_users;
return v_user;
end get_user;
–測試
方法一
select get_user from dual;
方法二
SQL> var v_name varchar2(50)
SQL> exec :v_name:=get_user;
PL/SQL 過程已成功完成。
SQL> print v_name
V_NAME
------------------------------
TEST
方法三
SQL> exec dbms_output.put_line('當前資料庫使用者是:'||get_user);
當前資料庫使用者是:TEST
PL/SQL 過程已成功完成。
Sql程式碼
--帶有IN引數的函式
create or replace function get_empname(v_id in number) return varchar2 as
v_name varchar2(50);
begin
select name into v_name from employee where id = v_id;
return v_name;
exception
when no_data_found then
raise_application_error(-20001, '你輸入的ID無效!');
end get_empname;
附:
函式呼叫限制
1、SQL語句中只能呼叫儲存函式(伺服器端),而不能呼叫客戶端的函式
2、SQL只能呼叫帶有輸入引數,不能帶有輸出,輸入輸出函式
3、SQL不能使用PL/SQL的特有資料型別(boolean,table,record等)
4、SQL語句中呼叫的函式不能包含INSERT,UPDATE和DELETE語句
檢視函式院原始碼
oracle會將函式名及其原始碼資訊存放到資料字典中user_source
select text from user_source where name='GET_EMPNAME';
刪除函式
drop function get_empname;
相關文章
- oracle 自定義聚合函式Oracle函式
- Oracle中自定義函式Oracle函式
- Oracle自定義聚集函式Oracle函式
- ORACLE 自定義函式BUG?Oracle函式
- Oracle自定義聚集函式薦Oracle函式
- Oracle帶引數的自定義函式Oracle函式
- 關於Oracle自定義分組函式Oracle函式
- shell自定義函式函式
- perl自定義函式函式
- Oracle優化案例-自定義函式索引(五)Oracle優化函式索引
- oracle 10g 新增:自定義聚集函式Oracle 10g函式
- Hive常用函式及自定義函式Hive函式
- hive 3.0.0自定義函式Hive函式
- Hive中自定義函式Hive函式
- MySQL建立自定義函式MySql函式
- python 自定義函式Python函式
- mysql自定義函式篇MySql函式
- 一個自定義函式函式
- SQL SERVER 自定義函式SQLServer函式
- SQL 自定義函式FUNCTIONSQL函式Function
- PHP 自定義函式用法及常用函式集合PHP函式
- java自定義equals函式和hashCode函式Java函式
- mysql 自定義分析函式 least 及 日期函式MySql函式AST
- laravel 自定義全域性函式Laravel函式
- Laravel 自定義函式存放位置Laravel函式
- Laravel 新增自定義助手函式Laravel函式
- Laravel自定義輔助函式Laravel函式
- GRDB自定義的純函式函式
- HIVE中的自定義函式Hive函式
- Sql Server系列:自定義函式SQLServer函式
- Teradata自定義函式Replace函式
- Linux Shell 自定義函式Linux函式
- 關於在oracle 的group by中使用自定義函式Oracle函式
- Oracle自定義函式檢視2個字串是否匹配Oracle函式字串
- Hive函式(內建函式+自定義標準函式UDF)Hive函式
- MySQL使用之五_自定義函式和自定義過程MySql函式
- JavaScript 設計模式系列 – 自定義函式(惰性函式)JavaScript設計模式函式
- 動畫函式的繪製及自定義動畫函式動畫函式