Mostra notizie nelle discussioni
  • Avatar
    Scritto da
    Non Autenticato
    il 2008-05-06 11:23:00.0 alle 2008-05-06 11:23:00.0
    Oracle-SQL question
    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
    
    • Avatar
      Scritto da
      Non Autenticato
      il 2008-05-06 11:25:00.0 alle 2008-05-06 11:25:00.0
      Re: Oracle-SQL question

      - 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 ?
    • Avatar
      ☺
      Scritto da
      avvelentani
      Cubicolario
      il 2008-05-06 12:23:00.0 alle 2008-05-06 12:23:00.0
      Trollate totali: 18184
      Re: Oracle-SQL question
      pl/sql, linguaggio vero piu` db api, blablabla... ma che te ne fai di una colonna di numeri? Newbie, inesperto

      10 FOR I = 1 TO 10
      20 PRINT I
      30 NEXT I

      I think happiness is love
      - Vladimir Putin
      • Avatar
        Scritto da
        Non Autenticato
        il 2008-05-06 12:26:00.0 alle 2008-05-06 12:26:00.0
        Re: Oracle-SQL question

        - Scritto da: avvelentani
        > pl/sql, linguaggio vero piu` db api, blablabla...
        > ma che te ne fai di una colonna di numeri?
        > Newbie, inesperto
        >
        > 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.
        • Avatar
          ☺
          Scritto da
          avvelentani
          Cubicolario
          il 2008-05-06 14:21:00.0 alle 2008-05-06 14:21:00.0
          Trollate totali: 18184
          Re: Oracle-SQL question

          - Scritto da:
          >
          > - Scritto da: avvelentani
          > > pl/sql, linguaggio vero piu` db api,
          > blablabla...
          > > ma che te ne fai di una colonna di numeri?
          > > Newbie, inesperto
          > >
          > > 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
          • Avatar
            Scritto da
            Non Autenticato
            il 2008-05-06 14:41:00.0 alle 2008-05-06 14:41:00.0
            Re: Oracle-SQL question
            > non capisco (cosa c'entri la colonna di numeri).

            Hòla ranona! Ficoso

            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
            • Avatar
              Scritto da
              Non Autenticato
              il 2008-05-06 14:46:00.0 alle 2008-05-06 14:46:00.0
              Re: Oracle-SQL question

              - Scritto da:
              > > non capisco (cosa c'entri la colonna di
              > numeri).
              >
              > Hòla ranona! Ficoso
              >
              > 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 Perplesso
              • Avatar
                Scritto da
                Non Autenticato
                il 2008-05-06 14:56:00.0 alle 2008-05-06 14:56:00.0
                Re: Oracle-SQL question
                > Mi pare tutto estremamente contorto Perplesso

                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
    • Avatar
      Scritto da
      Non Autenticato
      il 2008-05-06 14:19:00.0 alle 2008-05-06 14:19:00.0
      Re: Oracle-SQL question
      - 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).
<softv>

Pagina generata in 54 millisecondi

Utenti attivi: 14 nell'ultimo minuto, 49 negli ultimi cinque minuti, 94 negli ultimi 15 minuti