sql触发器(Oracle)上的列

问题描述 投票:0回答:1

[我希望如果在插入'zone'为null时将触发该触发器,并将区域值从'null'更改为'sin',我认为问题出在if。

CREATE OR REPLACE TRIGGER ZONA_JUGADOR
    BEFORE INSERT ON EQUIPOS FOR EACH ROW
BEGIN
    IF :NEW.ZONA = NULL THEN
    :NEW.ZONA:='SIN';
    END IF;

END;

我正在做的插入句子:

VALUES ('eq47','01627208G','Miranda',NULL); 
oracle plsql oracle-sqldeveloper plsqldeveloper
1个回答
0
投票

问题出在IF中。 NULL不等于某物,因此您不能使用

if :new.zona = null 

但是

if :new.zona IS NULL

无论如何,也许您宁愿使用NVL函数:

SQL> create table equipos (id varchar2(10), zona varchar2(10));

Table created.

SQL> create or replace trigger zona_jugador
  2    before insert on equipos
  3    for each row
  4  begin
  5    :new.zona := nvl(:new.zona, 'SIN');
  6  end;
  7  /

Trigger created.

SQL> insert into equipos(id, zona) values ('ba12', 'zona');

1 row created.

SQL> insert into equipos(id, zona) values ('eq47', null);

1 row created.

SQL> select * From equipos;

ID         ZONA
---------- ----------
ba12       zona
eq47       SIN

SQL>
© www.soinside.com 2019 - 2024. All rights reserved.