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