Oracle:不带列规范的插入

时间:2011-07-15 09:37:25

标签: oracle triggers insert sequence auto-increment

我有一个带有序列的oracle表和一个自动增加列的触发器。 现在我想做一个插入。通常我应该写:

INSERT INTO table (column1, column2,...) VALUES (value1, value2)

但我只想插入一个没有默认值的记录。如何在Oracle中执行此操作?

`Mysql`: INSERT INTO table () VALUES ()

`Mssql`: INSERT INTO table default VALUES 

`Oracle:` INSERT INTO table (column1, column2,...) VALUES (default, default,...)

这是唯一的方法吗?我必须列出所有列?

5 个答案:

答案 0 :(得分:7)

INSERT INTO table (column1) VALUES (default);

其余的将被默认!

答案 1 :(得分:5)

在Oracle中,您无需指定列,但不这样做会让您在表定义更改时引入错误。

您可以插入:

INSERT INTO VALUES(value1,value2,value3);

这假设表t有三列

插入时更好,更可支持:

INSERT INTO t(column1,column2,column3)VALUES(value1,value2,value3);

我不会使用PL / SQL(如果你能帮忙),因为你引入了从PL / SQL到SQL的上下文切换,然后又重新回到了PL / SQL。

答案 2 :(得分:4)

  

这是唯一的方法吗?我必须列出所有列?

是。最好始终指定要为其提供值的INSERT语句中的所有列。

答案 3 :(得分:3)

我在第一次阅读时错过了这部分:

  

我有一个带有序列和自动增量触发器的oracle表   一栏。

所以我假设使用序列填充PK列,其他都有默认值。鉴于此,我会这样做:

INSERT INTO table (pk_column) VALUES (NULL);

触发器将覆盖NULL值(如果由于某种原因它不会,则插入将失败);其他列将使用默认值填充。

答案 4 :(得分:0)

只有一个情况,您不需要在Oracle中指定COLUMNS,也就是在插入具有为所有列指定的值的行时,以及与定义相同的顺序表。在所有其他情况下,需要指定列列表。

示例:

create table tt (id number, name varchar2(30));
insert into tt values (1,'AC');
insert into tt values ('2',1);

特别注意第二个插入声明 - >第一个参数'2'以字符串形式提供,期望值是ID列中的数字。这里有必要的铸造和ID列中的插入2。但是用户可能想要在NAME列中插入“2”而在ID中插入1。通过指定列列表,Oracles可以帮助我们避免此类错误。

现在很少有任何情况你不需要指定列列表,因为几乎所有创建的表都有一个自动递增的唯一ID列,它通过Trigger自动填充或者因为{{3并且您只提供其余列的值,这意味着必须提供那些列列表,否则会导致错误。

如果应用程序生成并插入此唯一ID,则通过随机数生成或IDENTITY columns在java应用程序中生成,然后可能会插入列列表。