[英]Oracle SQL Developer - Sequential trigger still increments when inserts output error
我正在創建一個數據庫,在此表Utilizador中,我希望字段codUtilizador(即PK)是順序的,在插入后插入。
我是通過編輯表格創建觸發器的,對觸發器的編碼了解不多,但我將代碼放在下面。
發生的情況是,每當一個插入程序輸出一個錯誤時,它仍然會計入觸發器,而下一個成功插入的程序,其值將與假定的值不同。 (這就是我的猜測)
如果有幫助,請參見以下代碼。
表:
CREATE TABLE TipoUtilizador (
CodTipoUtilizador Number(1) Primary key
check (CodTipoUtilizador in ('0','1')),
desc_TipoUtilizador VARCHAR2(20) not null
);
CREATE TABLE CPostal (
CodPostal VARCHAR2(8) Primary key
check (CodPostal like '____-___'),
desc_CodPostal VARCHAR2(30) not null
);
CREATE TABLE Utilizador (
CodUtilizador Number(10) Primary key,
username VARCHAR2(15) Unique not null,
password VARCHAR2(15) not null,
nCC Number(8) Unique not null,
nif Number(9) Unique not null,
nTelefone Number(9) Unique not null,
rua VARCHAR2(50) not null,
nPorta Number(3) not null,
CodPostal VARCHAR2(8) not null references CPostal(CodPostal),
CodTipoUtilizador Number(1) not null references TipoUtilizador(CodTipoUtilizador)
);
插入:
INSERT INTO Utilizador(username, password, nCC, nif, nTelefone, rua, nPorta, CodPostal, CodTipoUtilizador)
VALUES ('lcva2', 'lcva123', '87654321', '222222222', '999999999', 'Rua Alberto Campos', '13', '4600-102', '0');
腳本輸出(我故意插入第二個錯誤,以便向您展示問題):
1 row inserted.
Error starting at line : 39 in command -
INSERT INTO Utilizador(username, password, nCC, nif, nTelefone, rua, nPorta, CodPostal, CodTipoUtilizador) VALUES ('lcva', 'lcva123', '12345678', '111111111', '913748456', 'Rua Alberto Campos', '13', '4600-102', '1')
Error report -
ORA-00001: unique constraint (LUIS.SYS_C007911) violated
1 row inserted.
觸發:
create or replace TRIGGER UTILIZADOR_TRG
BEFORE INSERT ON UTILIZADOR
FOR EACH ROW
BEGIN
<<COLUMN_SEQUENCES>>
BEGIN
IF INSERTING AND :NEW.CODUTILIZADOR IS NULL THEN
SELECT UTILIZADOR_SEQ.NEXTVAL INTO :NEW.CODUTILIZADOR FROM SYS.DUAL;
END IF;
END COLUMN_SEQUENCES;
END;
結果:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.