2013-10-29 51 views
0

我在Oracle8i企業版版本8.1.7.4.0中使用SQL * Plus。使用現有數據的SQL INSERT UPDATE查詢

我有一個表customer_address

no - customer number 

type - 0 main, 1 delivery, 2 invoice 

email - customer e-mail address 

每一個客戶都有一個電子郵件地址設置爲0類型,如:

SELECT no, type, email FROM customer_address WHERE cunu = '1'; 

1,0,[email protected] 

我需要爲每個複製的電子郵件地址客戶從0類型到1類型?

當我不喜歡INSERT INTO customer_address (no, type, email) VALUES ('1','1','[email protected]');一個測試,我看到這樣的錯誤消息:

ORA-01400: cannot insert NULL into 

有人能提供正確的例子嗎?

+4

你確定你的表中沒有其他不可空列嗎? – mucio

+0

謝謝。是的,還有另外兩列NOT NULL,但都是'0',我想我需要包括那些。什麼是複製數據的正確例子? – user2656114

+0

看來錯誤是由於該行已經存在(不知何故)造成的,所以我需要的是'UPDATE'而不是'INSERT'。有人可以修改一個例子嗎? – user2656114

回答

0

也許是這樣的?

insert into customer_address 
    (no,type,email, primarykeyfieldofthetable, otherfields) 
select 
    no,'1',email, sequenceofprimarykey.nextval, otherfields 
from 
    customer_address 
where type='0' 
+0

謝謝。我得到'ORA-00001:唯一約束'? – user2656114

+0

您無法複製主鍵。可能你的pk是由一個序列產生的。在這種情況下,當您選擇新值時,您應該編寫customer_address_table_sequence.nextval而不是字段的名稱。 –

+0

謝謝,但你能解釋一下,因爲我不明白? – user2656114

0

如果包括來自該國的正確順序的所有字段,你也可避免在表名後指定它們

INSERT INTO customer_address 
    SELECT no, 
      '1', 
      email, 
      otherfields 
     FORM customer_address 
     WHERE cunu ='1' 
     AND type='0' 
0

您AE得到的錯誤,因爲您不填寫所有不可─空列。表中必須至少有一列不可空,且沒有默認值。

insert into customer_address (no, type, email, notnullcol1, notnullcol2) 
    select no, 1 as type, email, notnullcol1, notnullcol2 
    from customer_address 
    where type = 0 
; 
相關問題