您好,登錄后才能下訂單哦!
一:存儲過程 ( 圖片左邊的 procedure 目錄 ) :
在數據庫的實際開發過程中,我們不可能每個腳本用人工的方式執行,需要自動的批量提交腳本到數據庫執行,數據庫就提供了像存儲過程這樣的對象,方便開發人員把處理某個功能或報表的邏輯寫到存儲過程里。
1) 存儲過程的優點:
a. 執行速度更快:在數據庫中保存的存儲過程語句都是編譯過的
b. 允許模塊化程序設計和可移植性更強:類似方法的復用(使用存儲過程可以實現存儲過程設計和編碼工作的分開進行,只要將存儲過程名、參數、返回信息等告訴編程人員即可);
c. 提高系統安全性:防止 SQL 注入 (執行存儲過程的用戶要具有一定的權限才能使用存儲過程)
d. 減少網絡流通量:只要傳輸存儲過程的名稱(在大批數據查詢時使用存儲過程分頁查詢比其他方式的分頁要快很多)
e. 在同時進行逐主、從表間的數據維護及有效性驗證時,使用存儲過程更加方便,可以有效的利用 SQL 中的事務處理機制。
創建存儲
2) 創建語法:
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 : 生成數據過程
parameter value
p_fm_dt 2018-08-01( 昨天 )
p_to_dt 2018-08-02( 當日 )
*************************************************************/
/************************************************************
定義區間
*************************************************************/
v_sqlstate varchar2 ( 500 );
v_proc_name varchar2 ( 64 ) := 'p_house_create_data' ;
v_fm_dt date ;
v_to_dt date ;
begin
/************************************************************
賦值區間
*************************************************************/
v_sqlstate := ' 賦值 ' ;
v_fm_dt := trunc (p_fm_dt, 'DD' );
v_to_dt := trunc (p_to_dt, 'DD' );
/************************************************************
計算區間
*************************************************************/
v_sqlstate := ' 開始 ' ;
pkg_rpt_system.sys_log(v_proc_name, v_sqlstate, 'OK' , null , null ); -- 寫日志
v_sqlstate := ' 刪除數據 ' ;
delete t_landlord;
commit ;
v_sqlstate := ' 生成房東信息數據 ' ;
insert into t_landlord
values
( '001' , ' 張強 ' , ' 男 ' , '13723870069' , '001' , '2010-03-12' );
commit ;
/************************************************************
結束區間
*************************************************************/
v_sqlstate := ' 結束 ' ;
pkg_rpt_system.sys_log(v_proc_name, v_sqlstate, 'OK' , null , null ); -- 寫日志
/************************************************************
異常區間
*************************************************************/
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;
二:包 ( 圖片左邊的 package bodies 目錄 ) :
其實包可以理解為是對存儲過程和函數的方便管理,如果過程和函數多了,不方便查找,比較亂,哪么我們可以把相關的過程放在一起,或把業務邏輯相關的放在一起維護。
1) 包的構成:
a. 包頭:是對包里的過程和函數的一個定義,相關于目錄
b. 包體:是對包里的過程和函數的實現,具體代碼的邏輯實現。
2) 創建語法:
-- 包頭
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 : 生成數據過程
parameter value
p_fm_dt 2018-08-01( 昨天 )
p_to_dt 2018-08-02( 當日 )
*************************************************************/
/************************************************************
定義區間
*************************************************************/
v_sqlstate varchar2 ( 500 );
v_proc_name varchar2 ( 64 ) := 'p_house_create_data' ;
v_fm_dt date ;
v_to_dt date ;
begin
/************************************************************
賦值區間
*************************************************************/
v_sqlstate := ' 賦值 ' ;
v_fm_dt := trunc (p_fm_dt, 'DD' );
v_to_dt := trunc (p_to_dt, 'DD' );
/************************************************************
計算區間
*************************************************************/
v_sqlstate := ' 開始 ' ;
pkg_rpt_system.sys_log(v_proc_name, v_sqlstate, 'OK' , null , null );
v_sqlstate := ' 刪除數據 ' ;
delete t_landlord;
commit ;
v_sqlstate := ' 生成房東信息數據 ' ;
insert into t_landlord
values
( '001' , ' 張強 ' , ' 男 ' , '13723870069' , '001' , '2010-03-12' );
commit ;
/************************************************************
結束區間
*************************************************************/
v_sqlstate := ' 結束 ' ;
pkg_rpt_system.sys_log(v_proc_name, v_sqlstate, 'OK' , null , null );
/************************************************************
異常區間
*************************************************************/
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;
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。