Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [mySQL] - Creazione trigger per gestione contratto

    Ciao a tutti!!
    Sto studiando il linguaggio mySQL. Mi manca, però, la parte relativa ai trigger, che nel mio libro non è spiegato, ma che è invece presente nel programma del corso.
    Quindi, dopo aver dato un'occhiata in giro, ho provato a creare dei miei trigger.

    Vi faccio un esempio concreto, spero riusciate ad aiutarmi. Sto usando workbench per gestire il database.
    Supponiamo di avere 3 tabelle:
    Venditore(Codice venditore, Categoria1, Categoria2)
    Contratto(Versione, Data rilascio)
    Accettazione(Venditore, Contratto, Firma)

    Ovviamente ci sono dei vincoli di integrità referenziale tra Venditore e Codice venditore e Contratto e Versione. Quello che voglio ottenere è che se viene inserito un nuovo venditore, esso viene messo automaticamente nella tabella Accettazione e gli viene fatto accettare l'ultimo contratto presente.

    Ho provato perciò a fare così
    codice:
    -- Trigger DDL Statements
    DELIMITER $$
    
    USE `Grouppone`$$
    CREATE TRIGGER `check_contratto` 
    AFTER INSERT ON Grouppone.Venditore
    FOR EACH ROW
    BEGIN
     INSERT INTO Accettazione(Venditore)
     (
      SELECT `Codice venditore`
      FROM Venditore
     );
      INSERT INTO Accettazione(Contratto)
     (
      SELECT Versione
      FROM Grouppone.Contratto
      WHERE `Data rilascio` = 
     (
      SELECT MAX(`Data rilascio`)
      FROM Contratto
     )
    );
    END;
    
    DELIMITER;
    Quando vado ad inserire una nuova tupla, però, il programma però mi dice che c'è un errore.
    Qual è? Consigli e suggerimenti per migliorare o sviluppare in altro modo questo trigger?
    Inoltre, c'è qualche modo per far si che il trigger sia retroattivo?
    Grazie mille in anticipo a tutti

  2. #2
    Ho modificato il trigger in questo modo
    codice:
    -- Trigger DDL Statements
    DELIMITER $$
    
    USE `Grouppone`$$
    
    CREATE TRIGGER check_contratto 
    AFTER INSERT ON Venditore
    FOR EACH ROW
    BEGIN
    INSERT INTO Accettazione SET Venditore = NEW.`Codice venditore`;
    UPDATE Accettazione SET Contratto = 
    (
     SELECT Versione
     FROM Grouppone.Contratto
     WHERE `Data rilascio` = 
     (
      SELECT MAX(`Data rilascio`)
      FROM Contratto
     )
    )
    WHERE Venditore = NEW.`Codice venditore`;
    END; $$
    Tuttavia, per fare questo, ho dovuto togliere il campo Contratto dalla chiave di Accettazione. Infatti, inserendo un nuovo venditore, non riuscivo ad inserire una nuova riga in Accettazione, in quanto il campo Contratto era vuoto.

    Vi chiedo quindi: non c'è un modo per inserire direttamente questi due campi in accettazione? Ovvero, quando creo un nuovo venditore, c'è un modo per inserire (NEW.`Codice venditore`, Select ....)?

    Grazie a tutti

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.