[英]Error on Trigger SQL Oracle
嗨,我在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:在“ UTF8.GENERATEPASSWORD” ”,第2行ORA-04088:執行觸發器'UTF8.GENERATEPASSWORD'時發生錯誤ORA-06512:在“ UTF8.GENERATEPASSWORD”處,發生錯誤2,ORA-04088:執行觸發器'UTF8.GENERATEPASSWORD'ORA-06512時發生錯誤“ UTF8.GENERATEPASSWORD”,第2行ORA-04088:執行觸發器“期間出錯
這里有什么問題?
正如Justin所指出的那樣,您的代碼會生成一個無限循環,因為觸發器會為包含在觸發器內部的每個插入語句觸發該觸發器。 一個可能的解決方案是:
CREATE OR REPLACE TRIGGER generatePassword
BEFORE INSERT ON people
FOR EACH ROW
BEGIN
:NEW.password := round(dbms_random.value(0000,9999);
END generatePassword;
/
每當觸發觸發器時,都會生成一個密碼並將其添加到原始的insert語句中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.