如何将我从 sqlplus 控制台生成的触发器用于 oracle 表单构建器?

How can I use my generated triggeres from sqlplus console into the oracle forms bulider?

我创建了以下 table:

create table Citizens_lic
(
No NUMBER(10) ,
ID NUMBER(10)   
constraint Citizens_ID_pk_1 PRIMARY KEY,
F_Name VARCHAR2(32) ,
M_Name VARCHAR2(32) ,
L_Name VARCHAR2(32) ,
DOB DATE ,
POF VARCHAR2(32) ,
GENDER VARCHAR2(32) ,
Soc_status VARCHAR2(32) ,
work_status VARCHAR2(32) ,
ISS_DATE date ,
EXP_Date date   
)

然后,我生成了一些触发器 对于 id,不,iss_date Exp_date 来自 sqlplus 命令,如下图所示

在那之后,所有触发器都可以从 sqlplus 命令正常工作,所有插入的值(如 id)和没有列本身会生成 自动一旦创建了一行

现在我想告诉你我卡在哪里了! 我去了 oracle 表单生成器 我做了这个表格

并删除了所有ID,不,Iss_date,Exp_date项框,因为不需要它,每个都必须由触发器生成。

那我运行就

无法插入!

现在让我们顺其自然,有人帮忙:)

两个想法:触发器 _1 和 _2 都插入 new.no。在您的第二个屏幕截图中,您两次创建触发器 _3。我会说你的问题是你没有为你的 PK,id 提供任何价值。 HTH

部分问题是您为一个事件编写了四个触发器(好吧,严格来说是三个触发器,因为您有两个具有相同触发器名称的脚本,但我认为这只是一个 cut'n'paste bloomer 和你真的想让第四个脚本创建一个名为 citizens_lic_trigg_4 的触发器)。问题的另一部分是您有两个触发器填充 :new.no 而没有触发器填充 :new.id,这是主要的 必须 被填充。

插入时触发四个触发器导致的开销是触发一个触发器的四倍。因此,出于性能原因,最好只有一个触发器。但它也更容易避免代码中的错误,因为扫描一个脚本比扫描四个更简单。特别是当您只是编辑缓存语句 (ed afiedt.buf) 时,您无法观察所有四个脚本 (*).

因此,更好的实施方式是:

create or replace trigger citizens_lic_trigg
     before insert on citizens_lic
     for each row
begin
    /* or maybe these two assignments should be the other way round??? */
    :new.id := citizens_lic_seq_1.nextval;
    :new.no := round(dbms_random.value(1000500000,1099999999));
    :new.iss_date := sysdate;
    :new.exp_date := sysdate + (365*5);
end;

(*) 除非你在每次编辑后截屏,就像你在这里所做的那样。但这确实效率低下:在较长的 运行 中,您会发现为每个脚本使用单独的命名文件是有益的,因此您可以将它们保存在源代码管理中。