【发布时间】:2017-05-21 00:08:42
【问题描述】:
我有一个表格,比如 Name,(为简单起见,我简化了示例)。该表已经存在,并且有数据。现在,我需要向它添加一个 long 类型的 ID 列,并且需要使值自动递增。
对于 Oracle 12c,这很容易,始终作为身份生成。
但是,我在 Oracle 11g 上工作,不支持这样的功能。所以我需要创建一个触发器,如本文所述:How to create id with AUTO_INCREMENT on Oracle?
alter table name add (id integer);
create sequence name_seq;
create or replace trigger name_bir;
before insert on name
for each row
begin
select name_seq.NEXTVAL
into :new.id
from dual;
end;
但是,该解决方案(创建序列,然后在插入/更新时触发)仅在插入新行时才有效。它不适用于表中的现有行。
如果有任何建议,我将不胜感激。基本上,我需要 existing 和 newly-inserted 行来为我新添加的列 ID 设置新的 ID 值。
==============================
解决方案(从答案中收集):
使用“a_horse_with_no_name”发布的“update”语句更新现有行
对于将要插入的任何新行,仍然需要上述触发器。
【问题讨论】:
-
创建一个
#table_seq并编写一个查询,将loop到#table添加#table_seq.nexval到id列 -
你的意思是,我需要触发器(用于新插入的行)和循环(用于现有行),对吗?
-
您不需要任何触发器。插入新行时只需使用
#table_seq.nextval -
我对 PL/SQL 不太熟悉。可以举个语法例子吗?
-
@kzharas210:PL/SQL 中不需要慢循环来更新现有行。
标签: sql plsql oracle11g triggers