2011-07-15 56 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)'。 –