我使用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遇到符号插入时期望:= @%
答案 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;