先create package,在里面聲明procedure
成都創(chuàng)新互聯(lián)公司2013年成立,先為壽縣等服務(wù)建站,壽縣等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為壽縣企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
然后再create package body,在package body里面編寫procedure的代碼即可(相當(dāng)于create procedure)。
包里沒有create procedure
示例如下:
CREATE OR REPLACE PACKAGE pkg_test IS
PROCEDURE pro_test(V_OLD IN VARCHAR2,V_NEW IN VARCHAR2);
...
END test;
/
CREATE OR REPLACE PACKAGE BODY pkg_test IS
...
PROCEDURE pro_test(V_OLD IN VARCHAR2,V_NEW IN VARCHAR2) IS
BEGIN
...
END;
...
END pkg_test;
如果你使用界面的話,就直接雙擊圖標(biāo),如果使用腳本的話,就從開始程序里打開Oracle plus
,這兩者都要保證你的服務(wù)是否啟動,一般啟動最后兩個就可以
1.cmd進(jìn)入命令行 lsnrctl start 啟動監(jiān)聽服務(wù),看出現(xiàn)什么錯誤
如果沒有錯誤,察看數(shù)據(jù)庫是否可以正常進(jìn)行連接
2.看下你電腦是不是裝了防火墻 先把防火墻禁止掉去
3.去orant\net80\trace\看看,一般有錯都會在那里產(chǎn)生一個.log文件
oracle數(shù)據(jù)庫中:用的最多的是表(table),表里面用于存儲數(shù)據(jù)。起到數(shù)據(jù)庫的作用。
包和包體一般是不可分的,包中定義變量;包體中書寫操作程序。(備注:在數(shù)據(jù)庫端得包體中編寫數(shù)據(jù)庫操作代碼,簡單,快捷,方便)。
前臺只需要調(diào)用oracle的包體函數(shù)就可以實現(xiàn)該包體中的數(shù)據(jù)庫操作語言,完成數(shù)據(jù)存儲,修改,刪除,等等功能。
除上述以外還有:視圖,觸發(fā)器,隊列,數(shù)據(jù)庫連接等等。
總之,oracle非常好用!?。?!
------包體類似于C語言的公共類函數(shù)。
簡單說,就是將oracle里的一部分procedure等object 組織起來,完全是為了方便代碼程序的管理,完全不使用package也是可以的,只是那樣的話,代碼多了不易管理
在存儲過程或函數(shù)里調(diào)用oracle包的話,首先要有執(zhí)行這個包的權(quán)限;如果包屬于其他的用戶(不是系統(tǒng)包),調(diào)用時:用戶名.包名.存儲過程(參數(shù))名或者
變量:=用戶名.包名.函數(shù)(參數(shù));因為函數(shù)有返回值,變量類型要跟函數(shù)返回值的類型一致。
在command
下調(diào)用的話:exec
用戶名.包名.存儲過程名(參數(shù));select
用戶名.包名.函數(shù)名(參數(shù))
from
dual;就可以了。包屬于當(dāng)期用戶可以不寫用戶名。
包用于在邏輯上組合過程和函數(shù),它由包規(guī)范和包體兩部分組成
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);