DB2 SQL Error: SQLCODE=-302, SQLSTATE=22001, SQLERRMC=null


今天不得不吐槽下 DB2了,不過也不定是因為DB2,因為之前寫了一段sql語句能執行,但是最近發現又報錯,

錯誤代碼-302,很奇怪,在網上搜索了差不多一天都是說“sql中要更新的某個字段的長度超過了數據庫表中字段的定義長度”!

但是和這個也不沾邊啊,我寫的是查詢語句,既然這樣我就重新寫了sql語句,用了不同的函數達到同樣的需求,也沒想到,

真沒想到竟然成功了!!!

下面是我的部分sql語句:

select a.act_consume_qty,a.act_amount,b.output_qty,c.budget_consume_qty,c.budget_amount,d.budget_output_qty
		from (  select nvl(sum(act_consume_qty),0) as act_consume_qty,nvl(sum(act_amount),0) as act_amount
		from tmmicsalj01
		where (prod_unit = #prodUnit# or (#prodUnit# = '’ and prod_unit not like 'A%'))
		and prod_date BETWEEN  #dateTimeStart# AND #dateTimeEnd# ) a,

  以前where后

(prod_unit = #prodUnit# or (#prodUnit# = '' and prod_unit not like 'A%'))
		and prod_date BETWEEN  #dateTimeStart# AND #dateTimeEnd# 

的語句中#prodUnit# = ''當prodUnit=''時沒問題,但prodUnit不為空字符串時,就會報錯。

修改之后的語句:
select a.act_consume_qty,a.act_amount,b.output_qty,c.budget_consume_qty,c.budget_amount,d.budget_output_qty
		from (  select nvl(sum(act_consume_qty),0) as act_consume_qty,nvl(sum(act_amount),0) as act_amount
		from tmmicsalj01
		where (prod_unit = #prodUnit# or (LENGTH(TRIM(#prodUnit#)) = 0 and prod_unit not like 'A%'))
		AND(MAT_CODE = #rawProdCode# OR (LENGTH(TRIM(#rawProdCode#)) = 0 AND MAT_CODE LIKE 'C%'))
		and prod_date BETWEEN  #dateTimeStart# AND #dateTimeEnd# ) a,

  把#prodUnit# = ' '換成prod_unit = #prodUnit# or (LENGTH(TRIM(#prodUnit#)) = 0 and prod_unit not like 'A%')就沒任何問題了!

雖然是解決了問題,但還是沒弄明白是什么原因導致這個問題發生的,還是掌握的知識太少啊。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM