2014-09-25 49 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