.dsy:it. Pages (2): « 1 [2]
Show 150 posts per page

.dsy:it. (http://www.dsy.it/forum/)
- Basi di dati ~ comunicazione digitale (http://www.dsy.it/forum/forumdisplay.php?forumid=108)
-- Esame Perlasca (http://www.dsy.it/forum/showthread.php?threadid=26045)


Posted by Laertes on 25-06-2006 18:07:

Mi sembra ovvio che essendoci l'esercizio sui trigger bisogna sapere PL/SQL quindi bisogna studiarsi tutto il pdf di MisterOracle su PL/SQL, quello protetto da password e con sfondo blu orribile per far si che non lo stampiamo... mannaggia a lui ho dovuto leggerlo tutto a computer...

Le domande di teoria, quando ho chiesto a Perlasca, non mi ha detto che sicuramente non ci saranno, era un "tendenzialmente no", ma era tutt'altro che sicuro...

Invece io ho un dubbio sull'esercizio di laboratorio, Perlasca sul sito ha scritto che sarà principalmente sulla parte di Php e dei Trigger, ora perchè mettere quel "principalmente" se PHP e Trigger sono praticamente TUTTO lab??!! visto che per saper fare i trigger bisogna sapere SQL e PL/SQL?? e soprattutto se l'esercizio è 1, come fa ad essere sia su php che sui trigger???... o è uno ma mastodontico... oppure nn so...


Posted by yeah on 26-06-2006 16:17:

code:
IF(New.Smatr = Smatr) raise Exception("Già iscritto"); rollback;

Le altre porzioni sono giuste, su questa ho qualche dubbio: credo sia il trigger che mi ha messo in difficoltà all'esame.

Il problema è che il trigger si attiva e hai i valori in new, ma non ci sono riferimenti alle altre tuple della tabella (a meno che io mi sbagli). Ora lo scriverei così
code:
DECLARE res INTEGER; -- dovrà contenere 0 o 1 BEGIN SELECT 1 INTO res FROM Iscrizione WHERE Smatr=:new.Smatr; IF(res == 1) -- la matricola c'è già ROLLBACK; END IF; END.


Non sono sicuro della sintassi al 100%

In pratica se la query ha successo restituirà 1, altrimenti 0.
Il tutto si poteva scrivere anche così:

code:
DECLARE matr Iscrizione.Smatr%type; BEGIN SELECT Smatr INTO matr FROM Iscrizione WHERE Smatr=:new.Smatr; IF(matr != null) -- la matricola c'è già ROLLBACK; END IF; END.


Qui sono ancora più insicuro sulla sintassi, di certo questo modo è più complesso e se la query ritorna 2 matricole non penso funzioni (anche se si può considerare il fatto che Smatr è probabilmente chiave primaria -> necessariamente univoca)

__________________
?


All times are GMT. The time now is 06:23. Pages (2): « 1 [2]
Show all 17 posts from this thread on one page

Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.