2017-08-11 89 views
0

我使用的是Oracle版本 Oracle數據庫11g企業版發佈11.2.0.1.0 - 64位生產插入記錄新添加的列

我已經裝箱了一個名爲表,XY插入值,然後又增加了一列。現在我只想將值添加到新添加的列。是否有可能在不使用更新的情況下向新列添加值。

create table xy(x1 number, y1 number); 

insert into xy(x1,y1) values(1, 1); 
insert into xy(x1,y1) values(2, 2); 
insert into xy(x1,y1) values(3, 3); 

select * from xy; 
    X1   Y1 
---------- ---------- 
    1   1 
    2   2 
    3   3 

現在我再向此表中添加一列。

alter table xy add z1 number; 

現在,我需要爲新添加的列(z1)添加值。

我試着用下面的方法做,但是隻插入新的行,是的我知道如果我們使用insert,它只會添加新的行。

Declare 
TYPE xy_type is table of xy%rowtype index by PLS_Integer; 
xyt xy_type; 
x number; 
y number; 
Begin 
select * bulk collect into xyt from xy; 
x := 1; 
y := xyt.count; 
for i in x..y loop 
    insert into xy (x1, y1, z1) values(xyt(i).x1, xyt(i).y1, i);  
End Loop; 
End; 

所以,只要看看有沒有使用更新的任何替代方法,可能是與集合或SQL的幫助。

感謝您的幫助提前。

MERGE INTO xy dst 
USING (SELECT ROWID AS rid, ROWNUM AS rn FROM xy) src 
ON (src.RID = dst.ROWID) 
WHEN MATCHED THEN 
    UPDATE SET z1 = rn; 

它不使用UPDATE語句,但它會在匹配的行更新值:

+0

'Insert'會添加新行。您需要使用現有行更新新表的值。 Google爲此降低了「合併」聲明。這裏不需要PLSQL – XING

+1

爲什麼你不想使用'update'?這是簡單的單線聲明來獲得您的結果。 –

+0

即使您要使用集合,表中的行也只能是'更新'。您可以使用MERGE,但技術上也將執行更新。您不想使用更新的任何特定原因? –

回答

1

使用MERGE聲明。

這樣做沒有UPDATE將所有的行存儲在一個集合中,然後DELETE行和用新值重新創建它們(但似乎有點小題大做,只是爲了避免使用UPDATE語句)的另一種方式。

相關問題