2016-12-21 42 views
0

私はこのクエリ文字列データの右側が切り捨てDB2エラー

SELECT BILL_NUMBER, 'PAPERWORK BUT NOT COMPLETE', 'NONE', NULL, '00000',NULL,NULL,TOTAL_CHARGES, NULL FROM TLORDER WHERE 
CURRENT_STATUS NOT IN ('COMPLETE','APPRVD','PAPERWISE','BILLD','EDIBILLED','CANCL') AND BILL_TO_CODE NOT LIKE CASE WHEN :INCLUDE_DED = 'No' THEN 'ROCD%' ELSE '1234kkh5656' END 
AND EXISTS (SELECT 1 FROM LIST_CHECKIN_AUDIT A WHERE A.BILL_NUMBER = TLORDER.BILL_NUMBER FETCH FIRST 1 ROW ONLY) 
AND SITE_ID = :SITE AND DELIVER_BY_END >= CURRENT TIMESTAMP - 3 MONTHS AND COALESCE(PICK_UP_DRIVER,'') = '' AND '00000' =:DRIVER_ID 

を使用する場合、私は、DB2のエラー「文字列データの右側が切り捨て」を受けていますしかし、私はエラーを得ることはありません。

AND BILL_TO_CODE NOT LIKE CASE WHEN :INCLUDE_DED = 'No' THEN 'ROCD%' ELSE '1234kkh5656' END 

ありがとうございます!

+0

なぜ変数に "case"を渡してプログラムに渡すのですか?同じような内容のプログラムに直接変数( "if"を含む)を構築しないと、もっと強力になります。また、 "fis fisrt"を取り除くこともできます。 "有り"にすると無駄です – Esperento57

答えて

2

ホスト変数:INCLUDE_DEDの値が2バイトを超えると、これが起こると思います。可変データ型を指定しないので、クエリコンパイラは比較の右側からそれを派生させます。ここでは、リテラル'No'の長さは2バイトです。 'Yes'のような値をホスト変数に割り当てると、ホスト変数は切り捨てられなければなりません。

は、ホスト変数参照に明示的な型情報、例えば:

...WHEN CAST(:INCLUDE_DED AS VARCHAR(10)) = 'No'... 

使用可能な値の範囲のための適切なデータ・タイプを追加することを検討してください。

+0

これは本当にありがとうございました。 – OVO

0

まず、bill_to_codeのデータ型をチェックします。データ型の長さを超える可能性のある「1234kkh5656」を返しています。

+0

こんにちはAndrew、私はそれを疑って、フィールド長が戻り値を満たしていることを確認しました。 – OVO

関連する問題