2014-09-25 48 views
0

拳头,我需要使所有名为Mail_flag的列中的行具有默认值'Y'。我已经用下面这行代码做了这个:如何更改SQL中某些行的默认值?

ALTER TABLE criminals 
    MODIFY (Mail_flag DEFAULT 'Y'); 

够简单。但现在,我需要让所有没有街道地址的行(列名称为“street”)的默认值为'N'。我以为代码想类似以下内容:

ALTER TABLE criminals 
    MODIFY (Mail_flag DEFAULT 'N') 
    WHERE street = null; 

不过,我收到这说的错误消息“无效的ALTER TABLE选项。”然后我尝试了更新命令,这也失败了。基本上,我需要两个默认值。一个是'Y',另一个是'N',只有当某个条件适用时(条件是街道值为空)。请帮忙!我一直在挣扎2个小时。

+1

可能重复使用触发器?](http://stackoverflow.com/questions/6857715/how-to-set-a-conditional-default-value-to-a-column-in-oracle-without-using-trigg) – radar 2014-09-25 02:55:30

+0

我认为我的问题实际上比您作为重复引用的问题简单得多。该问题的解决方案是使用触发器,但我的课程中甚至没有学习触发器,所以我需要一个不同的解决方案。谢谢你试图保持这个网站免费,但:) :) – 2014-09-25 03:06:05

回答

1

WHERE street = null;

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

对于您的要求,做了一次update

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

然后,执行触发器做同样的更新,每当发现老一个空值。

我现在有另一个想法。为什么你想要更新专栏?因此,您可以在操作中使用这些值或进行显示,不是吗?因此,每当列为空时,您总是可以使用像DECODENVL这样的函数返回值N

+0

嗯,这是学校,我们正在创建一个城市监狱的数据库。我还不知道有关触发器或功能的任何信息。但据我可以告诉大家,这项工作是更新列,以便谁有街道地址会被自动标记罪犯接受他们的听力日期的邮件更新,量刑等。而谁没有邮寄地址赢得罪犯不会收到信息,因为这会浪费时间和金钱。 – 2014-09-25 13:35:23

+0

希望你有你的解决方案。将来,您可以开始阅读关于触发器和函数以及其他“数据库概念”的内容。 – 2014-09-25 14:03:21

0

@Tom McNish您必须知道另一件事default值总是反映在您尝试插入的新行上。我的意思是,如果你没有任何值传递到您设置为default它取代默认值,而不是空

  • 默认亘古上已经有一些数据或空行现有作品的特定列。
  • 默认总是处理新插入的行。

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

> update table_name 
>  Set column_name = 'default_value' 
> where column_name is null; 
的【如何有条件的默认值设置为Oracle数据库,不列
+0

它已经被提出,它是如何补充? – 2014-09-25 06:00:06