我正在尝试为 Oracle 数据库的 ID 创建一个auto_increment 触发器。
经过一番研究,我找到了一种使用序列和插入前触发器的方法。
问题是,当我执行触发器时,出现以下错误:
解析失败:
CREATE OR REPLACE TRIGGER AUTO_INC_PDE_ITINERAIRE
BEFORE INSERT
ON PDE_ITINERAIRE
FOR EACH ROW
BEGIN
SELECT PDE_ITINERAIRE_ID_SEQUENCE.NEXTVAL
INTO
如果我使用以下命令:
select * from SYS.USER_ERRORS where name = 'AUTO_INC_PDE_ITINERAIRE';
它返回以下输出:
3号线| 10 号位 | PLS-00201:标识符“NEW.PDE_ITINERAIRE”必须声明
第 2 行 | 职位 03 | PL/SQL:忽略 SQL 语句
第 4 行 | 职位 03 | PL/SQL: ORA-00904 无效标识符
这是触发器的完整查询:
CREATE OR REPLACE TRIGGER AUTO_INC_PDE_ITINERAIRE
BEFORE INSERT
ON PDE_ITINERAIRE
FOR EACH ROW
BEGIN
SELECT PDE_ITINERAIRE_ID_SEQUENCE.NEXTVAL
INTO :NEW.PDE_ITINERAIRE.ID_PDE_ITINERAIRE
FROM dual;
END;
/
我真的不习惯 Oracle 的触发器,所以有人可以帮我找出触发器中的问题吗?
谢谢你的时间
编辑
我根据你的建议改变了触发器
CREATE OR REPLACE TRIGGER AUTO_INC_PDE_ITINERAIRE
BEFORE INSERT
ON PDE_ITINERAIRE
FOR EACH ROW
BEGIN
:NEW.ID_PDE_ITINERAIRE := PDE_ITINERAIRE_ID_SEQUENCE.NEXTVAL;
END;
/
我仍然有相同的错误输出。
更多信息:--
Oracle 是 v11。
--TOra 3 用作 IDE。
编辑 2
这是所要求的DDL:
CREATE TABLE "GEOMAP"."PDE_ITINERAIRE"
("ID_PDE_ITINERAIRE" NUMBER(11,0) NOT NULL ENABLE,
"NOM_ITINERAIRE" VARCHAR2(255) NOT NULL ENABLE,
"LONGUEUR" NUMBER(15,4),
"INSEE_DEPART" VARCHAR2(5 )、
“INSEE_ARRIVEE”VARCHAR2(5)、
“TYPE_ITINERAIRE”VARCHAR2(30)、
“TYPE_BALISAGE”VARCHAR2(30)、
“COULEUR_BALISAGE”VARCHAR2(55)、
“NOM_TOPO_GUIDE”VARCHAR2(255)、
“ANNEE_TOPO_GUIDE”VARCHAR2(4)、
“DATE_DERNIER_ENTRETIEN”日期,
“PERIODICITE_PREVUE”VARCHAR2(30),
“DATE_PROCHAIN_ENTRETIEN" DATE,
"ORGANISME_ENTRETIEN" VARCHAR2(60),
“OBSERVATIONS_ENTRETIEN”VARCHAR2(30)、
“CREATEUR”VARCHAR2(55)、
“COUT_TOTAL”VARCHAR2(50)、
“DATE_DECISION_CP”日期、
“SUBVENTION_ITINERAIRE”编号(8,2)、
“SUBVENTION_TOPO”编号(8,2)、
“ OBSERVATIONS_ADMIN" VARCHAR2(255),
"HEBERGEMENT" VARCHAR2(30),
"MONUMENTS" VARCHAR2(30),
"OBSERVATIONS_TOURISTIQUES" VARCHAR2(30),
"GEOMETRIE" "MDSYS"."SDO_GEOMETRY" ,
"COMMUNE_DEPART" VARCHAR2(55),
"COMMUNE_ARRIVEE" VARCHAR2(55),
"FICHIER_TOPO_GUIDE"VARCHAR2(255)
)