5

这很简单,可能已经有人问过了,但我找不到(如果是这样的话,我很抱歉问)。

我想在表上插入一个空行,以便我可以通过 ExecuteScalar 获取它的 ID(主键,由插入触发器生成)。稍后在我的代码中将数据添加到其中。

我的问题是:是否有特定的插入语法来创建空记录?还是我必须使用常规插入语法,例如“INSERT INTO 表(列出所有列)值(每列为空)”?

感谢你的回答。

更新:在 Oracle 中,插入时的 ExecuteScalar 仅返回 0。最终答案是下面发布的内容的组合。首先,您需要声明一个参数,并使用 RETURNING 获取它。

INSERT INTO TABLENAME (ID) VALUES (DEFAULT) RETURNING ID INTO :parameterName

查看此链接以获取更多信息。

4

2 回答 2

4

您不必指定每一列,但您可能无法创建“空”记录。检查表上的 NOT NULL 约束。如果没有(不包括主键约束),那么您只需要提供一列。像这样:

insert into my_table ( some_column )
values ( null );

你知道 RETURNING 子句吗?执行 INSERT 时,您可以将该 PK 返回给调用应用程序。

insert into my_table ( some_column )
values ( 'blah' ) 
returning my_table_id into <your_variable>;

我会质疑这种方法。为什么要创建一个空行?这将/可能意味着该表没有任何限制,如果您想要好的、干净的数据,这是一件坏事。

于 2013-08-16T19:25:06.613 回答
3

基本上,为了插入所有列的值都不是NULL主要的行

键列的值,您可以执行一个简单的insert语句:

insert into your_table(PK_col_name)
  values(1);                          -- 1 for instance or null

负责填充主键列的前插入触发器将

覆盖语句values子句中的值,insert留下一个

PK值 外的空记录。

于 2013-08-16T19:23:01.207 回答