sql >> Databáze >  >> RDS >> Oracle

Autoincrement v oracle se seq a triggerem - neplatný SQL příkaz

Domnívám se, že problém je v tom, že váš klientský nástroj čte každý středník jako konec příkazu, což způsobuje, že kód PL/SQL (který vyžaduje středníky jako zakončení příkazů) je nesprávně přenášen na server.

Když středník odstraníte, příkaz se správně odešle na server, ale skončíte s neplatným objektem, protože PL/SQL je nesprávné.

Duplikoval jsem váš problém na SQL Fiddle. Poté změním terminátor příkazu na / místo ; a změnil kód tak, aby používal lomítko k provedení každého příkazu, a fungovalo to bez chyby:

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. Hledání pozice čísla v řetězci

  2. Humanizované nebo přirozené třídění smíšených slovních a číselných řetězců

  3. Jak se tento výraz CASE dostane do klauzule ELSE?

  4. Měl bych uložit cenu jako desítkové nebo celé číslo v Mysql?