我在SQL Oracle上创建触发器时遇到问题。
我的触发器是:
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;
/
触发器已成功创建。然后,当我尝试运行命令时:
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');
我收到此错误:
ORA-00036:超出了最大递归SQL级别数(50) ORA-06512:在“UTF8.GENERATEPASSWORD”,第2行ORA-04088:错误期间 执行触发器'UTF8.GENERATEPASSWORD'ORA-06512:at “UTF8.GENERATEPASSWORD”,第2行ORA-04088:执行期间出错 触发'UTF8.GENERATEPASSWORD'ORA-06512:at“UTF8.GENERATEPASSWORD”, 第2行ORA-04088:执行触发期间出错 'UTF8.GENERATEPASSWORD'ORA-06512:在“UTF8.GENERATEPASSWORD”,第2行 ORA-04088:执行触发器'
时出错
这里有什么问题?
答案 0 :(得分:1)
正如Justin已经指出的那样,你的代码会生成一个无限循环,因为触发器会触发包含触发器内的每个insert语句的触发器。 一个可能的解决方案是:
-
每当触发器触发时,都会生成一个密码并将其添加到原始插入语句中。