錯誤處理機制當在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...