簡體   English   中英

觸發器SQL Oracle出錯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM