日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

oracle自定义函数获取省份,oracle 自定义函数 方法 基本例子

發(fā)布時(shí)間:2024/10/8 61 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle自定义函数获取省份,oracle 自定义函数 方法 基本例子 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

核心提示:函數(shù)用于返回特定數(shù)據(jù)。執(zhí)行時(shí)得找一個(gè)變量接收函數(shù)的返回值; 語法如下: create or

replace function function_name ( argu1 [mode1] datatype1, argu2

[mode2] datatype2, ........ ) return datatype is begin end; 執(zhí)行 var

v1 varchar2(100) exec :v1:=function_na

-

函數(shù)用于返回特定數(shù)據(jù)。執(zhí)行時(shí)得找一個(gè)變量接收函數(shù)的返回值;

語法如下: create or replace function function_name

(

argu1 [mode1] datatype1,

argu2 [mode2] datatype2, ........

)

return datatype

is

begin

end;

執(zhí)行 var v1 varchar2(100)

exec :v1:=function_name

不帶任何參數(shù)

create or replace function get_user return varchar2 is

Result varchar2(50);

begin

select username into Result from user_users;

return(Result);

end get_user;

執(zhí)行:

帶in參數(shù)的

create or replace function get_sal(empname in varchar2) return

number is

Result number;

begin

select sal into Result from emp where ename=empname;

return(Result);

end get_sal;

執(zhí)行: SQL> var sal number

SQL> exec :sal:=get_sal('scott');

帶out參數(shù)的函數(shù)

create or replace function get_info(e_name varchar2,job out

varchar2) return number is

Result number;

begin

select sal,job into Result,job from emp where

ename=e_name;

return(Result);

end get_info;

執(zhí)行: SQL> var job varchar2(20)

SQL> var dname varchar2(20)

SQL> exec :dname:=get_info('SCOTT',:job)

帶in out參數(shù)的函數(shù)

create or replace function result(num1 number,num2 in out

number) return number is

v_result number(6);

v_remainder number;

begin

v_result :=num1/num2;

v_remainder :=mod(num1,num2);

num2 :=v_remainder;

return(v_result);

Exception

when zero_divide then

raise_application_error(-20000,'不能除0');

end result;

執(zhí)行: var result1 number;

var result2 number;

exec :result2:=30

exec :result1:=result(100,:result2)

eg:

1 、一個(gè)最簡單的自定義函數(shù)Fun_test1的定義。

create or replace function Fun_test1(p_1

number)--Fun_test1是函數(shù)名,有一個(gè)輸入?yún)?shù)p_1,是number型的。返回值也是number型的

return number

IS

begin

if p_1>0 then

return 1;

elsif p_1=0 then

return 0;

else

return -1;

end if;

end;

--這個(gè)函數(shù)只是可以知道自定義函數(shù)的定義和格式。其實(shí)沒什么用途。

2、Fun_test1自定義函數(shù)的調(diào)用的存儲(chǔ)過程Pro_Fun_test1_1示例:

create or replace procedure Pro_Fun_test1_1(

p1_in in number,

p2_out out number

)

AS

begin

p2_out:=Fun_test1(p1_in);

end Pro_Fun_test1_1;

--一個(gè)輸入?yún)?shù),一個(gè)輸出參數(shù)

3、Fun_test1自定義函數(shù)的調(diào)用的存儲(chǔ)過程Pro_Fun_test1_2示例:

create or replace procedure Pro_Fun_test1_2(

p1_in in number,

p2_out out number

)

AS

t_1 number;

begin

select Fun_test1(p1_in)+100 INTO p2_out

from bill_org where org_ID=1;

end Pro_Fun_test1_2;

--自定義函數(shù)的調(diào)用方法和的

其它內(nèi)部函數(shù)是一樣的。

二、包的定義和使用入門

包一般是過程和函數(shù)的集合,對過程和函數(shù)進(jìn)行更好的封裝,一般不針對字段。

包的構(gòu)成包括包頭和包體。

1、包頭的定義:

包頭僅僅只是對包中的方法進(jìn)行說明,而沒有實(shí)現(xiàn)

語法:

create or replace package myPackage_1

is

procedure syaHello(vname varchar2);--申明了該包中的一個(gè)過程

