我是 Oracle 的新手,来自 MySQL,我试图使用序列和触发器在 Oracle 中使用自动增量,以便每次插入时它都会将我的字段增加一。
CREATE SEQUENCE proposals_seq MINVALUE 1
START WITH 1 INCREMENT BY 1 CACHE 10;
CREATE OR REPLACE TRIGGER proposals_before_insert
BEFORE INSERT
ON proposals
FOR EACH ROW
BEGIN
SELECT proposals_seq.nextval INTO :new.proposal_id FROM dual;
END;
但是当我运行脚本时,我收到错误:
Error code 900, SQL state 42000: ORA-00900: invalid SQL statement
如果我删除“;”在 select 语句之后,我没有收到任何错误,直到我尝试将数据插入表中,然后我收到此错误:
INSERT INTO proposals (target_audience, line_of_business, activity_description, cost, comments, objectives_and_results)
VALUES ('test', 'test', 'test', 15, 'test', 'test');
Error code 4098, SQL state 42000: ORA-04098: trigger 'PROPOSALS_BEFORE_INSERT' is invalid and failed re-validation
我正在使用这个版本的Oracle:
Oracle Database 11g 企业版版本 11.2.0.1.0 - 64 位生产版
我找到的所有关于它的文章似乎都是这样做的,答案也在这里:如何在 Oracle 上使用 AUTO_INCRMENT 创建 id?
难道是我的Oracle版本的问题?我还有另一种方法可以自动增量吗?或者我是否必须手动增加 sql 中的序列?
我的桌子看起来像这样:
CREATE TABLE proposals (
proposal_id INT NOT NULL,
target_audience VARCHAR2(50) NOT NULL,
line_of_business VARCHAR2(50),
activity_description VARCHAR2(250) NOT NULL,
cost DECIMAL(19, 4) NOT NULL,
comments VARCHAR2(250),
objectives_and_results VARCHAR2(250),
PRIMARY KEY (proposal_id)
);