資料庫 proc程式設計四

2021-09-08 12:22:57 字數 2865 閱讀 9150

錯誤處理機制

當在pro*c/c++應用程式中執行sql語句中,oracle會將最近執行的sql語句的狀態資訊儲存到狀態變數sqlcode、sqlstate或者sqlca結構中。

當sql語句執行成功時,一般情況下不需要進行任何其他處理;當sql語句執行失敗時,應用程式應該能夠檢測到失敗資訊,並進行適當的處理,

以加強應用程式的健壯性。在編寫pro*c/c++應用程式時,通過使用whenever語句可以檢測並處理sql錯誤,語法如下:

exec sql whenever

其中condition用於指定要檢測的條件,action使用者指定滿足特定條件時要執行的操作。

1.條件

--sqlwarning:用於檢測oracle警告。當檢測到該條件時,sqlca.sqlwarn[0

]會被設定為w。注意:當使用該條件時,必須定義sqlca結構。

--sqlerror:用於檢測oracle錯誤。當檢測到該條件時,sqlca.sqlcode或者sqlcode會被設定為負值。

--not found:使用者檢測select或者fetch操作未檢索到行的情況。當mode=oracle時,如果不能找到滿足條件的行,

則sqlca.sqlcode會被設定為+1403;當mode=ansi時,sqlcode會被設定為+100,

預設選項是mode=oracle,可以在proc命令列引數中修改配置。

2.操作

--do:執行錯誤處理函式

--goto label_name:轉移到標號處執行。

--stop:回退事務,停止執行。

錯誤處理方法一

if(sqlca.sqlcode!=0

)

#define _crt_secure_no_warnings#include 

#include

#include

#include

"sqlca.h

"//exec sql include sqlca;可以用來代替#include "sqlca.h"

exec sql begin declare section;

char *serverid="

scott/12356@orcl";

intdeptid;

char edname[32

];

char edloc[32

];exec sql end declare section;

void

main()

else

}

錯誤處理方法二

exec sql whenever sqlerror do sqlerr();

#define _crt_secure_no_warnings#include 

#include

#include

#include

"sqlca.h

"exec sql begin declare section;

char *serverid="

scott/123456@orcl";

intdeptid;

char edname[32

];

char edloc[32

];exec sql end declare section;

//錯誤處理函式

void

sqlerr()

void

main()

錯誤處理方法三

exec sql whenever sqlerror continue;

#define _crt_secure_no_warnings#include 

#include

#include

#include

"sqlca.h

"exec sql begin declare section;

char *serverid="

scott/12345@orcl";

intdeptid;

char edname[32

];

char edloc[32

];exec sql end declare section;

//錯誤處理公升級函式

void

sqlerr()

void

main()

#define _crt_secure_no_warnings#include 

#include

#include

#include

"sqlca.h

"exec sql begin declare section;

char *serverid="

scott/1234456@orcl";

intdeptid;

char edname[32

];

char edloc[32

];exec sql end declare section;

//錯誤處理公升級函式

void

sqlerr()

printf(

"出錯的sql語句是:%.*s\r\n

",stmlen,stn);

printf(

"err reason:%.*s\r\n

",sqlca.sqlerrm.sqlerrml,sqlca.sqlerrm.sqlerrmc);

exec sql rollback work release;

}void

main()

資料庫(proc程式設計)

1 proc是什麼?proc是oracle用來預編譯嵌入sql語句的c程式。下圖展示了proc c c 程式的編寫 編譯流程。根據上圖可以看出proc只是預編譯一下源程式,即把 pc預編譯成標準的c或c 程式。2 怎樣編譯 鏈結 pc應用程式?本文以linux環境為例,首先要保證c c 的編譯器 g...

資料庫 Proc程式設計一

proc程式設計 嵌入式sql sql寫入到c語言程式中 proc程式設計標頭檔案路徑 11.2.0 dbhome 1 precomp public proc程式設計要注意proc編譯器也會使用gcc編譯器中的標頭檔案,所以需要在proc編譯器中進行配置,加上系統的標頭檔案路徑 11.2.0 dbh...

資料庫 proc程式設計五

define crt secure no warnings include include include include sqlca.h 注意 在oracle中,如果使用char定長型別,那麼資料庫中的資料如果不足20,那麼oracle預設以空格填充 varchar是變長型別,不足20,oracl...