1

我正在使用数据表通过 Oracle Apex 实用程序加载数据。

我想创建一个触发器,从加载的数据中检查表上的值,然后根据它获得的内容进行更改。

该表有 4 列:id、name、email、type

要加载的数据是这样的:姓名、电子邮件、类型

现在我的触发器:

create or replace TRIGGER  BI_USER
before insert ON USER               
for each row  

declare
begin   
  if :NEW.ID is null then
    select USERID_SEQ.nextval into :NEW.ID from dual;
  end if;
 :NEW.TYPE := 'something else';
end; 

ID 很好用,它从序列中获取一个数字,但是 :new.type 不起作用,它不会改变。我还单独运行 SQL 插入,并且发生了同样的情况。

编辑:new.type 类型是 char(1),我这样写只是为了测试,但它并没有改变......啊我对自己很失望,它在读取数据后抛出错误并且从不触发扳机。

我试图做的是它将具有 TYPE 列的名称,并将该表中的 id 放入 NEW.type

有没有办法改变新的类型?

4

2 回答 2

2

我明白你想做什么。您希望您的表接受包含不适合其中一个字段宽度的数据的插入记录,并且您希望使用触发器来“修复”数据以使其适合。

不幸的是,此触发器对您没有帮助,因为在触发触发器之前验证了数据。

解决此问题的另一种方法可能是使用带有替代触发器的视图。该视图将有一个基于长度为 9 的字符串的“TYPE”列;而不是触发器会将其转换为 CHAR(1) 以插入到基础表中。

于 2012-05-24T01:56:53.240 回答
0

试试这个:

select 'something else' into :NEW.TYPE from dual;

如果此语法适用于ID它也应该适用于TYPE

于 2012-05-21T23:47:27.813 回答