Hi I'm having a problem while I'm creating a trigger on SQL Oracle.
My trigger is:
create or replace trigger generatePassword
before insert on people
for each row
begin
insert into people(nif,naame,date_birth,sex,adress,email,iban,password)
values (:NEW.nif,:NEW.naame,:NEW.date_birth,:NEW.sex,:NEW.adress,:NEW.email,:NEW.iban,(select round(dbms_random.value(0000,9999)) from dual));
end;
/
The trigger was created successfully. Then, when I try to run the command:
insert into people (naame, date_birth, sex, adress, email, iban, nif, id) values ('Albert', '01-12-87', 'M', 'NY', 'albert@gmail.com', '000032134537512343231', '523456189', '70');
I get this error:
ORA-00036: maximum number of recursive SQL levels (50) exceeded ORA-06512: at "UTF8.GENERATEPASSWORD", line 2 ORA-04088: error during execution of trigger 'UTF8.GENERATEPASSWORD' ORA-06512: at "UTF8.GENERATEPASSWORD", line 2 ORA-04088: error during execution of trigger 'UTF8.GENERATEPASSWORD' ORA-06512: at "UTF8.GENERATEPASSWORD", line 2 ORA-04088: error during execution of trigger 'UTF8.GENERATEPASSWORD' ORA-06512: at "UTF8.GENERATEPASSWORD", line 2 ORA-04088: error during execution of trigger '
What is the problem here?
people
tries to insert intopeople
, you're going to get into an infinite loop (the initial insert fires the trigger which inserts a new row which fires the trigger again which inserts a new row which fires the trigger again...). If you are just trying to change thepassword
value from the initial insert, you'd just want:new.password := round(dbms_random.value(0000,9999);
. – Justin Cavecreate or replace trigger generatePassword before insert on people for each row begin :NEW.password = (select round(dbms_random.value(0000,9999)) from dual; insert into people(nif,naame,date_birth,sex,adress,email,iban,password) values (:NEW.nif,:NEW.naame,:NEW.date_birth,:NEW.sex,:NEW.adress,:NEW.email,:NEW.iban,:NEW.password ); end; /
– Blackout