proc中的null值的處理
如果某一字段取出的值是null,會報:sqlcode=-1405, sqlerr=ora-01405: 讀取的列值為 null
並且相應的宿主變數的值不會被改變,為執行該sql語句之前的值. 常用的處理null值的方法有:
(1)採用指示器變數,此時不會有-1405錯誤,當必須是所以為null的字段都有相應的指示器變數,如果某一字段沒有指示器變數,但取出的值
為null值,則仍然會有-1405錯誤.當取出的值是null時,相應的指示器變數變數為-1,可根據指示器變數的值做響應的處理。
(2)如果欄位較多,可取欄位到乙個結構體中及與該結構體對應的指示器結構體中.如上面的例子中可定義結構體:
struct str_emp;
struct str_emp_ind;
struct str_emp str_emp;
strcut str_emp_ind str_emp_ind;
在取之前可用memset(&str_emp,0,sizeof(str_emp)).清空該結構體,這樣如果是字元型的null,會為"",整型的null會為0,
浮點型的會為0.00。此時不會有-1405錯誤。
(3)也可採用nvl()函式:舉例如下:
exec sql declare authors cursor for
select empno, nvl(ename,chr(0)),nvl(to_char(hiredate,'yyyy/mm/dd hh24:mi:ss'),chr(0)),nvl(sal,0) from emp;
這樣也不會有-1405錯誤不,當取出的值是null時,自動用nvl()中指定的值代替.
chr(0)也可直接用''代替,如下:
select empno, nvl(ename,''),nvl(to_char(hiredate,'yyyy/mm/dd hh24:mi:ss'),''),nvl(sal,0) from emp;5、proc中的錯誤的處理
所有的sql語句都有可能出錯.所以都要加以判斷,但每個sql語句後都加錯誤判斷,太麻煩,可用乙個函式如sql_error()來進行錯誤處理,
方法:
(1)定義ql_error()函式。
(2)在開頭加上exec sql whenever sqlerror do sql_error();這樣當發生sqlca.sqlcode <0 的錯誤時,程式自動轉到sql_error()中執行. 注意:對sqlca.sqlcode >0的錯誤如 sqlca.sqlcode =1403 是不會轉到sql_error()中執行的.
另外:在unix下,可以用oerr 來查詢錯誤的描述。如: ora ora -1405 查詢錯誤號為-1405的描述.
no result defined 錯誤解決方法
因為從網上找的方法,所以action裡面還帶著validata,導致在測試的時候隨便輸值或者直接不輸入值的時候會被validata方法檢測出來,然後轉到addfielderror方法,然後由於struts的機制,程式不是去找error對應的介面,而是去到了input對應的介面。而在struts.xm...
django post請求 403錯誤解決方法
第一次用django做專案,遇到了很多問題。今天遇到的問題是django在處理post請求時多次出現403錯誤,我弄了好久才把問題解決。我先描述一下問題出現的環境 我用django寫了乙個web服務端,姑且稱它為api吧。我在實際測試中發現,通過get方式可以從api中獲得資料,但是post方式卻無...
oracle 錯誤解決ORA 12505
sql plu可以連線,但是使用jdbc連線oracle的時候報資料庫的錯誤ora 12505 監聽程式當前無法識別連線描述符中所給出的sid 這個是由於oracle的service name 和sid name不一致,而pl sql developer和sqlplus 採用service name...