要想檢測從
postgres 伺服器來得錯誤,你要包含如下一行
exec sql include sqlca;到你的檔案的包含段裡.這樣做將會定義乙個結構和乙個象下面一樣名為
sqlca
的變數:
struct sqlca如果最後乙個sqlerrm;
char sqlerrp[8];
long sqlerrd[6];
/* 0: empty */
/* 2: number of rows processed in an insert, update */
/* or delete statement */
/* 3: empty */
/* 4: empty */
/* 5: empty */
char sqlwarn[8];
/* 0: set to 'w' if at least one other is 'w' */
/* 1: if 'w' at least one character string */
/* value was truncated when it was */
/* stored into a host variable. */
/* 2: empty */
/* 3: empty */
/* 4: empty */
/* 5: empty */
/* 6: empty */
/* 7: empty */
char sqlext[8];
} sqlca;
sql 語句發生了錯誤,那麼
sqlca.sqlcode
將是非零值.如果
sqlca.sqlcode
小於 0 那麼就是發生了某種嚴重的錯誤,象資料庫定義與查詢定義不一致等.如果大於 0 則是通常的錯誤,象表不包括所要求的行等.
sqlca.sqlerrm.sqlerrmc 將包含乙個字串描述該錯誤.該字串以原始檔的行號結尾。
可能發生的錯誤列表:
-12, out of memory in line %d.
通常不出現這個錯誤。這是你的虛擬記憶體耗盡的標誌。
-200, unsupported type %s on line %d.
通常不出現這個錯誤.這表明預編譯器生成了一些庫(函式)不認得的東西.可能你執行的預編譯器和當前庫不相容.
-201, too many arguments line %d.
這意味著
postgres 返回了比我們的匹配變數更多的引數.可能你漏了幾個into :var1,:var2-列表裡的宿主變數.
-202, too few arguments line %d.
這意味著
postgres 返回了比我們的對應宿主變數要少的引數.可能你多輸入了幾個into :var1,:var2-列表裡的宿主變數.
-203, too many matches line %d.
這意味著查詢返回了多個行,但你宣告的變數不是陣列.你執行的select可能不是唯一的.
-204, not correctly formatted int type: %s line %d.
這意味著宿主變數是乙個
int 型別並且
postgres 資料庫裡的字段是另一種型別,包含著乙個不能轉換成乙個
int 型別的數值.庫(函式)使用
strtol 做此類轉換.
-205, not correctly formatted unsigned type: %s line %d.
這意味著宿主變數是乙個
unsigned int(無符號整數)型別而
postgres 資料庫裡的字段是另外一種型別並且包含乙個不能轉換成
unsigned int 的數值.庫(函式)使用
strtoul 做這類轉換.
-206, not correctly formatted floating point type: %s line %d.
這意味著宿主變數是乙個
float (浮點)型別而
postgres 資料庫裡的字段是另外一種型別並且包含乙個不能轉換成
float 的數值.庫(函式)使用
strtod 做這類轉換.
-207, unable to convert %s to bool on line %d.
這意味著宿主變數是乙個
bool (布林)型別,而
postgres 資料庫裡的字段值既不是 't' 也不是 'f'。
-208, empty query line %d.
postgres 返回 pgres_empty_query,可能的原因是該查詢實際上是空的。
-220, no such connection %s in line %d.
程式試圖訪問乙個不存在的聯接。
-221, not connected in line %d.
程式試圖訪問乙個存在的,但是沒有開啟的聯接。
-230, invalid statement name %s in line %d.
你試圖使用的語句還沒準備好。
-400, postgres error: %s line %d.
某種
postgres 錯誤。該訊息包含來自
postgres 後端的資訊。
-401, error in transaction processing line %d.
postgres 給我們的訊號,表明我們無法開始,提交或者回卷該事務。
-402, connect: could not open database %s.
與資料庫的聯接無法工作。
100, data not found line %d.
這是乙個"正常的"錯誤,告訴你你正在查詢的東西找不到或者我們已經越過了游標的範圍。
關於shell中的pl sql指令碼錯誤排查與分析
今天有個同事問我乙個問題,他說執行shell指令碼的時候丟擲了ora 錯誤,但是對於錯誤的原因沒有思路,想讓我幫他看看。我檢視了下,指令碼的結構比較清晰。指令碼是有乙個shell指令碼,乙個sql檔案組成,shell指令碼作為基本的流程控制,sql檔案中是pl sql指令碼。大體明白了shell指令...
PLSQL錯誤總結
1 is null為true,和null是同乙個東西。神經病寫法 無論vc itemids是null還是 or後面的那一句都為false,判空只能使用is null 或者 is not null。下面的vc itemids只需要前面的判空就可以了。分析 2.低效的子查詢 神經病寫法 子查詢並沒有用到...
PLSQL的迴圈控制
1.if declare v count number 10 0 定義計數器變數 v empno number 4 7888 定義員工編號 begin select count 1 首先查詢指定的員工編號是否存在 into v count from emp where empno v empno 使...