Sql 警告:使用编译错误创建的触发器。I';我对创建触发器感到困惑
创建一个名为SEQ_CUSTOMER的序列和一个名为TR_CUSTOMER_ID的触发器,该触发器将自动为C_ID列生成一个数字序列。该序列应从10000开始,递增1Sql 警告:使用编译错误创建的触发器。I';我对创建触发器感到困惑,sql,oracle,Sql,Oracle,创建一个名为SEQ_CUSTOMER的序列和一个名为TR_CUSTOMER_ID的触发器,该触发器将自动为C_ID列生成一个数字序列。该序列应从10000开始,递增1 CREATE SEQUENCE "SEQ_CUSTOMER" MINVALUE 50 MAXVALUE 999999999990 INCREMENT BY 1 START WITH 10000; CREATE OR REPLACE TRIGGER "TR_CUSTOMER_ID" BEFORE INSE
CREATE SEQUENCE "SEQ_CUSTOMER"
MINVALUE 50 MAXVALUE 999999999990
INCREMENT BY 1
START WITH 10000;
CREATE OR REPLACE TRIGGER "TR_CUSTOMER_ID"
BEFORE INSERT ON "CUSTOMERS"
FOR EACH ROW
BEGIN
SELECT "SEQ_CUSTOMER". NEXTVAL INTO :NEW.C_ID FROM DUAL;
END;
警告:使用编译错误创建触发器
SQL> SHOW ERRORS;
Errors for TRIGGER "TR_CUSTOMER_ID":
LINE/COL ERROR
-------- -----------------------------------------------------------------
2/1 PL/SQL: SQL Statement ignored
2/9 PL/SQL: ORA-02289: sequence does not exist
SQL>
如何解决这个问题,谢谢是第一位的
DROP SEQUENCE SEQ_CUSTOMER;
CREATE SEQUENCE SEQ_CUSTOMER START WITH 10000;
第二
CREATE OR REPLACE TRIGGER TR_CUSTOMER_ID
BEFORE INSERT
ON CUSTOMERS
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
BEGIN
:new.C_ID := SEQ_CUSTOMER.nextval;
END TR_CUSTOMER_ID;
删除触发器中的空格,也可以在引号之间写入空格
CREATE SEQUENCE "SEQ_CUSTOMER"
MINVALUE 50 MAXVALUE 999999999990
INCREMENT BY 1
START WITH 10000
/
CREATE OR REPLACE TRIGGER "TR_CUSTOMER_ID"
BEFORE INSERT ON "CUSTOMERS"
FOR EACH ROW
BEGIN
SELECT SEQ_CUSTOMER.NEXTVAL
INTO :new.ID
FROM dual;
END;
/
丢失序列名称中的双引号。您可能使用了(不匹配的)空格。如GurV所述,序列名中有空格。失去引号。谢谢,我删除了whitesapsa的旁注:在这种情况下,没有必要将NEW AS NEW AS OLD AS OLD引用为NEW AS OLD另外,将序列值分配给变量的功能取决于版本,OP没有说明他/她使用的RDBMS的版本。谢谢!!!!但我想知道,为什么我需要在这里引用新旧一样的东西?