sqlplus環(huán)境下:
創(chuàng)新互聯(lián)主要從事成都做網(wǎng)站、成都網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)阿魯科爾沁,十載網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18982081108
exec 包名.自定義函數(shù)名(參數(shù)1,參數(shù)2,參數(shù)N) ;
你自定義的函數(shù),注意要在package body 里定義好,也需要在package中聲明。
pl/sql里,select
語句必須接into
,不接into那就得返回一個(gè)游標(biāo)出去,比如
create
or
replace
package
test_package
is
procedure
query_test(num
number,po_cursor
out
sys_refcursor);
end
test_package;
create
or
replace
package
body
test_package
is
procedure
query_test(num
number,po_cursor
out
sys_refcursor)
is
begin
select
unitname,tradetype,workernumber
from
test
where
income=num;
end
query_test;
end
test_package;
包用于在邏輯上組合過程和函數(shù),它由包規(guī)范和包體兩部分組成
1.創(chuàng)建包
--創(chuàng)建一個(gè)包sp_package
create package sp_package is
--聲明該包有一個(gè)過程和函數(shù),(沒有實(shí)現(xiàn))
procedure update_sal(name varchar2,newsal number);
function annual_nicome(name varchar2) return number;
end;
--創(chuàng)建包體(用于實(shí)現(xiàn)已經(jīng)聲明的函數(shù)和過程)
create package body sp_package is
procedure update_sal(name varchar2,newsal number)
is
BEGIN
UPDATE emp
SET sal = newsal
WHERE ename = name;
END;
function annual_income(name varchar2)
return number is
annual_salary number;
BEGIN
SELECT sal * 12 + Nvl(comm,0)
INTO annual_salary
FROM emp
WHERE ename = name;
RETURN annual_salary;
END;
end;
--調(diào)用包中的內(nèi)容
exec sp_package.update_sal('name',number);
包用于在邏輯上組合過程和函數(shù),它由包規(guī)范和包體兩部分組成
1.創(chuàng)建包
--創(chuàng)建一個(gè)包sp_package
create?package?sp_package?is
--聲明該包有一個(gè)過程和函數(shù),(沒有實(shí)現(xiàn))
procedure?update_sal(name?varchar2,newsal?number);
function?annual_nicome(name?varchar2)?return?number;
end;
--創(chuàng)建包體(用于實(shí)現(xiàn)已經(jīng)聲明的函數(shù)和過程)
create?package?body?sp_package?is
procedure?update_sal(name?varchar2,newsal?number)
is
BEGIN
UPDATE?emp
SET????sal?=?newsal
WHERE??ename?=?name;
END;
function?annual_income(name?varchar2)
return?number?is
annual_salary?number;
BEGIN
SELECT?sal?*?12?+?Nvl(comm,0)
INTO???annual_salary
FROM???emp
WHERE??ename?=?name;
RETURN?annual_salary;
END;
end;
--調(diào)用包中的內(nèi)容
exec?sp_package.update_sal('name',number);
oracle不支持帶參數(shù)視圖,但你的包已經(jīng)有設(shè)參數(shù)和傳參數(shù)的方法了,那你從視圖里拿數(shù)據(jù)就調(diào)用包的設(shè)參數(shù)的方法就可以了.
select * from view_student1 where PKG_REPORT.SET_VALUE( '2012-12-20') = '2012-12-20'
這樣當(dāng)執(zhí)行上SQL的時(shí)候SET_VALUE方法會(huì)把參數(shù)傳進(jìn)去,然后你的視圖通過GET_VALUE方法獲得參數(shù).
pl/sql 里面定義的包在調(diào)用的時(shí)候使用exec 命令調(diào)用,例如:exec package_name.過程名()
過程名():包體里面定義的公用過程。
不知道我的回答你清楚了嗎?