不使用触发器自动从 SEQUENCE 插入值
To automatically insert value from SEQUENCE without using trigger
序列:
CREATE SEQUENCE A
MINVALUE 1
START WITH 1
INCREMENT BY 1;
我想创建一个 table :
CREATE TABLE t1(
id NUMBER NUMBER DEFAULT A.NEXTVAL,
description varchar(20))
这样一来,每当我插入时,id 列都会自动填充,而无需使用触发器。
我尝试插入 :INSERT INTO T1 VALUES('hello')
错误:ORA-00947: not enough values
答案很简单:不能,在 Oracle 11g 中不能。
如果您使用的是 12c,则可以使用标识列,但您不是。
因此,触发它是(除非你想在每次向table中插入行时指定顺序)。
在 Oracle 12c 之前,唯一的方法是使用触发器。在 Oracle 12c 中有 IDENTITY 列
列是在 Oracle 12c 中引入的,允许在现代版本的 Oracle 中实现简单的自动递增功能。
IDENTITY 列的使用在功能上与其他数据库系统类似。在 Oracle 12c 或更高版本中,我们可以使用标识列来引用序列或增量值。您可以在下面的 link 示例中看到如何使用 IDENTITY,但在 Oracle 11g 中,唯一的模式是使用触发器。
https://oracle-base.com/articles/12c/identity-columns-in-oracle-12cr1
ORA-00947: not enough values
--> 这只是意味着您没有在 INSERT
中提供列列表,并且您试图插入的值少于 table 中的列总数.您应该提供列的名称。
在 Oracle 12c 中是可能的。您只需提供一个列列表(不包括默认列),如下所示:
SQL> CREATE SEQUENCE A MINVALUE 1 START WITH 1 INCREMENT BY 1;
Sequence created.
SQL>
SQL> CREATE TABLE T1 (
2 ID NUMBER DEFAULT A.NEXTVAL,
3 DESCRIPTION VARCHAR(20)
4 );
Table created.
SQL> INSERT INTO T1 ( DESCRIPTION ) VALUES ( 'd1' );
1 row created.
SQL> INSERT INTO T1 ( DESCRIPTION ) VALUES ( 'd2' );
1 row created.
SQL> SELECT *
2 FROM T1;
ID DESCRIPTION
---------- --------------------
1 d1
2 d2
SQL>
序列:
CREATE SEQUENCE A
MINVALUE 1
START WITH 1
INCREMENT BY 1;
我想创建一个 table :
CREATE TABLE t1(
id NUMBER NUMBER DEFAULT A.NEXTVAL,
description varchar(20))
这样一来,每当我插入时,id 列都会自动填充,而无需使用触发器。
我尝试插入 :INSERT INTO T1 VALUES('hello')
错误:ORA-00947: not enough values
答案很简单:不能,在 Oracle 11g 中不能。
如果您使用的是 12c,则可以使用标识列,但您不是。
因此,触发它是(除非你想在每次向table中插入行时指定顺序)。
在 Oracle 12c 之前,唯一的方法是使用触发器。在 Oracle 12c 中有 IDENTITY 列
列是在 Oracle 12c 中引入的,允许在现代版本的 Oracle 中实现简单的自动递增功能。
IDENTITY 列的使用在功能上与其他数据库系统类似。在 Oracle 12c 或更高版本中,我们可以使用标识列来引用序列或增量值。您可以在下面的 link 示例中看到如何使用 IDENTITY,但在 Oracle 11g 中,唯一的模式是使用触发器。
https://oracle-base.com/articles/12c/identity-columns-in-oracle-12cr1
ORA-00947: not enough values
--> 这只是意味着您没有在 INSERT
中提供列列表,并且您试图插入的值少于 table 中的列总数.您应该提供列的名称。
在 Oracle 12c 中是可能的。您只需提供一个列列表(不包括默认列),如下所示:
SQL> CREATE SEQUENCE A MINVALUE 1 START WITH 1 INCREMENT BY 1;
Sequence created.
SQL>
SQL> CREATE TABLE T1 (
2 ID NUMBER DEFAULT A.NEXTVAL,
3 DESCRIPTION VARCHAR(20)
4 );
Table created.
SQL> INSERT INTO T1 ( DESCRIPTION ) VALUES ( 'd1' );
1 row created.
SQL> INSERT INTO T1 ( DESCRIPTION ) VALUES ( 'd2' );
1 row created.
SQL> SELECT *
2 FROM T1;
ID DESCRIPTION
---------- --------------------
1 d1
2 d2
SQL>