我有一个带有序列的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,...)
这是唯一的方法吗?我必须列出所有列?
答案 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应用程序中生成,然后可能会插入列列表。