Oracle - 使用自动增量ID插入新行

Sha*_*aji 29 sql oracle plsql oracle10g

我有一个workqueue表,其中包含一个workid列.workID列具有自动递增的值.有没有办法在后端运行查询以插入新行并自动增加workID列?
当我尝试插入null时,它会抛出错误ORA01400 - 无法将null插入workid.

insert into WORKQUEUE  (facilitycode,workaction,description) values ('J', 'II',    'TESTVALUES')
Run Code Online (Sandbox Code Playgroud)

到目前为止我尝试了什么 - 我试着查看表格细节,但没有看到任何自动增量.表脚本如下

"WORKID" NUMBER NOT NULL ENABLE,
Run Code Online (Sandbox Code Playgroud)

数据库:Oracle 10g

一些现有数据的屏幕截图. 在此输入图像描述


回答:

我要感谢每个人和每个人的帮助.今天是一次很棒的学习经历,没有你的支持,我无法做到.最重要的是,我试图在已经有序列和触发器的表中插入一行.我所要做的就是为我的问题找到正确的序列,并将该序列调用到我的查询中.

您提供给我的链接帮助我查看了这些序列,并找到了适用于此workid列的序列.感谢大家,我给大家竖起大拇指,今天我能够解决另一条龙,帮助病人护理向前迈出一步!"

Sla*_*Nov 18

Oracle中没有内置的auto_increment.

你需要使用sequencestriggers.

在这里阅读如何做到正确.("在Oracle中创建自动增量列"的逐步操作方法)


Joh*_*ber 18

要获得自动增量编号,您需要在Oracle中使用序列.(见这里这里).

CREATE SEQUENCE my_seq;

SELECT my_seq.NEXTVAL FROM DUAL; -- to get the next value

-- use in a trigger for your table demo
CREATE OR REPLACE TRIGGER demo_increment 
BEFORE INSERT ON demo
FOR EACH ROW

BEGIN
  SELECT my_seq.NEXTVAL
  INTO   :new.id
  FROM   dual;
END;
/
Run Code Online (Sandbox Code Playgroud)


Zso*_*Sky 10

这是一种没有任何触发器或序列的简单方法:

insert into WORKQUEUE (ID, facilitycode, workaction, description)
  values ((select max(ID)+1 from WORKQUEUE), 'J', 'II', 'TESTVALUES')
Run Code Online (Sandbox Code Playgroud)

我觉得它适合我,但不适用于空桌子.

  • 非常适合非空表,不需要使用该方法处理触发器或序列。 (2认同)
  • 这对我来说很棒,因为我无权创建序列。我更改了我的第一个插入内容,将ID设置为1,并且效果很好。 (2认同)
  • 对于空表,您可以使用 nvl(max(id), 0) + 1 它将 null 值转换为您作为参数传递的数字 (2认同)