在Oracle中插入具有自动增量ID的新行

时间:2014-12-17 09:13:15

标签: oracle insert oracleforms

我使用oracle表单构建器,我在数据库表XXCR_MAINT_HDRS中包含maintenaceNO数字(15),并且我有SEQUENCE INV_HDR_NO_S,我必须将new_form_instance触发器写入系统生成maintenanceNO当我编译并运行oracle表单时,我编写了这段代码

BEFORE INSERT ON XXCR_MAINT_HDRS
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
   WHEN (NEW.TRX_NUM IS NULL)
BEGIN
  select INV_HDR_NO_S.NEXTVAL
   INTO :NEW.TRX_NUM from dual;
END;

和此代码

BEFORE INSERT ON XXCR_MAINT_HDRS
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
 WHEN (NEW.ID IS NULL)
BEGIN
  select INV_HDR_NO_S_ID.NEXTVAL
   INTO :NEW.ID from dual;
END;

对于这两个代码我都有这个

  行中的

错误103遇到符号插入时期望:= @%

2 个答案:

答案 0 :(得分:0)

您无法选择在行变量中使用intertim变量 代码需要看起来像:

CREATE OR REPLACE TRIGGER XXCR_MAINT_HDRS_TRG
BEFORE INSERT ON XXCR_MAINT_HDRS
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
 WHEN (NEW.ID IS NULL)
DECLARE
  v_id XXCR_MAINT_HDRS.ID%TYPE;
BEGIN

   select INV_HDR_NO_S_ID.NEXTVAL INTO v_id from dual;
  :new.ID := v_id;
END XXCR_MAINT_HDRS_TRG;

Oracle 12添加

实现此功能的另一种方法是在oracle 12中引入的一项新功能,该功能可以将序列用作标识列:

CREATE SEQUENCE t1_seq;

CREATE TABLE t1 (
  id          NUMBER DEFAULT t1_seq.NEXTVAL,
  description VARCHAR2(30)
);

有关详细信息,请查看以下链接:

http://oracle-base.com/articles/12c/identity-columns-in-oracle-12cr1.php

http://oracle-base.com/articles/12c/default-values-for-table-columns-enhancements-12cr1.php

答案 1 :(得分:0)

如果使用此语法,则表示正在编写数据库触发器。 因此,如果您使用asafm示例并创建此数据库触发器,那么它将填写数字。

如果要在oracle表单中使用触发器来填写数字,则应创建预插入触发器。或者,如果您希望在创建记录时存在该值,则应使用when-create-record触发器。此触发器的代码如下:

select INV_HDR_NO_S.NEXTVAL
into :BLOCK_NAME.TRX_NUM from dual;