2011-07-15 52 views
7

我有一个带有序列和触发器的自动增量列的oracle表。 现在我想做一个插入。通常情况下我应该写: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); 

其余的将被默认!

4

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

是。 总是指定您希望为其提供值的INSERT语句中的所有列。

+0

不,你没有*有*列出*所有*列。 –

+1

好吧,你想要的所有东西...... –

3

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

您可以用插入:

INSERT入T VALUES(值1,值2,值3);

这假定表t有三列

它是好得多和可支持的插入带有:

INSERT INTO吨(列1,列2,栏3)VALUES(值1,值2,值3);

当您引入从PL/SQL到SQL的上下文切换,然后再次返回到PL/SQL时,我不会使用PL/SQL(如果可以的话)。

3

我错过第一读取这一部分:

我有一个序列和一个触发一个oracle表为自动增量 一列。

所以我假设有使用序列填充PK列,其他人都有默认值。鉴于这种情况,我会做到这一点:

INSERT INTO table (pk_column) VALUES (NULL); 

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

+0

你可以给pk添加一个'default null',然后这个插入就是'insert into table(pk_column)values(default)'。 –