達夢數據庫的過程包使用

達夢數據庫的過程包使用

過程包即Package,它是存儲過程的延伸,包的實現主要包括包頭和包體,其中包頭主要用於定義接口,包體主要用以實現包體中聲明的存儲過程、函數等。如果業務中需要用到大量的存儲過程,則需要用過程包對存儲過程進行進一步的包裝,Package 分爲Package聲明以及Packge body,需要先聲明存儲過程,存儲過程中相關的數據,在Package body中實現聲明中的存儲過程。

1、查看所有角色
首先創建一張測試的表來測試
create table tab_package_cs (id int, name varchar(100), city varchar(100));
insert into tab_package_cs values(10,'fuzhou','福州');
達夢數據庫的過程包使用

2、開始創建包
現在我們開始創建包,創建包分兩部分內容:包頭和包體,創建包前是需要先對包裏的動作做定義申明,也就是我們說的包頭,然後再建包體。我們創建一個包來做實驗,這個包裏有我們可以存儲多個存儲過程,每個過程又都可以執行一段自己的代碼,我們分別在包裏設置新刪改查表的過程。
create or replace package pkp_package_cs is
e_nocs exception;
cscount int;
pcur cursor;
procedure addcs(pname varchar(100), pcity varchar(100));
procedure removecs(pname varchar(100), pcity varchar(100));
procedure removecs(pid int);
function getcscount return int;
procedure cslist;
end pkp_package_cs;
/
達夢數據庫的過程包使用

3、創建包體內容語句
create or replace package body pkp_package_cs as
procedure addcs(pname varchar(100), pcity varchar(100)) as
begin
insert into tab_package_cs values(11, pname, pcity);
cscount = cscount + sql%rowcount;
end addcs;
procedure removecs(pname varchar(100), pcity varchar(100)) as
begin
delete from tab_package_cs where name like pname and city like pcity;
cscount = cscount - sql%rowcount;
end removecs;
procedure removecs(pid int) as
begin
delete from tab_package_cs where id = pid;
cscount = cscount - sql%rowcount;
end removecs;
function getcscount return int as
begin
return cscount;
end getcscount;
procedure cslist as
declare
v_id int;
v_name varchar(100);
v_city varchar(100);
begin
if cscount = 0 then
raise e_nocs;
end if;
open pcur for select id, name, city from tab_package_cs;
loop
fetch pcur into v_id,v_name,v_city;
exit when pcur%notfound;
print ('no.' + (cast (v_id as varchar(100))) + ' ' + v_name + '????' + v_city );
end loop;
close pcur;
end cslist;
begin
select count(*) into cscount from tab_package_cs;
end pkp_package_cs;
/
達夢數據庫的過程包使用

4、調用包
首先我們來使用下這個包,調用包裏插入表的過程
call pkp_package_cs.addcs ('xiamen', '廈門');
查詢表的數據情況
select * from tab_package_cs;
達夢數據庫的過程包使用

首先我們來使用下這個包,調用包裏刪除記錄的過程
call pkp_package_cs.removecs ('xiamen', '廈門');
select * from tab_package_cs;
達夢數據庫的過程包使用

5、包的管理
編譯包,當對包體做修改裏可以重新編譯
alter package pkp_package_cs compile;

刪除包主體和包頭,順序要先刪除包體再刪除包頭
drop package body pkp_package_cs;
drop package pkp_package_cs;
達夢數據庫的過程包使用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章