oracle update 递增,如何更新oracle中列的所有行,起始值为500,并在oracle中递增(how to update all rows of a column in oracle w...

如何更新oracle中列的所有行,起始值为500,并在oracle中递增(how to update all rows of a column in oracle with a start value of 500 and incrementing in oracle)

我在oracle中有一个表,其中列的所有行必须用500的起始值更新并且递增1。

我试图在网上找到类似的东西,但无法获得任何有用的东西。 oracle和PL / SQL不是我的专长。 任何帮助,将不胜感激。

I have a table in oracle of which all rows of a column has to be updated with a starting value of 500 and incrementing by 1.

I tried to find something similar online but wasn't able to get anything useful. oracle and PL/SQL is not my expertise. any help would be appreciated.

原文:https://stackoverflow.com/questions/29225376

更新时间:2019-12-07 20:47

最满意答案

我不会使用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。

I won't use PL/SQL since it could be done in plain SQL.

You could use a SEQUENCE starting with 500 and incremented by 1.

For example,

set up

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>

Now, let's update the table with the sequence.

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>

So, you have all the rows updated with the sequence starting with 500 and incremented by 1.

2015-03-24

相关问答

我将回答我的问题并解释我是如何克服这个障碍的。 最后,我基本上做了'a_horse_with_no_name'的建议。 我没有使用resultSet游标或引用游标来执行更新,而是使用了一个简单的UPDATE语句。 这是可能的,因为我能够说服DBA为唯一标识符创建列。 我们永远无法解决由resultSet的updateRow()方法引起的异常。 在添加唯一标识符之前,没有可靠地使用UPDATE语句的密钥。 以下是updateSQL是包含更新SQL语句的字符串的代码: updateResultInt

...

我不会使用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

...

由于子查询中的where子句与外部相同,因此不需要子查询直接引用列 UPDATE LOAD_SETTINGS

SET

LOADDATE = UPDATEDATE

WHERE

MODEL = 'A001'

AND OBJECT = 'A';

Since the where clause on the subquery is the same where on the outer there's no need for the subselect just reference t

...

在没有更新任何内容的更新之后没有持有行锁(毕竟,如果没有行,应该锁定哪一行?) 您的事务仍然会有一些共享锁(在表上),但那些只是为了防止其他事务更改表。 它基本上与select语句在表上获得的“锁定”类型相同。 从手册 : 只有在编写器修改时才会锁定行。 在手册中进一步说明 : 行锁(也称为TX锁)是单行表的锁。 事务为每个修改的行获取行锁 因此,如果没有更改行,则无法锁定。 No row locks are held after an update that didn't update anyt

...

您的select语句比它需要的更复杂,您将以这种方式获得相同的集合: SELECT emp.employee_id,min(bo.booking_date) booking_date

FROM employee emp

LEFT JOIN booking bo

ON bo.employee_id = emp.employee_id

WHERE emp.joining_date is NULL

GROUP BY emp.employee_id;

您的更新可以像这样完成,请注意“and e

...

我会问一个物理表是否是正确的机制,无论你在做什么。 一个因素是如何处理交易。 任何意味着“不要在交易期间锁定”的东西都会遇到交易问题。 有几个非交易选项: 全局上下文值可能很有用(取决于您是否在RAC上)以及如何在重新启动后处理持久性。 另一个选项是DBMS_PIPE ,您可以在其中维护该表的后台进程,并且单独的会话将消息发送到该进程,而不是直接更新表。 排队是另一种想法。 如果您只需要减少锁定记录的时间,那么自主事务可能就是答案 I'd ask whether a physical table

...

我想你正在寻找这个正则表达式: SELECT *

FROM table_name

WHERE regexp_like(column_Name,'^[0-9]')

或简而言之 SELECT *

FROM table_name

WHERE regexp_like(column_Name,'^\d')

你所做的是否定括号中元素的结果, ^需要在括号之前 i guess you are looking for this regex: SELECT *

FROM table_name

WHERE

...

您可以将MERGE与窗口函数row_number : merge into your_table t

using (

select t.*,

row_number() over (partition by testId order by rank) as rn

from your_table t

) s on (

t.rank = s.rank

and t.testId = s.testId

)

when matched then upda

...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值