在oracle資料庫中,自定義函式實際是一組pl/sql的語句的組合,並且自定義的函式必須有返回值。
create
orreplace
function
'函式名'
return
'返回值的型別'
asbegin
'函式定義的邏輯'
end'函式名'
;
該語句是建立不帶任何引數的簡單函式。
create
orreplace
function getemployeecount return number as
begin
declare employee_count number;
begin
select
count(1
)into employee_count from employee;
return employee_count;
end;
end getemployeecount;
該語句建立例乙個統計資料表"employee"中一共有多少行資料的函式"getemployeecount"。
在oracle資料庫中如果需要定義有參的函式時,只需要在宣告語句的函式之後新增小括號,並且在小括號中指定引數的資料型別和名稱即可。
create
orreplace
function gettablecount(table_name varchar2)
return number as
begin
declare record_count number;
query_sql varchar2(
200)
;begin
query_sql :=
'select count(1) from '
|| table_name;
execute immediate query_sql into record_count;
return record_count;
end;
end gettablecount;
該語句建立例乙個有參函式,該函式可以統計r資料表中任何資料表中一共有多少行資料。其中"execute immediate"表示立刻執行後面的sql語句(「query_sql」);"||"在oracle資料庫中起拼接的作用,此時"from"後面必須有空格,否則,在拼接時,直接將"from"和"table_name"拼接在一起,這樣在定義函式時,不會報錯,但是在執行時會報錯。
直接使用
select gettablecount(
'student'
)from dual;
pl/sql環境中使用
declare table_name varchar2(50)
;begin
table_bame :=
'student'
; dbms_output.put_line(
'資料表'
|| table_name ||
'的記錄數為'
|| gettablecount(table_name));
end;
在oracle資料庫中,當乙個函式的函式傳遞引數值一定,函式結果為唯一值時,這樣的函式被稱為具有確定性的函式。確定性函式可以根據引數值來快取執行結果,當乙個具有確定性的函式在第二次執行同乙個引數值時,oracle資料庫會直接獲取快取值,而不在去執行實際的**,從而提高工作效率。
oracle資料庫中使用"deterministic"關鍵字來表示函式具有確定性,但是必須保證該函式在傳入相同的引數值時,結果必須為唯一值,否則不能使用"deterministic"關鍵字來上面該函式。上面的"gettablecount()"函式就不具有確定性,因為資料表中的資料數是可以變的。
create
orreplace
function getwateramount(tom number,unitprice number)
return number deterministic
asbegin
declare wateramount number;
begin
if(ton <=2)
then
wateramount := unitprice * ton;
endif;if
(ton >
2and ton <=4)
then
wateramount := unitprice *2+
(ton -2)
*2* unitprice;
endif;if
(ton >4)
then
wateramount := unitprice *2+
2*2* unitprice + unitprice *4*
(ton -4)
;endif;
return wateramount;
end;
end getwateramount;
該函式就是乙個具有確定性的函式。
drop
function
'函式名'
;
該語句可以刪除自定義的函式。
Oracle資料庫中的函式
1 隨機數函式 dbms random.random 1 select abs mod dbms random.random,100 from dual 產生乙個100以內的隨機數 2select trunc 100 900 dbms random.value from dual 產生乙個100 1...
oracle資料庫中listagg函式的使用
公司有三個平台,同乙個客戶拿手機號在三個平台都註冊了,但註冊過的使用者名稱不一樣,顯示的時候需要根據手機號顯示所有註冊過的名稱。1 原始資料是這樣的,如圖 2 要求顯示成這樣,如圖 3 sql函式 select phone,listagg log name,within group order by...
Oracle資料庫中count函式的用法
oracle資料庫中count函式的用法 count用來統計查詢結果有幾條記錄 例表 t test 姓名 性別 年齡 工資 張三 男 李四 女 王武 男 簡單應用 查詢 select count from t test 結果 3 解釋 以上查詢將返回表t test中記錄的條數。帶where條件的應用...