Domanda

Ho appena iniziato ad imparare SQL poche settimane fa e sto cercando di fare un grilletto che cambia il valore inserito in 10 se è più piccolo di 10. Ho cercato per 4 ore e ho trovato moltorisposte ma nessuno era buono (per me).Non capisco davvero dove sia il problema. Ecco il codice:

CREATE OR REPLACE TRIGGER NumberOfBooks
BEFORE INSERT
ON Book
FOR EACH ROW
BEGIN 
  IF new.nobook < 10
  THEN
    SET new.nobook = 10;
  END IF;
  END;
.

È stato utile?

Soluzione

In Trigger Sintassi di Oracle Il record appena inserito è indicato da :new, non new (nota il colon).Inoltre, SET è parte di un'istruzione Aggiornamenti, non è un modo per impostare i valori del campo, quelli sono eseguiti da semplici assegnazioni, ma si noti che questi sono eseguiti con := anziché =.
. Quindi, il tuo trigger dovrebbe leggere:

CREATE OR REPLACE TRIGGER NumberOfBooks
    BEFORE INSERT
    ON book
    FOR EACH ROW
BEGIN
    IF :new.nobook < 10
    THEN
        :new.nobook := 10;
    END IF;
END;
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top