Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Autoinkrementacja w Oracle z sekwencją i wyzwalaczem - nieprawidłowa instrukcja sql

Podejrzewam, że problem polega na tym, że twoje narzędzie klienckie odczytuje każdy średnik jako koniec polecenia, powodując nieprawidłowe przesyłanie kodu PL/SQL (co wymaga średników jako terminatorów instrukcji) na serwer.

Gdy usuniesz średnik, instrukcja zostanie poprawnie wysłana do serwera, ale otrzymasz nieprawidłowy obiekt, ponieważ PL/SQL jest niepoprawny.

Zduplikowałem twój problem na SQL Fiddle. Następnie zmieniam terminator instrukcji na / zamiast ; i zmienił kod tak, aby używał ukośnika do wykonania każdej instrukcji i zadziałał bezbłędnie:

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. Co oznacza <> w Oracle?

  2. używanie EXECUTE IMMEDIATE z wieloma tymi samymi argumentami bind

  3. Powiązanie parametrów z Oracle Dynamic SQL

  4. Jak zweryfikować datę RRRRMMDD podaną jako parametr PL/SQL?

  5. Problem z ładowaniem Oracle.DataAccess.Dll na komputerze x-64