【发布时间】:2015-05-27 08:03:45
【问题描述】:
我在 oracle 中有一个表,其中列的所有行都必须更新为起始值 500 并递增 1。
我试图在网上找到类似的东西,但没有得到任何有用的东西。 oracle 和 PL/SQL 不是我的专长。任何帮助,将不胜感激。
【问题讨论】:
-
使用序列。看我的回答。
我在 oracle 中有一个表,其中列的所有行都必须更新为起始值 500 并递增 1。
我试图在网上找到类似的东西,但没有得到任何有用的东西。 oracle 和 PL/SQL 不是我的专长。任何帮助,将不胜感激。
【问题讨论】:
我不会使用 PL/SQL,因为它可以用纯 SQL 完成。
您可以使用以500 开头并以1 递增的SEQUENCE。
例如,
设置
SQL> DROP SEQUENCE s ;
Sequence dropped.
SQL>
SQL> CREATE SEQUENCE s START WITH 500 INCREMENT BY 1;
Sequence created.
SQL>
SQL> DROP TABLE t PURGE;
Table dropped.
SQL>
SQL> CREATE TABLE t AS SELECT LEVEL id FROM dual CONNECT BY LEVEL < =20;
Table created.
SQL>
SQL> SELECT * FROM t;
ID
----------
1
2
3
4
5
6
7
8
9
10
11
ID
----------
12
13
14
15
16
17
18
19
20
20 rows selected.
SQL>
现在,让我们用序列更新表格。
SQL> UPDATE t SET ID = s.nextval;
20 rows updated.
SQL>
SQL> SELECT * FROM t;
ID
----------
500
501
502
503
504
505
506
507
508
509
510
ID
----------
511
512
513
514
515
516
517
518
519
20 rows selected.
SQL>
因此,您已使用从 500 开始并递增 1 的序列更新了所有行。
【讨论】:
请这样尝试,
DECLARE
VAL = 500;
BEGIN
FOR REC IN ( SELECT
*
FROM
Table1
)
LOOP
UPDATE Table1 SET col1 = VAL WHERE COL1 = REC.COL1 ;
VAL = VAL +1;
END LOOP;
END;
【讨论】:
DECLARE
VAL NUMBER := 1;
BEGIN
FOR REC IN ( select *
from customers
)
LOOP
UPDATE customers SET ID1 = VAL WHERE ID = REC.ID ;
VAL := VAL +1;
END LOOP;
END;
【讨论】: