在一个查询中使用序列向oracle表插入一行

时间:2015-02-04 09:39:01

标签: c#-4.0 oracle11g sql-insert

我不知道哪个是使用新的ID SEQUENCE向ORACLE 11g表插入新行的正确方法。我应该在插入操作之前向我的表写一个类似的触发器:

CREATE OR REPLACE TRIGGER  "myTableTrigger" 
BEFORE INSERT ON "myTable" FOR EACH ROW
WHEN (NEW."Id" IS NULL OR NEW."Id" = 0) BEGIN
SELECT "myTable_SEQ".nextval INTO :NEW."Id" FROM dual;
END;

或者我应该使用executioncalar()获取新的序列ID,然后使用新的ID插入?但这种方式执行2个不同的查询。

我不知道是否还有其他选择吗?我可以在一个查询中执行此操作吗?

1 个答案:

答案 0 :(得分:0)

通常使用触发器来执行此操作,但在11G中您不需要DUAL中的SELECT:

CREATE OR REPLACE TRIGGER  "myTableTrigger" 
BEFORE INSERT ON "myTable" FOR EACH ROW
WHEN (NEW."Id" IS NULL OR NEW."Id" = 0) BEGIN
   :NEW."Id" := "myTable_SEQ".nextval;
END;

当然你没有拥有来使用触发器,你可以在insert语句中使用序列:

insert into "MyTable" ("Id", ...) values ("myTable_SEQ".nextval, ...);