狀態捕獲及錯誤處理機制

2022-09-21 02:39:08 字數 1974 閱讀 8619

解決問題:宿主程式如何知道sql語句的執行狀態,是否發生錯誤 

1. 狀態捕獲及其處理

(1)狀態:嵌入式sql語句的執行狀態,尤指出錯狀態,有時程式需要知道這些狀態並進行處理

(2)嵌入式sql程式狀態捕獲的構成

1)設定sql通訊區:一般在嵌入式sql程式的開始處便設定

exec sql include sqlca;

2)設定狀態捕獲語句:在嵌入式sql程式的多處可任意多次設定,但有作用域

exec sql whenever sqlerror got report_error;

3)狀態處理語句:某一段程式以應對sql操作的某種狀態

report_error: exec sql rollback;  也可以是乙個函式

2.sqlca

(1)sqlca是乙個已經被宣告過的具c語言的結構形式的記憶體資訊區,其中的成員變數用來記錄sql語句執行的狀態,便於宿主程式讀取和處理

(2)sqlca是dbms(執行sql語句)與宿主程式之間交流的橋梁之一

3.狀態捕獲語句

(1)exec sql whenever condition action;  //滿足條件condition,執行動作action

(2)作用範圍:該條語句會對後面的所有 exec sql 語句所引起的對資料庫系統的呼叫自動檢查他是否滿足條件condition,直到程式**現另一條相同條件的whenever語句為止,後面的將覆蓋前面的

(3)幾種狀態條件

1)sqlerror:檢測是否有sql語句出錯,其具體意義依賴於特定的dbms

2)not found:執行某一語句後,沒有結果記錄出現

3)sqlwarning:不是錯誤,一種警告

(4)幾種動作

1)continue:忽略錯誤,繼續執行

2)goto 標記:轉移到標號所指示的語句,去進行相應的處理

3)stop:終止程式執行,撤銷當前工作,斷開與資料庫的連線

4)do函式或call函式:呼叫宿主程式的函式進行處理,函式返回後從引發該 condition 的exec sql 語句之後的語句繼續執行

//總共有十二種組合方式

(5)狀態捕獲語句容易導致無限迴圈,在「 goto 標記:」指示語句的第一行加入:exec sql whenever sqlerror continue;

4.狀態資訊

(1)典型dbms系統記錄狀態資訊的三種方法

1)sqlcode:典型dbms都提供乙個sqlcode變數來記錄其執行sql語句的狀態,但不同的dbms定義的sql值所代表的狀態意義可能是不同的,需要查閱對應dbms手冊和資料來確定其含義

2)sqlca.sqlcode:支援sqlca 的產品一般要在sqlca中填寫sqlcode來記錄上述資訊;除此之外,sqlca還有其他狀態資訊的記錄

3)sqlstate:有些dbms提供的記錄狀態資訊的變數是sqlstate 或 sqlca.sqlstate

(2)隱式狀態處理:不需要知道錯誤型別,用錯誤捕獲語句處理即可,無需關心狀態記錄變數

(3)顯示狀態處理:不僅要知道不同的狀態資訊,還要知道正確的操作方法

5.顯示狀態處理示例

exec sql begin declare section;

char sqlstate[6];

exec sql end declare section;

exec sql whenever sqlerror goto handle_error;

... ...

exec sql whenever sqlerror continue;  //當發生錯誤時,程式繼續執行,使得 if 語句不受上面語句的影響

exec sql create table custs

(cid char(4) not null, cname varchar(13), ... ...);

if(strcmp(sqlstate, "82100") == 0)

《處理82100錯誤的程式》

... ...

錯誤處理機制

一直想對公司的錯誤處理機制進行思考和改進,今天查到如下乙個的答覆,很全面,特轉到這裡 錯誤處理機制一般都是自己定義的,在乙個團隊內部自行設定統一的錯誤處理模式。你可以考慮下面三種 1 錯誤發生即處理 也就是錯誤出現在 就在那裡及時處理,而不進行 或者其他操作。2 集中錯誤處理 錯誤發生後統一 到某乙...

錯誤處理機制

2020 11 05 16 55 14 三個屬性 name 錯誤名字 message 錯誤資訊提示 stack 錯誤堆疊 使用 名字 屬性 a.message 下面 syntaxerror物件 語法錯誤 referenceerror物件 引用了不存在變數 rangeerror物件 值超出有效範圍 t...

Spring Boot錯誤處理機制

摘要 1 springboot預設的錯誤處理機制 預設效果 1 瀏覽器,返回乙個預設的錯誤頁面 瀏覽器傳送請求的請求頭 2 如果是其他客戶端,預設響應乙個json資料 原理 可以參照errormvcautoconfiguration 錯誤處理的自動配置 給容器中.預設效果 1 瀏覽器,返回乙個預設的...