首先,我需要让名为Mail_flag的列中的所有行都具有默认值“Y”。我已经用以下代码行完成了这个:
ALTER TABLE criminals
MODIFY (Mail_flag DEFAULT 'Y');
够容易。但是现在,我需要使所有没有街道地址的行(列名为“street”)的行具有默认值“N”。我假设代码类似于以下内容:
ALTER TABLE criminals
MODIFY (Mail_flag DEFAULT 'N')
WHERE street = null;
但是,我收到一条错误消息,上面写着“无效的更改表选项”。然后我尝试了一个更新命令,该命令也失败了。基本上,我需要两个默认值。一个是'Y',一个是'N',只有当某个条件适用时(条件是街道值为空)。请帮忙!我一直在努力奋斗2个小时。
答案 0 :(得分:1)
WHERE street = null;
那是错的。你不明白NULL值的含义。虽然你的修改声明即使你修复它也不会执行,但你不应该这样做,因为它是错误的。过滤行的正确方法是where column IS NULL
根据您的要求,请执行一次update
:
update criminals
Set mail_flag = 'N'
where street is null;
然后,只要发现旧值为null,就实现一个触发器来执行相同的更新。
我现在想到了另一个想法。为什么要更新列?那么,您可以在操作中使用值或显示,不是吗?因此,只要列为空,您就可以始终使用DECODE
和NVL
等函数返回值N
。
答案 1 :(得分:0)
@Tom McNish你必须知道另一件事default
值总是反映在你想要插入的新行上。我的意思是如果你没有将任何值传递给你设置为default
的特定列,它将替换默认值而不是null
因此,对于您现有的条件......您必须使用update
查询更新值....
> update table_name
> Set column_name = 'default_value'
> where column_name is null;