在oracle中将数字列值更新为000

在oracle中将数字列值更新为000,oracle,Oracle,我正在尝试更新列值。列数据类型为Number。根据要求,对于正确的记录,此栏将更新为000。我已经在条件的Else部分包含了这一点,但是当表被更新时,它只需要0而不是000。请建议。我怎样才能把它变成1000 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

我正在尝试更新列值。列数据类型为Number。根据要求,对于正确的记录,此栏将更新为000。我已经在条件的Else部分包含了这一点,但是当表被更新时,它只需要0而不是000。请建议。我怎样才能把它变成1000

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

如果列int_值为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
但是,如果你有一个数字,正如你所说的,只想看到0的insead的000 您可以使用将字符与格式字符串一起使用

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

列数据类型为number?。如果是,则不能以该格式存储。从该列中检索零的数据时,将其替换为000。没有数字000。这是一个字符串,但作为数字,0,000和0.000都是相同的数字:零。作为数字的零在内部存储为0。如果您想看到000,则必须在表示层中处理此问题。作为替代方案,您可以将列设置为文本,但这并不好。另外,您缺少CASE语句末尾的强制关键字END。因此,您发布的代码不会在任何表中插入任何内容;想解释一下吗?你看到OP上写的列类型是数字的部分了吗?在CASE语句的末尾,所需的单词END在哪里?谢谢@mathguy您在底部添加的内容是可以的,但与问题无关,问题非常清楚地涉及数据库中存储的内容,而不是SELECT查询中显示的内容。