-
Oracle-SQL questionScritto daNon Autenticatoil 2008-05-06 11:23:00.0 alle 2008-05-06 11:23:00.0C'è un modo più compatto per tirare fuori una colonna di numeri da uno a dieci in oracle?
Io faccio così ma fa palesemente cagareSELECT 1 NUM FROM DUAL UNION SELECT 2 NUM FROM DUAL UNION SELECT 3 NUM FROM DUAL UNION SELECT 4 NUM FROM DUAL UNION SELECT 5 NUM FROM DUAL UNION SELECT 6 NUM FROM DUAL UNION SELECT 7 NUM FROM DUAL UNION SELECT 8 NUM FROM DUAL UNION SELECT 9 NUM FROM DUAL UNION SELECT 10 NUM FROM DUAL
-
Re: Oracle-SQL questionScritto daNon Autenticatoil 2008-05-06 11:25:00.0 alle 2008-05-06 11:25:00.0
- Scritto da:
> C'è un modo più compatto per tirare fuori una
> colonna di numeri da uno a dieci in
> oracle?
> Io faccio così ma fa palesemente cagare
>> SELECT 1 NUM FROM DUAL > UNION > SELECT 2 NUM FROM DUAL > UNION > SELECT 3 NUM FROM DUAL > UNION > SELECT 4 NUM FROM DUAL > UNION > SELECT 5 NUM FROM DUAL > UNION > SELECT 6 NUM FROM DUAL > UNION > SELECT 7 NUM FROM DUAL > UNION > SELECT 8 NUM FROM DUAL > UNION > SELECT 9 NUM FROM DUAL > UNION > SELECT 10 NUM FROM DUAL >
Imparati il PL/SQL oracle non è solo SQL ma anche PL/SQL !!!! hai a disposizione un intero linguaggio di programmazione e fai ste porcate ?
-
Re: Oracle-SQL questionScritto daNon Autenticatoil 2008-05-06 11:39:00.0 alle 2008-05-06 11:39:00.0aspè che ho scoperto CallableStatement.
-
-
Re: Oracle-SQL questionScritto daavvelentaniCubicolarioil 2008-05-06 12:23:00.0 alle 2008-05-06 12:23:00.0Trollate totali: 18184pl/sql, linguaggio vero piu` db api, blablabla... ma che te ne fai di una colonna di numeri?

10 FOR I = 1 TO 10
20 PRINT I
30 NEXT I
I think happiness is love
- Vladimir Putin-
Re: Oracle-SQL questionScritto daNon Autenticatoil 2008-05-06 12:26:00.0 alle 2008-05-06 12:26:00.0
- Scritto da: avvelentani
> pl/sql, linguaggio vero piu` db api, blablabla...
> ma che te ne fai di una colonna di numeri?
>
>
> 10 FOR I = 1 TO 10
> 20 PRINT I
> 30 NEXT I
>
In realtà mi serve per calcolare un valore che può essere nullo in base ad un flag oppure il più piccolo non in uso. usavo l'accrocco di cui sopra e lo uso ancora perchè in un insert di dimensioni apocalittiche riesce a fare tutto quello che mi serve.-
Re: Oracle-SQL questionScritto daavvelentaniCubicolarioil 2008-05-06 14:21:00.0 alle 2008-05-06 14:21:00.0Trollate totali: 18184
- Scritto da:
>
> - Scritto da: avvelentani
> > pl/sql, linguaggio vero piu` db api,
> blablabla...
> > ma che te ne fai di una colonna di numeri?
> >
> >
> > 10 FOR I = 1 TO 10
> > 20 PRINT I
> > 30 NEXT I
> >
>
> In realtà mi serve per calcolare un valore che
> può essere nullo in base ad un flag oppure il più
> piccolo non in uso. usavo l'accrocco di cui sopra
> e lo uso ancora perchè in un insert di dimensioni
> apocalittiche riesce a fare tutto quello che mi
> serve.
non capisco (cosa c'entri la colonna di numeri).I think happiness is love
- Vladimir Putin-
Re: Oracle-SQL questionScritto daNon Autenticatoil 2008-05-06 14:41:00.0 alle 2008-05-06 14:41:00.0> non capisco (cosa c'entri la colonna di numeri).
Hòla ranona!
Scherzi a parte, ho una tabella così:
chiave1|chiave2|chiave3|...|flag|numero|
dove chiave1 e chiave2 sono chiavi di altre due tabelle. La mia insert fa così:INSERT INTO tabella (chiave1_fk, chiave2_fk, chiave3,...,flag,numero) VALUES ( (SELECT chiave1 FROM tabella1 WHERE chiave1_txt = 'valore1'), (SELECT chiave2 FROM tabella2 WHERE chiave2_txt = 'valore2'), (SELECT NVL(MAX(chiave3),0)+1 from tabella where chiave1_fk = (SELECT chiave1 FROM tabella1 WHERE chiave1_txt = 'valore1') AND chiave2_fk = (SELECT chiave2 FROM tabella2 WHERE chiave2_txt = 'valore2')), ..., 'S', --il flag (SELECT MIN(NUM) FROM (SELECT 1 NUM FROM DUAL ... 10 NUM FROM DUAL) WHERE NUM NOT IN ( SELECT numero FROM tabella WHERE chiave1_fk = (SELECT chiave1 FROM tabella1 WHERE chiave1_txt = 'valore1') AND chiave2_fk = (SELECT chiave2 FROM tabella2 WHERE chiave2_txt = 'valore2') AND flag = 'S') )) )
se il flag è 'N' invece numero è null-
Re: Oracle-SQL questionScritto daNon Autenticatoil 2008-05-06 14:46:00.0 alle 2008-05-06 14:46:00.0
- Scritto da:
> > non capisco (cosa c'entri la colonna di
> numeri).
>
> Hòla ranona!
>
> Scherzi a parte, ho una tabella così:
> chiave1|chiave2|chiave3|...|flag|numero|
> dove chiave1 e chiave2 sono chiavi di altre due
> tabelle. La mia insert fa
> così:
>INSERT INTO tabella (chiave1_fk, > chiave2_fk, > chiave3,...,flag,numero) > VALUES ( > (SELECT chiave1 FROM tabella1 WHERE chiave1_txt > = > 'valore1'), > (SELECT chiave2 FROM tabella2 WHERE chiave2_txt > = > 'valore2'), > (SELECT NVL(MAX(chiave3),0)+1 from tabella where > chiave1_fk = (SELECT chiave1 FROM tabella1 WHERE > chiave1_txt = > 'valore1') > AND chiave2_fk = (SELECT chiave2 FROM tabella2 > WHERE chiave2_txt = > 'valore2')), > ..., > 'S', --il flag > (SELECT MIN(NUM) FROM (SELECT 1 NUM FROM DUAL > ... 10 NUM FROM DUAL) > > WHERE NUM NOT IN ( > SELECT numero FROM tabella > WHERE chiave1_fk = (SELECT chiave1 FROM > tabella1 WHERE chiave1_txt = > 'valore1') > AND chiave2_fk = (SELECT chiave2 FROM tabella2 > WHERE chiave2_txt = > 'valore2') > AND flag = 'S') > )) > )
> se il flag è 'N' invece numero è null
Mi pare tutto estremamente contorto
-
Re: Oracle-SQL questionScritto daNon Autenticatoil 2008-05-06 14:56:00.0 alle 2008-05-06 14:56:00.0> Mi pare tutto estremamente contorto

la tabella rappresenta la configurazione di visualizzazione di una tabella su una jsp, ogni record rappresenta la configurazione della colonna (descrizione del titolo, allineamento, tipo di dato contenuto etc.)
il flag dice se la colonna è ordinabile o meno.
se la colonna è ordinabile (e quindi filtrabile) all'inserimento dei dati nella tabella dei record vengono estratti dei dati da un blob che contiene degli HashMap serializzati contenenti stringhe abbinando il nome dell'attributo della colonna da ordinare ad una colonna ordinabile che ha un nome tipo COLONNA_ORDINABILE1, COLONNA_ORDINABILE2 etc etc. in modo che al caricamento della pagina se viene richiesto un filtro o un ordinamento di una colonna si possa aggiungere condizioni alle where della select o order by.
Adesso che sono tre anni che è stato fatto tutto l'attrezzo ginnico hanno deciso che si sono stufati di migrare a mano le configurazione delle tabelle per le singole applicazioni e mi hanno commissionato un applicativo che si occupi di allineare le tabelle da un ambiente all'altro (ci sono sei ambienti in tutto).
O)
puffo vero e se non ci credi mi loggo
-
-
-
-
-
Re: Oracle-SQL questionScritto daNon Autenticatoil 2008-05-06 14:07:00.0 alle 2008-05-06 14:07:00.0- Scritto da: avvelentani
> ma che te ne fai di una colonna di numeri?
Starai scherzando vero?!?!?!-
Re: Oracle-SQL questionScritto daavvelentaniCubicolarioil 2008-05-06 14:21:00.0 alle 2008-05-06 14:21:00.0Trollate totali: 18184
- Scritto da:
> - Scritto da: avvelentani
> > ma che te ne fai di una colonna di numeri?
>
> Starai scherzando vero?!?!?!
no
I think happiness is love
- Vladimir Putin-
Re: Oracle-SQL questionScritto daNon Autenticatoil 2008-05-06 14:43:00.0 alle 2008-05-06 14:43:00.0
- Scritto da: avvelentani
>
> - Scritto da:
> > - Scritto da: avvelentani
> > > ma che te ne fai di una colonna di numeri?
> >
> > Starai scherzando vero?!?!?!
>
> no
Ci sono un troiaio di scenari dove ti può essere utile una tabella ausiliaria di numeri: per fare proiezioni, calcolare permutazioni ecc. ecc.
L'esigenza del tizio non l'ho capita, mi pare contorta così a pelle, ma ce ne sono mille altre .
Per la verità molte oggi si possono risolvere agevolmente con le funzioni di windowing tipo la ROW_NUMBER:http://en.wikipedia.org/wiki/Select_(SQL)#ROW_NUMB...

-
-
-
-
Re: Oracle-SQL questionScritto daNon Autenticatoil 2008-05-06 14:19:00.0 alle 2008-05-06 14:19:00.0- Scritto da:
> C'è un modo più compatto per tirare fuori una
> colonna di numeri da uno a dieci in oracle?
I DBMS dovrebbero avere dei generatori unari di relazioni simili per un numero arbitrario di tuple (simili perché servono anche quelli per il calendario ecc.)
In Oracle puoi fare un cosa simile:
http://technology.amis.nl/blog/?p=1413
La soluzione generica è quella di avere una tabella Numbers con un solo campo e i valori numerici. Questa tabella può esserti utile in molti contesti quindi non limitarti a popolarla solo con i valori da 1 a 10. Eventualmente puoi crearne più di una, tipo Numbers100 con i valori fino a 100, Numbers1000 con i valori fino a 1000 e così via.
Dal punto di vista delle prestazioni non ci sono particolari preoccupazioni, queste tabelle sono compatte e se utilizzate frequentemente se ne stanno allegramente in cache (anche se usi quella con 100 numeri per prenderne 10 il predicato riduce gli I/O a quelli necessari).
In compenso è una soluzione più intuitiva e comprensibile rispetto a quella di usare una logica procedurale con uno stupido loop (dove non è strettamente necessario).
-