Я новичок в oracle, исходя из MySQL, и я пытаюсь получить автоинкремент для работы в Oracle с последовательностью и триггером, чтобы он увеличивал мое поле на один , каждый раз, когда я делаю вставку.Автоинкремент в oracle с seq и trigger - invalid sql statement
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
Если я удалить ";" после оператора выбора, я не получаю сообщение об ошибке, пока я пытаюсь вставить данные в таблицу, то я получаю эту ошибку:
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 Enterprise Edition Release 11.2. 0.1.0 - 64-разрядные Производство
Все статьи, которые я нашел об этом, кажется, делает это так, и ответы здесь как хорошо: How to create id with AUTO_INCREMENT on Oracle?
Может ли это быть из-за моей версии 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)
);
Вам не нужно создавать триггер. Просто добавьте nextval вашей последовательности прямо в вашу команду вставки, например, как «вставить в предложения (предложение_ид, ....)» (предложения_seq.nextval, ...) ' –
Я бы хотел избежать этого, так что он всегда согласован , –
Возможно ли, что у вас нет процедурной опции? http://www.dba-oracle.com/sf_ora_00900_invalid_sql_statement.htm - Или, может быть, вы пытаетесь выполнить вышеуказанное в инструменте, который не распознает PL/SQL? http://stackoverflow.com/questions/14868229/how-to-install-procedural-option-in-oracle-11gr2 –