2016-11-01 2 views
0

列の値を更新しようとしています。列のデータ型はNumberです。要件ごとに、右側のレコードについては、この列は000で更新されます。これを条件のElse部分に含めましたが、テーブルが更新されているときは000でなく0になります。提案してください。どうすれば000にすることができますか?oracleでnumber列の値を000に更新します。

MERGE INTO mem_src_extn t USING 
( 
SELECT mse.rowid row_id, 
     CASE WHEN mse.type_value IS NULL OR mse."TYPE" IS NULL OR mse.VALUE_1 IS NULL or mse.VALUE_2 IS NULL THEN 100 
      WHEN (SELECT count(*) FROM cmc_mem_src cms WHERE cms.tn_id = mse.type_value) = 0 THEN 222 
      WHEN count(mse.value_1) over (partition by type_value) > 1 THEN 333 
     ELSE 000 int_value_1 <-- here 
FROM mem_src_extn mse 
) u 
ON (t.rowid = u.row_id) 
WHEN MATCHED THEN UPDATE SET t.int_value_1 = u.int_value_1 

After Update :

+2

列のデータ型はnumberですか?はいの場合、その形式では保存できません。その列のデータをゼロで取り出すときには、000に置き換えます。 – Buddi

+2

数字はありません。それは文字列ですが、数字として0、000、および0.000はすべて同じ数字です(ゼロ)。 – mathguy

+2

数字の0は内部的に '0'として保存されます。 '000'を見たい場合は、プレゼンテーション層でこれを処理する必要があります。代わりに、あなたは_could_列のテキストを作ることができますが、これはいいです。 –

答えて

-1

あなたのコラムint_value_1はVARCHAR2使用の引用

MERGE INTO mem_src_extn t USING 
( 
SELECT mse.rowid row_id, 
     CASE WHEN mse.type_value IS NULL OR mse."TYPE" IS NULL OR mse.VALUE_1 IS NULL or mse.VALUE_2 IS NULL THEN '100' 
      WHEN (SELECT count(*) FROM cmc_mem_src cms WHERE cms.tn_id = mse.type_value) = 0 THEN '222' 
      WHEN count(mse.value_1) over (partition by type_value) > 1 THEN 
'333' 
     ELSE '000' int_value_1 
     END 
FROM mem_src_extn mse 
) u 
ON (t.rowid = u.row_id) 
WHEN MATCHED THEN UPDATE SET t.int_value_1 = u.int_value_1 

ですが、あなたが言うと好きなあなただけの0000 INSEADを見るために数を持っている場合は、TO_CHARを使用することができた場合書式文字列付き

select to_char(int_value_1,'099') from mem_src_extn; 
+0

OPに列のタイプがNUMBERと言っていた部分がありますか?そして、CASEステートメントの最後に必要な単語ENDはどこにありますか? – mathguy

+0

ありがとうございます@mathguy –

+0

あなたが最後に追加したのはOKですが、SELECTクエリに表示されているものではなく、データベースに格納されているものを非常にはっきりと示していました。 – mathguy

関連する問題