創(chuàng)新互聯(lián)公司是一家專注于網(wǎng)站建設、成都網(wǎng)站建設與策劃設計,盂縣網(wǎng)站建設哪家好?創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設十載,網(wǎng)設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:盂縣等地區(qū)。盂縣做網(wǎng)站價格咨詢:18980820575
一:存儲過程 ( 圖片左邊的 procedure 目錄 ) :
在數(shù)據(jù)庫的實際開發(fā)過程中,我們不可能每個腳本用人工的方式執(zhí)行,需要自動的批量提交腳本到數(shù)據(jù)庫執(zhí)行,數(shù)據(jù)庫就提供了像存儲過程這樣的對象,方便開發(fā)人員把處理某個功能或報表的邏輯寫到存儲過程里。
1) 存儲過程的優(yōu)點:
a. 執(zhí)行速度更快:在數(shù)據(jù)庫中保存的存儲過程語句都是編譯過的
b. 允許模塊化程序設計和可移植性更強:類似方法的復用(使用存儲過程可以實現(xiàn)存儲過程設計和編碼工作的分開進行,只要將存儲過程名、參數(shù)、返回信息等告訴編程人員即可);
c. 提高系統(tǒng)安全性:防止 SQL 注入 (執(zhí)行存儲過程的用戶要具有一定的權限才能使用存儲過程)
d. 減少網(wǎng)絡流通量:只要傳輸存儲過程的名稱(在大批數(shù)據(jù)查詢時使用存儲過程分頁查詢比其他方式的分頁要快很多)
e. 在同時進行逐主、從表間的數(shù)據(jù)維護及有效性驗證時,使用存儲過程更加方便,可以有效的利用 SQL 中的事務處理機制。
創(chuàng)建存儲
2) 創(chuàng)建語法:
create or replace procedure p_house_create_data(p_fm_dt date default sysdate - 1 ,
p_to_dt date default sysdate ) is
/************************************************************
author :hf
created :2018-08-08
purpose : 生成數(shù)據(jù)過程
parameter value
p_fm_dt 2018-08-01( 昨天 )
p_to_dt 2018-08-02( 當日 )
*************************************************************/
/************************************************************
定義區(qū)間
*************************************************************/
v_sqlstate varchar2 ( 500 );
v_proc_name varchar2 ( 64 ) := 'p_house_create_data' ;
v_fm_dt date ;
v_to_dt date ;
begin
/************************************************************
賦值區(qū)間
*************************************************************/
v_sqlstate := ' 賦值 ' ;
v_fm_dt := trunc (p_fm_dt, 'DD' );
v_to_dt := trunc (p_to_dt, 'DD' );
/************************************************************
計算區(qū)間
*************************************************************/
v_sqlstate := ' 開始 ' ;
pkg_rpt_system.sys_log(v_proc_name, v_sqlstate, 'OK' , null , null ); -- 寫日志
v_sqlstate := ' 刪除數(shù)據(jù) ' ;
delete t_landlord;
commit ;
v_sqlstate := ' 生成房東信息數(shù)據(jù) ' ;
insert into t_landlord
values
( '001' , ' 張強 ' , ' 男 ' , '13723870069' , '001' , '2010-03-12' );
commit ;
/************************************************************
結束區(qū)間
*************************************************************/
v_sqlstate := ' 結束 ' ;
pkg_rpt_system.sys_log(v_proc_name, v_sqlstate, 'OK' , null , null ); -- 寫日志
/************************************************************
異常區(qū)間
*************************************************************/
exception
when others then
rollback ; -- 回滾數(shù)據(jù)
pkg_rpt_system.sys_log(v_proc_name,
v_sqlstate,
'ERROR' ,
sqlcode ,
substr ( sqlerrm , 1 , 3000 )); -- 寫日志
commit ;
end p_house_create_data;
二:包 ( 圖片左邊的 package bodies 目錄 ) :
其實包可以理解為是對存儲過程和函數(shù)的方便管理,如果過程和函數(shù)多了,不方便查找,比較亂,哪么我們可以把相關的過程放在一起,或把業(yè)務邏輯相關的放在一起維護。
1) 包的構成:
a. 包頭:是對包里的過程和函數(shù)的一個定義,相關于目錄
b. 包體:是對包里的過程和函數(shù)的實現(xiàn),具體代碼的邏輯實現(xiàn)。
2) 創(chuàng)建語法:
-- 包頭
create or replace package pkg_abc_create_data is
procedure p_house_create_data(p_fm_dt date default sysdate - 1 ,
p_to_dt date default sysdate );
end pkg_abc_create_data;
-- 包體
create or replace package body pkg_abc_create_data is
procedure p_house_create_data(p_fm_dt date default sysdate - 1 ,
p_to_dt date default sysdate ) is
/************************************************************
author :hf
created :2018-08-08
purpose : 生成數(shù)據(jù)過程
parameter value
p_fm_dt 2018-08-01( 昨天 )
p_to_dt 2018-08-02( 當日 )
*************************************************************/
/************************************************************
定義區(qū)間
*************************************************************/
v_sqlstate varchar2 ( 500 );
v_proc_name varchar2 ( 64 ) := 'p_house_create_data' ;
v_fm_dt date ;
v_to_dt date ;
begin
/************************************************************
賦值區(qū)間
*************************************************************/
v_sqlstate := ' 賦值 ' ;
v_fm_dt := trunc (p_fm_dt, 'DD' );
v_to_dt := trunc (p_to_dt, 'DD' );
/************************************************************
計算區(qū)間
*************************************************************/
v_sqlstate := ' 開始 ' ;
pkg_rpt_system.sys_log(v_proc_name, v_sqlstate, 'OK' , null , null );
v_sqlstate := ' 刪除數(shù)據(jù) ' ;
delete t_landlord;
commit ;
v_sqlstate := ' 生成房東信息數(shù)據(jù) ' ;
insert into t_landlord
values
( '001' , ' 張強 ' , ' 男 ' , '13723870069' , '001' , '2010-03-12' );
commit ;
/************************************************************
結束區(qū)間
*************************************************************/
v_sqlstate := ' 結束 ' ;
pkg_rpt_system.sys_log(v_proc_name, v_sqlstate, 'OK' , null , null );
/************************************************************
異常區(qū)間
*************************************************************/
exception
when others then
rollback ;
pkg_rpt_system.sys_log(v_proc_name,
v_sqlstate,
'ERROR' ,
sqlcode ,
substr ( sqlerrm , 1 , 3000 ));
commit ;
end p_house_create_data;
end pkg_abc_create_data;