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;