我正在使用数据表通过Oracle Apex实用程序加载数据。
我想创建一个触发器,从加载的数据中检查表上的值,然后根据它得到的内容进行更改。
该表有4列:id,姓名,电子邮件,类型
要加载的数据如下所示:姓名,电子邮件,类型
现在我的触发器:
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 中
有没有办法更改新类型?
我知道你想做什么。您希望表接受插入的记录,其中包含不适合其中一个字段宽度的数据,并且您希望使用触发器来"修复"数据以使其适合。
遗憾的是,此触发器对您没有帮助,因为在触发触发器之前会验证数据。
解决此问题的另一种方法可能是使用带有 instead of 触发器的视图。视图将具有基于长度为 9 的字符串的列"TYPE";代替触发器会将其转换为 CHAR(1( 以插入到基础表中。
试试这个:
select 'something else' into :NEW.TYPE from dual;
如果此语法适用于ID
那么它也应该适用于TYPE