end;

2、包體的定義:

包體是對包頭中定義的過程、函數(shù)的具體實(shí)現(xiàn)。

create or replace package body myPackage_1

is

procedure syaHello(vname varchar2)--對包中定義的過程的實(shí)現(xiàn)

is

begin

dbms_output.put_line('Hello '||vname);

end;

end;

要注意的是:

create or replace package后面的名稱必須和create or replace package

body后面的名稱一致,

如果將create or replace package body后面的名稱改為,'MYPACKAGE'

否則將會(huì)出現(xiàn)諸如下面的錯(cuò)誤:

必須說明標(biāo)識(shí)符 'MYPACKAGE'

3、調(diào)用包用的自定義方法:

create or replace procedure Pro_test_package(

p1_in string

)

AS

begin

myPackage_1.syaHello(p1_in);

end Pro_test_package;

eg2:

--沒有參數(shù)的函數(shù)

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;

return v_user;

--測試

方法一

select get_user from dual;

方法二

SQL> var v_name varchar2(50)

SQL> exec :v_name:=get_user;

--帶有IN參數(shù)的函數(shù)

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;

附:

函數(shù)調(diào)用限制

1、SQL語句中只能調(diào)用存儲(chǔ)函數(shù)(服務(wù)器端),而不能調(diào)用客戶端的函數(shù)

2、SQL只能調(diào)用帶有輸入?yún)?shù),不能帶有輸出,輸入輸出函數(shù)

3、SQL不能使用PL/SQL的特有數(shù)據(jù)類型(boolean,table,record等)

4、SQL語句中調(diào)用的函數(shù)不能包含INSERT,UPDATE和DELETE語句

查看函數(shù)院源代碼

oracle會(huì)將函數(shù)名及其源代碼信息存放到數(shù)據(jù)字典中user_source

select text from user_source where name='GET_EMPNAME';

刪除函數(shù)

drop function get_empname;

判斷任務(wù)過期時(shí)間:

create or replace function GetUrgentState(m_TaskID

varchar2,

m_SendTime date,

m_flag varchar2)

return varchar2 IS

myDate date;

ExpireTime date;

strsql varchar2(200);

begin

myDate := m_SendTime;

strsql := 'select max(EXPIRETIME) from t_wf_supervise where

TASKID =''' ||

m_TaskID || '''';

execute immediate strsql

into ExpireTime;

--沒有到期時(shí)間 就是正常狀態(tài)

if ExpireTime is null then

if m_flag = 'String' then

return '正常';

end if;

if m_flag = 'Img' then

return 'cb_execute.gif';

end if;

end if;

--未發(fā)送任務(wù),就是判斷當(dāng)前時(shí)間

if m_SendTime is null then

myDate := sysdate;

end if;

if ExpireTime < myDate then

if m_flag = 'String' then

return '超期';

end if;

if m_flag = 'Img' then

return 'cb_limit.gif';

end if;

end if;

--小于3天的任務(wù)預(yù)警

if ExpireTime - myDate < 3 then

if m_flag = 'String' then

return '預(yù)警';

end if;

if m_flag = 'Img' then

return 'cb_warning.gif';

end if;

else

if m_flag = 'String' then

return '正常';

end if;

if m_flag = 'Img' then

return 'cb_execute.gif';

end if;

end if;

end;

查詢其它表數(shù)據(jù):

create or replace function GetPreNode(m_PreTaskID varchar2)

return varchar2 IS

nodename varchar2(50);

strsql varchar2(200);

begin

if m_PreTaskID is null then

return '';

end if;

strsql := 'select max(nodename) from t_Wf_Tasklist where

TaskID =''' ||

m_PreTaskID|| '''';

execute immediate strsql

into nodename;

return nodename;

end;

格式化標(biāo)題輸出:

create or replace function FormatTitle(m_title varchar2,

m_length number,

m_FillChar varchar2) return varchar2 IS

begin

if lengthb(m_title) > m_length*2 then

return substr(m_title, 0,m_length) || m_FillChar;

else

return m_title;

end if;

end;

與50位技術(shù)專家面對面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的oracle自定义函数获取省份,oracle 自定义函数 方法 基本例子的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。