触发器上的新变量的值不会改变,在 plsql 上



我正在使用数据表通过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

最新更新