中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

13-oracle_數據庫存儲過程和包的開發

發布時間:2020-08-09 08:35:14 來源:ITPUB博客 閱讀:143 作者:blt32034 欄目:關系型數據庫

13-oracle_數據庫存儲過程和包的開發

一:存儲過程 ( 圖片左邊的 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;

 


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

诸城市| 汤阴县| 府谷县| 邵阳市| 金平| 米林县| 临汾市| 磴口县| 金乡县| 应城市| 聊城市| 昆山市| 庄浪县| 德格县| 汤阴县| 庆元县| 无锡市| 延边| 英山县| 上虞市| 甘德县| 章丘市| 临泉县| 金塔县| 南和县| 建瓯市| 梁山县| 宁明县| 云梦县| 泸溪县| 美姑县| 巨鹿县| 定结县| 班戈县| 高台县| 兴海县| 综艺| 丘北县| 晴隆县| 南平市| 邮箱|