Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Polestar 3 Performance, test drive: comodità e potenza possono convivere
Polestar 3 Performance, test drive: comodità e potenza possono convivere
Abbiamo passato diversi giorni alla guida di Polestar 3, usata in tutti i contesti. Come auto di tutti i giorni è comodissima, ma se si libera tutta la potenza è stupefacente
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
In occasione del proprio Architecture Deep Dive 2025 Qualcomm ha mostrato in dettaglio l'architettura della propria prossima generazione di SoC destinati ai notebook Windows for ARM di prossima generazione. Snapdragon X2 Elite si candida, con sistemi in commercio nella prima metà del 2026, a portare nuove soluzioni nel mondo dei notebook sottili con grande autonomia
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
DJI Mini 5 Pro porta nella serie Mini il primo sensore CMOS da 1 pollice, unendo qualità d'immagine professionale alla portabilità estrema tipica di tutti i prodotti della famiglia. È un drone C0, quindi in un peso estremamente contenuto e che non richiede patentino, propone un gimbal rotabile a 225 gradi, rilevamento ostacoli anche notturno e autonomia fino a 36 minuti. Caratteristiche che rendono il nuovo drone un riferimento per creator e appassionati
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 24-02-2009, 15:10   #1
antony85
Member
 
Iscritto dal: Jan 2006
Messaggi: 199
[PL/SQL]Trigger nn funzionante

salve,utilizzo il seguente trigger in modo ke controlli che i valori inseriti nella tabella zb.nome non siano gli stessi presenti in za.nome...il trigger viene compilato,ma al momento dell'esecuzione,oracle presenta l'errore
"superato numero massimo di livelli sql ricorsivi(50)"
come posso risolvere??

CREATE OR REPLACE TRIGGER tr4
BEFORE INSERT ON zb
FOR EACH ROW
DECLARE
CURSOR c1 IS (SELECT nome FROM za);
varc1 c1%rowtype;
app EXCEPTION;
flag boolean:=FALSE;
BEGIN
OPEN c1;
LOOP
FETCH c1 INTO varc1;
EXIT WHEN c1%NOTFOUND;
IF :NEW.nome = varc1.nome THEN
RAISE app;
END IF;
END LOOP;
IF flag= FALSE then
INSERT INTO zb(nome,prezzo_singolo)VALUES(:NEW.nome,:NEW.prezzo_singolo);
COMMIT;
END IF;
EXCEPTION
WHEN app THEN
Raise_Application_Error(-20002,'Errore parola gia presente in za');
END;
__________________
Asus P5B-Intel Core Duo E6400-Kingston 1GB 667-Sapphire X1900gt rev.2-Maxtor 200gb Sata 2-Ali 450w schifoso in attesa di enermax 400
antony85 è offline   Rispondi citando il messaggio o parte di esso
Old 24-02-2009, 17:55   #2
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Non si capisce se devi farlo come esercizio o se ti serve veramente...
Comunque, in qualsiasi caso

dentro un trigger BEFORE INSERT on zb(o AFTER INSERT) non bisogna scrivere di nuovo uno statement di
INSERT INTO zb, altrimenti il motore entra in ricorsione e viene fuori quell'errore.

COMMIT dentro un trigger manco a parlarne (ma tanto se togli la insert di cui prima magari non ti viene neppure voglia di fare la commit...)
Se sai come funzionano le transazioni capisci anche quanti danni puo' fare un COMMIT nascosto dentro un Trigger.

Avere risolto con un cursore tale trigger significa peggiorare di tanto qualcosa che si puo' fare con un semplice SELECT di controllo di esistenza di quanto stai testando.


A mio avviso una soluzione migliore sarebbe un TRIGGER INSTEAD OF, nel quale potresti fare una INSERT... WHERE NOT EXISTS, controllare se sei riuscito ad inserire altrimenti sollevi l'eccezione.
Nessun cursore, 4/5 righe di codice
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 24-02-2009, 20:59   #3
shinya
Senior Member
 
L'Avatar di shinya
 
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
Si davvero, io me ne sono stato zitto per non sembrare un cagacazzo ma... perchè un trigger per queste cose?!?
shinya è offline   Rispondi citando il messaggio o parte di esso
Old 25-02-2009, 01:44   #4
antony85
Member
 
Iscritto dal: Jan 2006
Messaggi: 199
chiaramente è giusto x uno scopo didattico...x cercare di esercitarsi qnt piu possibile su problemi autoinventati..
__________________
Asus P5B-Intel Core Duo E6400-Kingston 1GB 667-Sapphire X1900gt rev.2-Maxtor 200gb Sata 2-Ali 450w schifoso in attesa di enermax 400
antony85 è offline   Rispondi citando il messaggio o parte di esso
Old 25-02-2009, 14:51   #5
antony85
Member
 
