Torna indietro   Hardware Upgrade Forum > Software > Programmazione

DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
Fino a 740 km WLTP con la batteria da 97,2 kWh, sospensioni che leggono la strada con una telecamera e un abitacolo da salotto parigino. La nuova DS N°7 raccoglie l'eredità della DS 7 e la porta, per la prima volta, nel mondo 100% elettrico. Ecco come è fatta, cosa offre e quanto costa.
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più
Abbiamo provato Samsung Galaxy Tab S12 Ultra nella versione 12 GB + 256 GB con tastiera, e il risultato è un tablet che in questa configurazione si comporta come un notebook con la fluidità tipica di Android. Spessore di 5,1 mm, display Dynamic AMOLED 2X da 14,6 pollici, MediaTek Dimensity 9500 e un software senza incertezze compongono un prodotto di vertice, con prezzi da 1.539 euro, frenato solo da un'autonomia nella parte bassa del confronto
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura)
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura)
Abbiamo provato per dieci giorni la Hyundai IONIQ 5 N, con 650 CV, 770 Nm e uno 0-100 km/h in 3,4 secondi. Il suo punto forte è N e-Shift, che simula un cambio a otto rapporti con suoni da motore termico e perfino un bang supersonico
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


DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più Recensione Samsung Galaxy Tab S12 Ultra: non chi...
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura) Hyundai IONIQ 5 N, l'elettrica che finge di esse...
CES Unveiled Milan, l'IA diventa tecnologia fondativa e il commercio torna centrale CES Unveiled Milan, l'IA diventa tecnologia fond...
 Recensione OPPO Find X10 Pro Max: un top di gamma completo con tre fotocamere da 200MP Recensione OPPO Find X10 Pro Max: un top di gam...
Già sfruttata la falla Brotli che...
Potrebbe essere stato scoperto un nuovo ...
Claude Code, il prompt per scovare telec...
Palit e GALAX smentiscono le voci sulla ...
Fujifilm annuncia la Instax Mini Evo 2, ...
Tailscale chiude le falle SSH verso root...
Il tuo Galaxy laggava nei giochi? Samsun...
Arrivano i nuovi Amazon Echo: prezzi da ...
Il nuovo pickup elettrico Ford può alime...
Opera WebAI: così l'intelligenza artific...
Copilot nella Sidebar di Edge sparisce p...
X terrorizza gli utenti con una mano gig...
Firmware UEFI, embargo saltato per error...
Android 18 limiterà le modifiche alla ru...
Silent Hill 1 Remake, nuove indiscrezion...
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: 15:26.


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