包用于在邏輯上組合過程和函數(shù),它由包規(guī)范和包體兩部分組成
專業(yè)從事做網(wǎng)站、網(wǎng)站建設(shè),高端網(wǎng)站制作設(shè)計,成都小程序開發(fā),網(wǎng)站推廣的成都做網(wǎng)站的公司。優(yōu)秀技術(shù)團隊竭力真誠服務(wù),采用html5+CSS3前端渲染技術(shù),成都響應(yīng)式網(wǎng)站建設(shè)公司,讓網(wǎng)站在手機、平板、PC、微信下都能呈現(xiàn)。建站過程建立專項小組,與您實時在線互動,隨時提供解決方案,暢聊想法和感受。
1.創(chuàng)建包
--創(chuàng)建一個包sp_package
create?package?sp_package?is
--聲明該包有一個過程和函數(shù),(沒有實現(xiàn))
procedure?update_sal(name?varchar2,newsal?number);
function?annual_nicome(name?varchar2)?return?number;
end;
--創(chuàng)建包體(用于實現(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);
25、包
(1)定義包頭
語法:
CREATE [OR REPLACE] PACKAGE [schame_name.]包名
IS | AS
包描述
包描述:可以是變量、常量及數(shù)據(jù)類型定義和游標定義,也可以是存儲過程、函數(shù)定義和參數(shù)列表返回值類型。
例:
CREATE OR REPLACE PACKAGE employeePackage
AS
--類型定義
Type empRecType is record(
Empno number(4),
Salary number
)
--變量定義
p1 varchar2(20);
type t_departmentNo table is table of dept.deptno%type
index by binary_integer;
--游標定義
Cursor order_sal retrurn EmpRecType;
--聘用員工過程
Procedure HireEmployee(p_EmpNo emp.empno%type);
End employeePackage;
例:
CREATE OR REPLACE PACKAGE scott.pkg_displayproduct
IS
procedure prc_getproductinfo
(
pid scott.product.prodid%type,
pname out scott.product.prodname%type,
ctname out scott.product.CATEGORYID%type,
dscp out scott.product.description%type
);
function fun_getstock
(
pid scott.product.prodid%type
)
return number;
END pkg_displayproduct;
(2)定義包體
語法:
CREATE OR REPLACE PACKAGE BODY [schame_name.]包名
IS | AS
包體描述;
END 包名;
包名:將要創(chuàng)建的包名稱,該名稱可以和包頭所在的包名相同,也可以不同。
包體描述:游標、存儲過程或者函數(shù)的定義
包體是可選的,如果在包頭中沒有聲明任何存儲過程或者函數(shù),則包體就不存在,即使在包頭有變量、游標或者類型的聲明
(3)引用包中對象
BEGIN
[schame_name.][包名.]對象名;
END;
包只是作為 程序的一個載體而已,你要運行,當然是去調(diào)用它!
包里面可以包含函數(shù)、過程等,你可以開發(fā)程序時候調(diào)用包里面的這些程序!沒有聽說過包怎么運行的道理!
就像電視機(包)可以用來看電視,但是你不去打開它(調(diào)用包),它就沒有作用!
樓下的明顯誤導(dǎo)別人啊,包何來參數(shù)之說?只有包里面的程序才有參數(shù),調(diào)用包里面過程的方法如下:
begin
exec 包名.過程名();
end;
函數(shù)的調(diào)用就不用我寫了吧!
先修改包頭,加入存儲過程聲明,然后再在包體中增加即可!
select text from dba_source where owner='xxx' and name='包名' and type='PACKAGE BODY'
order by line asc
調(diào)用方式如下:
using (var conn = new OracleConnection(oradb))
using (var cmd = conn.CreateCommand())
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "PKG_NAME.INSERT_FUNC";
cmd.BindByName = true;
cmd.Parameters.Add("Return_Value", OracleDbType.Int16,
ParameterDirection.ReturnValue);
cmd.Parameters.Add("i_description", OracleDbType.Varchar2, 1000,
promotionEventSetupDetails.PromotionDescription,
ParameterDirection.Input);
cmd.Parameters.Add("i_theme", OracleDbType.Varchar2, 80,
promotionEventSetupDetails.PromotionTheme,
ParameterDirection.Input);
cmd.Parameters.Add("o_id", OracleDbType.Varchar2,
ParameterDirection.Output);
cmd.Parameters.Add("o_error_msg", OracleDbType.Varchar2,
ParameterDirection.Output);
conn.Open();
using (var dr = cmd.ExecuteReader())
{
// 業(yè)務(wù)代碼
}
}
包頭
create or replace package package_name is
prcedure p1;
prcedure p2(v1 in char, v2 in date);
end package_name;
包體
create or replace package body package_name is
prcedure p1 is
begin
--代碼省略
end p1;
prcedure p2(v1 in char, v2 in date) is
begin
--代碼省略
end p2;
end package_name;
網(wǎng)站名稱:oracle包體怎么設(shè)置 oracle包和包體的區(qū)別
文章位置:http://www.rwnh.cn/article12/hhgegc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、響應(yīng)式網(wǎng)站、網(wǎng)站制作、App設(shè)計、網(wǎng)站設(shè)計公司、網(wǎng)站維護
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)