Iscritto dal: Jan 2006
Messaggi: 199
scusami ma a livello di sintassi come devo scrivere "where not exist"?
__________________
Asus P5B-Intel Core Duo E6400-Kingston 1GB 667-Sapphire X1900gt rev.2-Maxtor 200gb Sata 2-Ali 450w schifoso in attesa di enermax 400
antony85 è offline   Rispondi citando il messaggio o parte di esso
Old 25-02-2009, 15:22   #6
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da antony85 Guarda i messaggi
scusami ma a livello di sintassi come devo scrivere "where not exist"?
Qualcosa tipo

Quote:
INSERT INTO zb (nome, prezzo_singolo)
SELECT :NEW.nome,:NEW.prezzo_singolo
FROM dual
WHERE NOT EXISTS (SELECT 1 FROM za WHERE za.nome=:NEW.nome)
Dopo questa istruzione puoi valutare quante righe sono state inserite, ovvero 0 oppure 1 (la dual ha una sola riga, quindi al massimo sara' inserita 1 riga, proprio quella che vuoi tu).
E prendere di conseguenza la decisione se sollevare l'eccezione oppure no.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 25-02-2009, 16:20   #7
antony85
Member
 
Iscritto dal: Jan 2006
Messaggi: 199
grazie mille gugo
__________________
Asus P5B-Intel Core Duo E6400-Kingston 1GB 667-Sapphire X1900gt rev.2-Maxtor 200gb Sata 2-Ali 450w schifoso in attesa di enermax 400
antony85 è offline   Rispondi citando il messaggio o parte di esso
Old 25-02-2009, 17:28   #8
antony85
Member
 
Iscritto dal: Jan 2006
Messaggi: 199
ok,ho risolto il problema di prima(semplicemente mi è bastato togliere la insert nel trigger(ke generava il problema ricorsivo)).

Ora ho un altro problema,il quale gestisce le date:
in pratica come input ho una data completa(20-gen-85) e voglio effettuare dei controlli sopra,ovvero ke se la data è compresa in un periodo(ovvero dal 1 gennaio al 31 marzo) fai questo,altrimenti se compresa in un altro periodo(1 aprile 31 giugno)fai quest'altro.il problema è ke la data incorpora anche il campo anno,ke a me da problemi nei confronti coi periodi(i quali sono senza anno),quindi magari avrei bisogno di caratteri "jolly" per poter fare il confronto...cm si fa?
__________________
Asus P5B-Intel Core Duo E6400-Kingston 1GB 667-Sapphire X1900gt rev.2-Maxtor 200gb Sata 2-Ali 450w schifoso in attesa di enermax 400
antony85 è offline   Rispondi citando il messaggio o parte di esso
Old 26-02-2009, 13:42   #9
antony85
Member
 
Iscritto dal: Jan 2006
Messaggi: 199
up
__________________
Asus P5B-Intel Core Duo E6400-Kingston 1GB 667-Sapphire X1900gt rev.2-Maxtor 200gb Sata 2-Ali 450w schifoso in attesa di enermax 400
antony85 è offline   Rispondi citando il messaggio o parte di esso
Old 26-02-2009, 15:28   #10
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Prova a studiare la funzione TO_CHAR(di una data), e con quella potrai poi giocare con la BETWEEN per i periodi.

Comunque non so se hai capito che la soluzione con il cursore non e' soddisfacente.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Polestar 3 Performance, test drive: comodità e potenza possono convivere Polestar 3 Performance, test drive: comodit&agra...
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026 Qualcomm Snapdragon X2 Elite: l'architettura del...
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice Recensione DJI Mini 5 Pro: il drone C0 ultra-leg...
ASUS Expertbook PM3: il notebook robusto per le aziende ASUS Expertbook PM3: il notebook robusto per le ...
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
Grazie a VLT è stata misurata dir...
Blue Origin annuncia un aerofreno ripieg...
Blue Origin annuncia una nuova versione ...
LG UltraFine evo 6K: il primo monitor al...
DJI cambia direzione: investe in Elegoo ...
Black Friday Narwal 2025: risparmi da ca...
Phishing evoluto contro Apple ID: caso f...
Prestazioni in discesa nei giochi? NVIDI...
Addio ai banner dei cookie? L'UE spinge ...
Le offerte Black Friday per gli smartpho...
Il controllo qualità degli iPhone...
Qualcomm Snapdragon X Elite vola con il ...
A2RL Season 2: storia, innovazione e sor...
Core Ultra Series 3: Intel conferma l'ev...
Black Friday Amazon: la GeForce RTX 5070...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 03:12.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v