如何更改SQL中某些行的默认值?

时间:2014-09-25 02:51:10

标签: sql oracle oracle10g oracle-sqldeveloper

首先,我需要让名为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个小时。

2 个答案:

答案 0 :(得分:1)

  

WHERE street = null;

那是错的。你不明白NULL值的含义。虽然你的修改声明即使你修复它也不会执行,但你不应该这样做,因为它是错误的。过滤行的正确方法是where column IS NULL

根据您的要求,请执行一次update

update criminals
   Set mail_flag = 'N'
where street is null;

然后,只要发现旧值为null,就实现一个触发器来执行相同的更新。

我现在想到了另一个想法。为什么要更新列?那么,您可以在操作中使用值或显示,不是吗?因此,只要列为空,您就可以始终使用DECODENVL等函数返回值N

答案 1 :(得分:0)

@Tom McNish你必须知道另一件事default值总是反映在你想要插入的新行上。我的意思是如果你没有将任何值传递给你设置为default的特定列,它将替换默认值而不是null

  • 默认值不适用于已有某些数据或null的现有行。
  • 默认始终处理新插入的行。

因此,对于您现有的条件......您必须使用update查询更新值....

> update  table_name  
>       Set column_name = 'default_value' 
> where column_name is null;