Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di inc40
    Registrato dal
    Sep 2004
    Messaggi
    319

    Drop table alla cancellazione di un record

    Salve,
    ho 2 tabella, TABA(ATTR1, ATTR2) e TABB(ATTR3, ATTR4) con ATTR1 definito come FOREIGN KEY su ATTR3.
    Voglio fare in modo che quando il record di TABB viene cancellato, allora deve essere eliminata la tabella TABA.
    E' possibile?

    Grazie
    Gli uomini, non avendo potuto guarire la morte, la miseria, l'ignoranza, hanno risolto, per vivere felici, di non pensarci.

  2. #2
    Sei davvero sicuro di volerlo fare? Non è che puoi ottenere gli stessi risultato riprogettando la struttura del database?

    In ogni caso puoi implementare quello che chiedi utilizzando un trigger:

    http://dev.mysql.com/doc/refman/5.0/en/triggers.html

  3. #3
    Utente di HTML.it L'avatar di inc40
    Registrato dal
    Sep 2004
    Messaggi
    319
    Originariamente inviato da filippo.toso
    Sei davvero sicuro di volerlo fare?
    Grazie filippo...ma devo proprio farlo
    Ma è possibile capire però, all'interno del trigger, qual è la riga che viene cancellata?
    Devo sapere qual è la riga cancellata in quanto essa contiene, in un campo, informazioni sulla tabella da cancellare (una parte del nome, per la precisione)

    Grazie
    Gli uomini, non avendo potuto guarire la morte, la miseria, l'ignoranza, hanno risolto, per vivere felici, di non pensarci.

  4. #4
    Utente di HTML.it L'avatar di inc40
    Registrato dal
    Sep 2004
    Messaggi
    319
    Ho trovato...con OLD.campo ottengo il valore di "campo" della riga cancellata
    Resta il problema che sono un po' arruginito con la sintassi:
    Ecco ciò che voglio fare:

    codice:
    CREATE TRIGGER DROP_TABELLA AFTER DELETE ON MIA_TABELLA
    
    FOR EACH ROW
    
    DECLARE
    NOME_TABELLA VARCHAR2(100);
    NOME_TABELLA_DA_CANCELLARE VARCHAR2(100);
    
    BEGIN	
    	/*
    	Qui leggo il campo NOME della riga cancellata, e lo converto in upper case 
    	*/        
    	SELECT UPPER(:OLD.NOME)
    	INTO NOME_TABELLA
    	FROM MIA_TABELLA;
    
    	/*
    	Qui leggo, tra tutte le tabelle presenti nel database, la tabella il cui nome contenga la stringa in 'NOME_TABELLA' 
    	*/        
    	SELECT TNAME
    	INTO NOME_TABELLA_DA_CANCELLARE
    	FROM SYS.TAB
    	WHERE TNAME LIKE '%NOME_TABELLA%';
    
    	/*
    	Qui cancello la tabella 'NOME_TABELLA_DA_CANCELLARE' 
    	*/    
    	DROP TABLE 'NOME_TABELLA_DA_CANCELLARE' CASCADE;
    
    END;
    ma mi viene restituito l' errore PLS-00103: Trovato il simbolo DROP...

    Ma a parte l'errore, non sono sicuro di come usare le quotazioni degli identificatori

    E' possibile un aiuto?

    Grazie
    Gli uomini, non avendo potuto guarire la morte, la miseria, l'ignoranza, hanno risolto, per vivere felici, di non pensarci.

  5. #5
    Utente di HTML.it L'avatar di inc40
    Registrato dal
    Sep 2004
    Messaggi
    319
    Sono riuscito a compilare senza errore il seguente trigger:
    codice:
    CREATE TRIGGER DROP_TABELLA AFTER DELETE ON MIA_TABELLA
    
    FOR EACH ROW
    
    DECLARE
    
    NOME_TABELLA VARCHAR2(100);
    NOME_TABELLA_DA_CANCELLARE VARCHAR2(100);
    
    
    BEGIN
    	
    	/*
    	Qui leggo il campo NOME della riga cancellata, e lo converto in upper case 
    	*/        
    	SELECT UPPER(:OLD.NOME)
    	INTO NOME_TABELLA
    	FROM MIA_TABELLA;
    
    	/*
    	Qui leggo, tra tutte le tabelle presenti nel database, la tabella il cui nome contenga la stringa in 'NOME_TABELLA' 
    	*/        
    	SELECT TNAME
    	INTO NOME_TABELLA_DA_CANCELLARE
    	FROM SYS.TAB
    	WHERE TNAME LIKE '%:NOME_TABELLA%';
    
    	/*
    	Qui cancello la tabella 'NOME_TABELLA_DA_CANCELLARE' 
    	*/   
    	EXECUTE IMMEDIATE 'DROP TABLE :NOME_TABELLA_DA_CANCELLARE CASCADE';
    
    END;
    ma quando cancello una riga da MIA_TABELLA ottengo un messaggio di errore che fa riferimento a:

    ORA-06512: a "DROP_TABELLA", line 6
    ORA-04088: errore durante esecuzione del trigger 'DROP_TABELLA'

    Come mai?

    Grazie
    Gli uomini, non avendo potuto guarire la morte, la miseria, l'ignoranza, hanno risolto, per vivere felici, di non pensarci.

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.