• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      談談Oracle數(shù)據庫異常處理

      2017-01-30 06:42:57
      山西青年 2017年17期
      關鍵詞:數(shù)據庫系統(tǒng)語句邏輯

      畢 桂 徐 霖

      無錫工藝職業(yè)技術學院,江蘇 宜興 214206

      談談Oracle數(shù)據庫異常處理

      畢 桂 徐 霖

      無錫工藝職業(yè)技術學院,江蘇 宜興 214206

      進行Oracle數(shù)據庫開發(fā)中,在程序的運行過程中,可能會因為各種原因發(fā)生這樣或那樣的錯誤,就需要針對錯誤進行處理,異常處理就是這樣的一段程序。有了異常處理就可以提高我們的程序代碼質量,一個好的程序都必含有能夠處理發(fā)生的任何錯誤。PL/SQL用異常和異常處理器來實現(xiàn)錯誤處理,它的異常處理機制提供了能夠處理前面未處理異常的功能。

      Oracle數(shù)據庫;程序代碼;異常處理;PL/SQL

      一、異常的定義和分類

      Oracle中出現(xiàn)錯誤的情形通常分為程序在編譯時錯誤(compile-time error)和程序在運行時錯誤(run-timeerror)。一個程序在處理運行時出現(xiàn)錯誤,這是異常處理,一個程序在編譯時的錯誤,并不是異常處理,我們這里所說的異常處理是指程序通過編譯沒有錯誤,而是在程序運行中出現(xiàn)的錯誤。當程序在運行時發(fā)生錯誤,異常被觸發(fā),程序的正常執(zhí)行過程被終止,程序無條件轉到異常處理部分,在Oracle數(shù)據庫允許聲明其他異常條件類型以擴展錯誤/異常處理,有了這樣的擴展使PL/SQL的異常處理非常靈活。在Oracle數(shù)據庫中,PL/SQL將異常分為預定義異常和用戶定義異常。

      (一)預定義異常

      Oracle數(shù)據庫自身為用戶提供了大量的、可以在PL/SQL中使用的預定以異常,方便用戶檢查代碼失敗的一般原因,它們都定義在Oracle的核心PL/SQL中。每當PL/SQL違背了Oracle原則或超越了系統(tǒng)依賴的原則時就會隱式的產生內部異常。每個Oracle錯誤都有一個號碼,在PL/SQL中通過名字處理預定義異常,PL/SQL為一些Oracle公共錯誤進行了預定義。如SELECT INTO語句返回多行數(shù)據時,PL/SQL就會觸發(fā)預定義異常TOO_MANY_ROWS。

      (二)自定義異常

      用戶自定義異常不一定必須是Oracle返回的系統(tǒng)錯誤,這些錯誤Oracle數(shù)據庫本身無法知曉,也不能控制。用戶可以在自己的應用程序中創(chuàng)建可觸發(fā)及可處理的自定義異常,和預定義異常不同的是,用戶定義的異常,系統(tǒng)不會自動觸發(fā)(這種異常對系統(tǒng)來說不一定是錯誤),需要用戶來觸發(fā)異常,另外用戶定義的異常,需要在聲明部分定義。用戶定義的異常處理部分基本上和預定義異常相同。

      二、自定義異常

      Oracle數(shù)據庫內部預定義異常僅僅20個左右,而在實際程序運行過程中產生的異常情況就會很多,為此Oracle數(shù)據庫經常使用錯誤編號和相關描述給出異常信息。數(shù)據庫設計人員常常會根據實際的業(yè)務邏輯情況定義一些特殊異常。Oracle數(shù)據庫的自定義異常可以分為錯誤編號異常和業(yè)務邏輯異常。

      (一)錯誤編號異常

      錯誤編號異常是指Oracle數(shù)據庫系統(tǒng)發(fā)生錯誤時,系統(tǒng)就會顯示出錯誤編號和相關信息的異常。用戶可以根據錯誤編號來完成異常處理,由于錯誤編號比較抽象,不便于用戶理解和記憶。對于這種類型的異常,首先在Oracle數(shù)據中PL/SQL塊的聲明部分使用EXCEPTION類型定義一個異常變量名,然后使用語句PRAGMA EXCEPTION _INIT為“錯誤編號”關聯(lián)這個異常變量名,最后可以像對待Oracle數(shù)據庫系統(tǒng)預定義異常一樣處理了。我們通過一個實例,來說明一下,我們錯誤編號異常的使用。假設我們在Oracle數(shù)據庫中已經創(chuàng)建了一個表單,名為student(編號(id),姓名(name),性別(sex))

      declare

      primary_id exception;——定義一個異常變量

      pragma exception_init(primary_id,-00001);——關聯(lián)錯誤號和異常變量名

      begin

      insert into student values(2,'張三','男');——向student表中插入一條與已有主鍵值重復的記錄,以便引發(fā)異常

      exception

      when primary_id then ——若oracle捕獲到的異常為-00001異常

      dbms_output.put_line('主鍵已存在,不允許重復!');——輸出異常描述信息

      end;

      通過運行結果可以看到,使用異常處理機制可以預防Oracle數(shù)據庫系統(tǒng)因為引發(fā)異常而導致程序崩潰的作用,它可以讓我們書寫的程序有機會進行自動檢測和修改錯誤。從上面的例子可以看出自定義異常比較容易理解和記憶,也方便數(shù)據庫人員使用。

      (二)業(yè)務邏輯異常

      在數(shù)據庫的實際開發(fā)過程中,數(shù)據庫開發(fā)人員有時會根據開發(fā)對象的業(yè)務邏輯情況自己定義一個異常,通過這種方法來提醒數(shù)據庫開發(fā)人員操作違反業(yè)務邏輯規(guī)則,從而引發(fā)自己定義的異常,中斷程序的運行來進行自定義異常的處理。業(yè)務邏輯異常首先是需要在DECLARE進行聲明一個異常變量;然后在BEGIN過程中先給出需要的業(yè)務邏輯規(guī)則再執(zhí)行RAISE語句;最后在EXCEPTION中進行編寫對異常進行處理的程序語句。下面我們通過一個實例來看看如何定義和引發(fā)業(yè)務邏輯異常:

      declare

      null_exception exception;——聲明一個異常變量

      S student %rowtype;

      begin

      S.id:=3;——ID是主鍵進行賦值,

      insert into student values(S.id,S.name,S.sex);——向student表中插入一條記錄

      if S.name is null then ——判斷表的name的值是否為空

      raise null_exception;——引發(fā)異常,進行異常處理

      end if;

      exception

      when null_exception then

      dbms_output.put_line('name不可以為空');——當引發(fā)異常時,輸出異常信息

      rollback;

      end;

      通過運行結果可以看到,業(yè)務邏輯異常定義成功。程序就可以進行檢測我們向數(shù)據庫表單STUDENT中插入數(shù)據時是否存在學生NAME為空的情況了。

      總的來看,在一段沒有語法錯誤的程序代碼中,因為出現(xiàn)了不太“合格”數(shù)據而導致程序無法運行。我們希望提高自己的代碼質量,使得我們的程序更加健壯,我們對程序做了異常處理。從上面的異常處理過程中,我們可以看出:對于預定義異常和錯誤編號異常是由我們Oracle數(shù)據庫系統(tǒng)判斷的,但是對于業(yè)務邏輯異常,我們Oracle數(shù)據庫系統(tǒng)本身就無法知道了,通常我們是通過一個引發(fā)異常的機制(RAISE語句)來完成,從而可以實現(xiàn)對業(yè)務邏輯規(guī)則的判斷。

      [1]劉竹林.數(shù)據庫設計與Oracle數(shù)據庫應用教程.清華大學出版社,北京大學出版,2009.

      [2]張曉林,吳斌,晁陽.Oracle數(shù)據庫開發(fā)基礎教程.清華大學出版社,2009.

      [3]趙宇蘭.Oracle數(shù)據庫應用技術.合肥工業(yè)大學出版社,2014.

      TP

      A

      1006-0049-(2017)17-0187-01

      猜你喜歡
      數(shù)據庫系統(tǒng)語句邏輯
      刑事印證證明準確達成的邏輯反思
      法律方法(2022年2期)2022-10-20 06:44:24
      邏輯
      創(chuàng)新的邏輯
      重點:語句銜接
      數(shù)據庫系統(tǒng)shell腳本應用
      電子測試(2018年14期)2018-09-26 06:04:24
      精彩語句
      女人買買買的神邏輯
      37°女人(2017年11期)2017-11-14 20:27:40
      微細銑削工藝數(shù)據庫系統(tǒng)設計與開發(fā)
      實時數(shù)據庫系統(tǒng)數(shù)據安全采集方案
      電信科學(2016年10期)2016-11-23 05:12:00
      核反應堆材料數(shù)據庫系統(tǒng)及其應用
      衢州市| 营口市| 灵寿县| 扶绥县| 达拉特旗| 甘谷县| 莱芜市| 怀仁县| 衡山县| 阿拉善盟| 龙游县| 海兴县| 乌兰浩特市| 胶州市| 临沭县| 宽甸| 通渭县| 东宁县| 陈巴尔虎旗| 平邑县| 静乐县| 花莲县| 雷山县| 瑞安市| 且末县| 新津县| 新建县| 达拉特旗| 石屏县| 界首市| 农安县| 彝良县| 固镇县| 自贡市| 尚志市| 丰都县| 元谋县| 喜德县| 玉田县| 新干县| 全州县|