|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Aug 2004
Città: Provincia di Monza e Brianza
Messaggi: 6274
|
[ORACLE 9 - SQL] Ordinamento bacato ?
Ciao, ho un 'problema' strano con Oracle 9.
Se faccio una select normalissima con: Codice:
WHERE Campo_testo >= 'PIPPO' Se faccio la WHERE usando "UPPER(Campo_testo)" , tutto va, ma vorrei capire PERCHE' c'è questo 'bug' in Oracle9....con la 8i non lo fa.
__________________
AMD Ryzen 5 7600X - Dissipatore Thermalright Assassin King 120SE - RAM Kingston Fury Beast 2x16Gb DDR5 CL30 @ 6000 - Motherboard ASROCK B650 Pro RS - NVME Kingston KC3000 2Tb - PSU FSP Hydro PRO 600w - Win 11 PRO |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Jan 2005
Città: Siena
Messaggi: 1313
|
Quote:
O no?
|
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Aug 2004
Città: Provincia di Monza e Brianza
Messaggi: 6274
|
Mi spiego meglio, il collega mi ha dato altre info....
Allora, situazione 'normale': Select) SELECT con una ORDER BY Colonna Risultato) Elenco ordinato "A", "a2", "A3", "a4".... giusto Select) SELECT con una ORDER BY Colonna e WHERE Colonna >= "A" Risultato) Elenco "a2", "A","A3", ... Praticamente mette prima la minuscola (e perchè poi ?) e poi le altre.
__________________
AMD Ryzen 5 7600X - Dissipatore Thermalright Assassin King 120SE - RAM Kingston Fury Beast 2x16Gb DDR5 CL30 @ 6000 - Motherboard ASROCK B650 Pro RS - NVME Kingston KC3000 2Tb - PSU FSP Hydro PRO 600w - Win 11 PRO |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Jan 2005
Città: Siena
Messaggi: 1313
|
Quote:
|
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
mah, io ho provato a creare una tabella di prova inserendo 'AAAA', 'aaaa', 'BBBB', 'bbbb', ecc... e non mi da risultati strambi (anch'io ho il 9i installato sul portatile al momento).
Fammi un esempio di tabella che la intendi tu con qualche insert e un esempio di select (posta l'sql cosi posso fare le prove in sqlplus). Sarebbe utile anche l'execution plan che ti salta fuori magari.
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Aug 2004
Città: Provincia di Monza e Brianza
Messaggi: 6274
|
Molto strano...sul mio PC funziona, su quello di una collega no.
Usiamo TOAD per fare le select, però lei ha l'Oracle 8i client, io la 9.2 (come quella del DB sul server). Un esempio ? basta mettere una fila di dati, fare una order by e poi aggiungere una 'Where' sullo stesso campo della order, dicendo chessò " Campo >= 'A' " Sul PC della collega, sballa tutto.
__________________
AMD Ryzen 5 7600X - Dissipatore Thermalright Assassin King 120SE - RAM Kingston Fury Beast 2x16Gb DDR5 CL30 @ 6000 - Motherboard ASROCK B650 Pro RS - NVME Kingston KC3000 2Tb - PSU FSP Hydro PRO 600w - Win 11 PRO |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Quote:
Cosa sarebbe poi? Dopo la ORDER BY la WHERE non puoi mettercela. Ma state scrivendo dell'SQL o state lavorando solo con la UI di TOAD?
__________________
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. |
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Aug 2004
Città: Provincia di Monza e Brianza
Messaggi: 6274
|
No dico, "aggiungere una WHERE" alla select, lo so che non va dopo la ORDER...
__________________
AMD Ryzen 5 7600X - Dissipatore Thermalright Assassin King 120SE - RAM Kingston Fury Beast 2x16Gb DDR5 CL30 @ 6000 - Motherboard ASROCK B650 Pro RS - NVME Kingston KC3000 2Tb - PSU FSP Hydro PRO 600w - Win 11 PRO |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Aug 2004
Città: Provincia di Monza e Brianza
Messaggi: 6274
|
Ecco una 'foto' dell'assurdità, questa situazione è sia per un client 8 che per un client 9.1 che si collegano ad un DB 9.1
![]() Notare la posizione di "cdatipers" rispetto a "CSOCIALI" nella select a sinistra e poi nella select a destra.....
__________________
AMD Ryzen 5 7600X - Dissipatore Thermalright Assassin King 120SE - RAM Kingston Fury Beast 2x16Gb DDR5 CL30 @ 6000 - Motherboard ASROCK B650 Pro RS - NVME Kingston KC3000 2Tb - PSU FSP Hydro PRO 600w - Win 11 PRO |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
...
ma usare al posto di: Codice:
SELECT con una ORDER BY Colonna e WHERE Colonna >= "A" Codice:
SELECT con una ORDER BY Colonna e WHERE Colonna LIKE "A%"
__________________
|
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Aug 2004
Città: Provincia di Monza e Brianza
Messaggi: 6274
|
Quote:
Purtroppo non ho scritto io il programma che genera quella Select, e il collega dice che ha bisogno di un ordinamento secondo un filtro che decide l'utente.
__________________
AMD Ryzen 5 7600X - Dissipatore Thermalright Assassin King 120SE - RAM Kingston Fury Beast 2x16Gb DDR5 CL30 @ 6000 - Motherboard ASROCK B650 Pro RS - NVME Kingston KC3000 2Tb - PSU FSP Hydro PRO 600w - Win 11 PRO |
|
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
Quote:
pensavo dovessi mostrare solo la colonna a dato che avevi mostrato quell'esempio... Cmq non mi pare tanto normale utilizzare un operatore > in una clausola where su un campo testuale
__________________
|
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Sotto Oracle la comparazione (clausola WHERE) e' pilotata da un operatore diverso da quello di ordinamento (clausola ORDER BY)
Probabilmente non sono settati correttamente in maniera da lavorare allo stesso modo. E' probabile che l'operatore di comparazione del tuo collega sia case sensitive, mentre quello di ordinamento case insensitive. Se li volete entrambi insensitive (normalmente si lavora cosi'), provate a cambiare questi due parametri di sessione Codice:
alter session set NLS_COMP=LINGUISTIC; alter session set NLS_SORT=BINARY_CI;
__________________
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. |
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Aug 2004
Città: Provincia di Monza e Brianza
Messaggi: 6274
|
Quote:
Codice:
alter session set NLS_COMP=ANSI
__________________
AMD Ryzen 5 7600X - Dissipatore Thermalright Assassin King 120SE - RAM Kingston Fury Beast 2x16Gb DDR5 CL30 @ 6000 - Motherboard ASROCK B650 Pro RS - NVME Kingston KC3000 2Tb - PSU FSP Hydro PRO 600w - Win 11 PRO Ultima modifica di Spike79 : 11-02-2008 alle 16:04. |
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Sono variabili di sessione.
Si cambiano con una istruzione normale. Sottomettetele dopo aver aperto la connessione verso il DB, oppure ogniqualvolta aprite la connessione verso il DB. Alternativamente potete forzarle sul server, dall'enterprise manager.
__________________
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. |
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Aug 2004
Città: Provincia di Monza e Brianza
Messaggi: 6274
|
Ok, visto che le chiamate di apertura connessione e selezione non possono modificarle, mi chiedono DOVE forzarle con l'entrerprise manager (ho frugato in lungo e in largo, ma non trovo dove modificare le variabili di avvio....e se lo facessi con TOAD ?)
__________________
AMD Ryzen 5 7600X - Dissipatore Thermalright Assassin King 120SE - RAM Kingston Fury Beast 2x16Gb DDR5 CL30 @ 6000 - Motherboard ASROCK B650 Pro RS - NVME Kingston KC3000 2Tb - PSU FSP Hydro PRO 600w - Win 11 PRO |
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Da Toad non si puo', o meglio, ci sono i menu DBA, ma non li ho mai guardati.
Certe cose e' meglio farle direttamente con i tool Oracle, soprattutto parametri di istanza. Inoltre se non sai bene cosa stai facendo rischi di cambiare i parametri solo per la sessione corrente, ma durante la prossima sessione ritornano come settati sul server. Per sapere come sono messi ora sul server da TOAD puoi leggere la vista di sistema SELECT * FROM v$parameter; Non ho l'enterprise manager della 9i sotto mano (nella 10 e nella 11 e' tutto web), ma e' nei parametri di configurazione dell'istanza. Ma chi e' che ti sta chiedendo come si fanno a modificare? Spero che non siano dei DBA...
__________________
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. |
|
|
|
|
|
#18 | |
|
Senior Member
Iscritto dal: Aug 2004
Città: Provincia di Monza e Brianza
Messaggi: 6274
|
Quote:
Chi mi chiede queste cose son dei semplici programmatori come me (loro cobolisti però) e visto che io son quello che 'mastica' un pò più SQL e Oracle, e che magari si sa destreggiare meglio con le guide e le ricerche online, mi chiedono info su ogni stranezza che il DB gli fa. Avessi sottomano un DBA, lo tartasserei ben bene.... Cmq, da TOAD c'è un menu apposito per gli NLS_PARAMETER , ma purtroppo permette solo di visualizzare quelli di Istance e DB, e di mod. solo quelli di Sessione... Da E.Manager proprio non riesco a venirne a capo...manco nella guida è spiegato dove modificare quel valore !
__________________
AMD Ryzen 5 7600X - Dissipatore Thermalright Assassin King 120SE - RAM Kingston Fury Beast 2x16Gb DDR5 CL30 @ 6000 - Motherboard ASROCK B650 Pro RS - NVME Kingston KC3000 2Tb - PSU FSP Hydro PRO 600w - Win 11 PRO |
|
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Comunque sia prima di modificare i parametri a livello di istanza mi accerterei che la soluzione sia quella giusta.
Se provate a cambiare sulla sessione di TOAD della tua collega quei 2 parametri e poi successivamente, sempre nella stessa finestra provate a sottomettere la query, i risultati vengono come vi aspettate?
__________________
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. |
|
|
|
|
|
#20 | |
|
Senior Member
Iscritto dal: Aug 2004
Città: Provincia di Monza e Brianza
Messaggi: 6274
|
Quote:
Basta mettere ANSI a NLS_COMP. Se invece lo prova il collega con Oracle 8 su un DB Oracle 8, non serve, va bene anche Binary.
__________________
AMD Ryzen 5 7600X - Dissipatore Thermalright Assassin King 120SE - RAM Kingston Fury Beast 2x16Gb DDR5 CL30 @ 6000 - Motherboard ASROCK B650 Pro RS - NVME Kingston KC3000 2Tb - PSU FSP Hydro PRO 600w - Win 11 PRO |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:49.




















