简体   繁体   English

如何在ORACLE PL / SQL中创建触发器以不允许双精度值?

[英]How to make a trigger in ORACLE PL/SQL to not allow double values?

I've a table named cliente with columns: COD_CLIENTE, CPF_CLIENTE and NAME_CLIENT. 我有一个名为cliente的表,其中包含以下列:COD_CLIENTE,CPF_CLIENTE和NAME_CLIENT。

How to make a TRIGGER in PL SQL to not allow insert or update double CPF_CLIENTE's values? 如何在PL SQL中创建TRIGGER以不允许插入或更新CPF_CLIENTE的双精度值?

I've tryied: 我试过了:

CREATE OR REPLACE TRIGGER TG_CPF
  BEFORE INSERT ON CLIENTE
  FOR EACH ROW
DECLARE 
  CONDITION_CHECK NUMBER;
BEGIN
  SELECT COUNT(CPF_CLIENTE) INTO CONDITION_CHECK FROM CLIENTE WHERE CPF_CLIENTE = :new.CPF_CLIENTE;
  IF CONDITION_CHECK > 0 THEN
    RAISE_APPLICATION_ERROR (-20000, ' CPF is Already in DB.');
  END IF;
END;
/

But i got: 但是我得到了:

ORA-20000:  CPF is Already in DB.
ORA-06512: at "USER.TG_CPF", line 6
ORA-04088: error during execution of trigger 'USER.TG_CPF'

Why I'm getting ORA-06512 and ORA-0488 errors? 为什么会出现ORA-06512和ORA-0488错误?

The trigger does what i need. 触发器可以满足我的需求。 Don't insert/update the value if already exits, but i'm getting these 2 errors. 如果已经存在,请不要插入/更新值,但是我遇到了这2个错误。

How to fix it, please? 请如何解决?

Thank you! 谢谢!

You cannot have a trigger on a table, and read data from that same table in the trigger body, when it's a row level trigger. 当表是行级触发器时,您不能在表上具有触发器,也不能从触发器主体中的同一表读取数据。

Instead, you need to use a unique constraint. 相反,您需要使用唯一约束。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM