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優化函式索引
- shell自定義函式函式
- Hive常用函式及自定義函式Hive函式
- hive 3.0.0自定義函式Hive函式
- Hive中自定義函式Hive函式
- python教程:自定義函式Python函式
- java自定義equals函式和hashCode函式Java函式
- PHP 自定義函式用法及常用函式集合PHP函式
- Hive函式(內建函式+自定義標準函式UDF)Hive函式
- Laravel 新增自定義助手函式Laravel函式
- laravel 自定義全域性函式Laravel函式
- Laravel 自定義函式存放位置Laravel函式
- Laravel自定義輔助函式Laravel函式
- FlinkSQL自定義函式開發SQL函式
- MySQL使用之五_自定義函式和自定義過程MySql函式
- JavaScript 設計模式系列 – 自定義函式(惰性函式)JavaScript設計模式函式
- Ignite自定義函式注意事項函式
- VBA 自定義常用函式 (備用)函式
- php自定義函式放哪兒PHP函式
- matlab自定義函式建立與使用Matlab函式
- MySQL全面瓦解18:自定義函式MySql函式
- 【TUNE_ORACLE】列出帶有自定義函式的SQL的SQL參考Oracle函式SQL
- Apache Phoenix自定義函式(UDF)實踐Apache函式
- sql中select列有自定義函式 dblinkSQL函式
- Qt自定義動畫插值函式QT動畫函式
- 單據列表呼叫自定義SQL函式SQL函式
- HIVE自定義函式的擴充套件Hive函式套件
- Excel vba自定義函式公式智慧提示Excel函式公式
- 22.python自定義函式(format,zip)Python函式ORM
- Clickhouse 使用者自定義外部函式函式
- 【vue】自定義一個websocket工具函式VueWeb函式
- 皕傑報表之自定義函式函式
- Hive--->建立自定義的UDTF函式Hive函式
- 動畫函式的繪製及自定義動畫函式動畫函式
- 自定義生成器函式模擬Python內建函式filter()函式PythonFilter
- MySQL自定義函式與儲存過程MySql函式儲存過程
- SQL優化案例-自定義函式索引(五)SQL優化函式索引
- T-SQL——自定義函式解析JSON字串SQL函式JSON字串