使用集合将记录插入新添加的列

时间:2017-08-11 07:20:34

标签: oracle plsql

我正在使用oracle版本 Oracle Database 11g企业版11.2.0.1.0版 - 64位生产

我创建了一个名为xy的表,为其插入了值,然后又添加了一列。现在我只想为新添加的列添加值。是否有可能在不使用更新的情况下向新列添加值。

public class MainViewModel : MvxViewModel
{
    private readonly IMvxNavigationService _navigationService;

    public MainViewModel(IMvxNavigationService navigationService)
    {
        _navigationService = navigationService;
    }

    public override async Task Initialize()
    {
        await _navigationService.Navigate<FirstViewModel>();
    }
}

现在我添加了一个列到此表。

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

现在,我需要为新添加的列(z1)添加值。

我尝试使用以下内容但仅插入新行,是的,我知道如果我们使用insert,它将仅添加新行。

alter table xy add z1 number;

因此,只是在没有使用更新的情况下查看是否有任何替代方法,可以在集合或SQL的帮助下。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

使用MERGE声明:

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语句,但会更新匹配行中的值。

在没有UPDATE的情况下执行此操作的另一种方法是将所有行存储在集合中,然后DELETE行并使用新值重新创建它们(但这似乎有点过分以避免使用UPDATE声明。