这很简单,可能已经被问到了,但我找不到它(如果是这样的话我很抱歉)。
我想在表上插入一个空行,这样我就可以通过ExecuteScalar获取其ID(主键,由插入触发器生成)。我的代码稍后会将数据添加到其中。
我的问题是:是否有特定的插入语法来创建空记录?或者我必须使用常规插入语法,例如“INSERT INTO table(列出所有列)值(每列为null)”?
感谢您的回答。
更新:在Oracle中,INSERT上的ExecuteScalar仅返回0.最终答案是下面发布的内容的组合。首先,您需要声明一个参数,然后使用RETURNING进行提取。
INSERT INTO TABLENAME (ID) VALUES (DEFAULT) RETURNING ID INTO :parameterName
请查看link以获取更多信息。
答案 0 :(得分: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>;
我会质疑这种方法。为什么要创建一个空行?这可能意味着对该表没有约束,如果你想要好的,干净的数据,这是一件坏事。
答案 1 :(得分:3)
基本上,为了插入一行,除了主
之外,所有列的值都是NULL
键列的值,您可以执行简单的insert
语句:
insert into your_table(PK_col_name)
values(1); -- 1 for instance or null
前插入触发器,负责填充主键列
覆盖values
语句的insert
子句中的值,为您留下
空记录,但PK
值除外。