Oracle SQL-向表中添加主键

Oracle SQL-向表中添加主键,sql,oracle,key,add,Sql,Oracle,Key,Add,我有一些没有主键的列,想要添加主键列 NAME Age ------------- Peter 45 Bob 25 John 56 Peter 45 一些同事建议添加带有序列和触发器的PK: 这很好,但是我的客户使用的数据库用户没有添加序列或触发器的权限。 我希望防止与数十名DBA管理员联系以更改用户权限或运行我的脚本 这是我的建议,添加一个只有更新语句的PK:(我需要步骤2中的帮助) 步骤1:创建ID列(我对此拥有DB权限) 步骤2:问题:我可以根据行的顺序或其

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

NAME    Age
-------------
Peter   45
Bob     25
John    56
Peter   45
一些同事建议添加带有序列和触发器的PK

这很好,但是我的客户使用的数据库用户没有添加序列或触发器的权限。 我希望防止与数十名DBA管理员联系以更改用户权限或运行我的脚本

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

步骤1:创建ID列(我对此拥有DB权限)

步骤2:问题:我可以根据行的顺序或其他方式使用唯一值初始化ID列吗?怎么做?

UPDATE PERSON SET ID = something-unique
第三步:添加主键containt后缀:(I DB对此拥有权限)

步骤4:后记:主键由我的应用程序管理和添加

结果将是:

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

谢谢大家

这个想法很幼稚,但是如果您的表没有太多的行,它应该可以正常工作

Update person set id = rownum;
对于步骤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;

WW给出了基于序列号填充PK的方法,但在您的问题中,您说,“…基于行的顺序”。您是否定义了行的顺序,例如“created_at”时间戳?我用一个更清晰的问题更新了我的文本。谢谢!阿纳布:问题的目标是正确的,但这个解决方案行不通。在我的例子中,即使是一个只有100个用户的有限数据库,我也可能有2次:John-Age 56。上面的更新将生成一个相同的主键。但是上面的解决方案给出了一个不同的基本原理。谢谢大家一起思考!好的。。我不知道你会有重复的行。。我已经修改了我的答案,所以现在应该可以了。但是,理想情况下,我认为您的表格中不应该有重复的行。答:谢谢。你的答案现在起作用了。根据您的反馈,我在我的问题中添加了重复的行。干得好。为什么这个想法很幼稚?天哪,你让我开心了:)谢谢
Update person set id = rownum;
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;