Oracle SQL - 将主键添加到表

时间:2013-11-06 08:38:08

标签: sql oracle key add

我有一些列没有主键,想要添加主键列

NAME    Age
-------------
Peter   45
Bob     25
John    56
Peter   45

有些同事建议添加带序列和触发器的PK Add a auto increment primary key to existing table in oracle

这很不错,但 我的客户使用无权添加序列或触发器的数据库用户 。 我想阻止联系数十名DBA管理员来改变用户权限或运行我的脚本。

我建议添加一个只有更新语句的PK :(我在步骤2中需要帮助)

第1步:创建ID列(我拥有此的数据库权限)

ALTER TABLE PERSON ADD ID NUMBER(10,0);

第2步: 问题:我可以根据行的顺序或其他内容使用唯一值初始化ID列吗?怎么样?

UPDATE PERSON SET ID = something-unique

第3步:在词语之后添加主键约束:( I DB拥有此权限

ALTER TABLE PERSON ADD CONSTRAINT PK_ID PRIMARY KEY(ID);

第4步:后记:主要密钥由我的应用程序管理和添加。

这将是结果:

ID(PK)  NAME    Age
---------------------
1       Peter   45
2       Bob     25
3       John    56
4       Peter   45

谢谢大家!

2 个答案:

答案 0 :(得分:25)

Update person set id = rownum;

答案 1 :(得分:1)

这个想法很幼稚,但如果你的桌子没有大量的行,应该可以正常工作。

对于第2步,运行for循环,如:

declare
    i pls_integer :=1;
     begin
    for rec in (select name,age, rowid from table_name)
    loop
    update table_name set id = i 
    where 
     table_name.name=rec.name 
     and table_name.age=rec.age 
     and table_name.rowid = rec.rowid;
    i:=i+1;
    end loop;
end;