Oracle
 sql >> база данни >  >> RDS >> Oracle

Автоинкремент в oracle с seq и тригер - невалиден sql оператор

Подозирам, че проблемът е, че вашият клиентски инструмент чете всяка точка и запетая като край на команда, което води до неправилно предаване на PL/SQL кода (който изисква точки и запетая като терминатори на изрази) към сървъра.

Когато премахнете точката и запетая, изразът се изпраща правилно до сървъра, но в крайна сметка получавате невалиден обект, защото PL/SQL е неправилен.

Дублирах вашия проблем на SQL Fiddle. След това променям терминатора на оператора на / вместо ; и промени кода, за да използва наклонена черта за изпълнение на всеки оператор и той работи без грешка:

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 NUMBER(19, 4),
    comments VARCHAR2(250),
    objectives_and_results VARCHAR2(250),
    PRIMARY KEY (proposal_id)
)
/

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;
/


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. System.Data.OracleClient изисква клиентски софтуер на Oracle версия 8.1.7 или по-нова

  2. Инсталиране на примерни схеми за Oracle 12c с помощта на помощника за конфигуриране на база данни

  3. Инсталирайте Oracle Client от командния ред без взаимодействие с потребителя

  4. Как да видите действителния SQL оператор на Oracle, който се изпълнява

  5. Има ли значение редът на таблиците, посочен в клаузата ON на JOIN?