首页 文章

Oracle:创建auto_increment触发器时出现“解析失败”错误

提问于
浏览
0

我正在尝试为Oracle数据库的ID创建一个 auto_increment trigger .
经过一些研究,我发现了一种使用 sequencebefore insert trigger 编写一种方法的方法 .

问题是,当我执行触发器时,我有以下错误:

解析失败:创建或替换TRIGGER AUTO_INC_PDE_ITINERAIRE在插入PDE_ITINERAIRE之前为每行开始选择PDE_ITINERAIRE_ID_SEQUENCE.NEXTVAL INTO

如果我使用以下命令:

select * from SYS.USER_ERRORS where name = 'AUTO_INC_PDE_ITINERAIRE';

它返回以下输出:

第3行| Pos 10 | PLS-00201:标识符'NEW.PDE_ITINERAIRE'必须声明为Line 2 | Pos 03 | PL / SQL:SQL语句忽略第4行| Pos 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”DATE,“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))

2 回答

  • 0

    它是固定的!我终于下载了Oracle SQL Developer来检查另一个IDE中的触发器,它建议我在执行时链接一个值(NEW) . 最后一招完成了这项工作 .

    我假设Tora没有正确执行pl / sql,或者我错过了一个声明:NEW和SQL Developer修复它 .

    谢谢您的帮助 .

  • 2

    :new 是包含触发器的所有列的记录's table, so you can' t在引用时包括表名:

    :NEW.PDE_ITINERAIRE.ID_PDE_ITINERAIRE 应为 :NEW.ID_PDE_ITINERAIRE

    此外,您不需要 select ,您只需分配值(至少使用任何受支持的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;
    /
    

相关问题