IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Oracle et Array data type


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2007
    Messages : 103
    Points : 66
    Points
    66
    Par défaut Oracle et Array data type
    Bonjour,

    Il me semble que SQL99 a introduit le type ARRAY et que c'est du standard SQL.

    J'ai tenté de faire une simple requête
    select * from ARRAY[1,2,3]
    Cette requête fonctionne sous postgresSQL mais pas sous Oracle. quelqu'un sait comment créer de manière dynamique un tableau (car les valeurs de mon tableau change à chaque requête qui peuvent être exécutées simultanément) avec Oracle 11g

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Vous avez besoin d'un type collection, approprié (ici c'est odcinumberlist appartenant à l'utilisateur sys)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SQL> select *
      2    from Table(sys.odcinumberlist(1,2,3))
      3  /
     
    COLUMN_VALUE
    ------------
               1
               2
               3
    Mais vous devez détailler vos besoin parce que des autres solutions sont possible.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2007
    Messages : 103
    Points : 66
    Points
    66
    Par défaut
    Ok merci.

    les collections appartenant à l'utulisateur sys sont accessibles à tous les utilisateurs ou il faut des droits particuliers.


    Mon besoin est le suivant j'ai deux dates est souhaite créer une ligne par date avec une granularité pouvant allé de la minute à l'année et un incrément de 1 à chaque fois.

    Pour donner un exemple entre 01/02/2014 et 05/02/2014 avec une granularité en jour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >select ****
    COLUMN_VALUE
    ------------
    01/02/2014
    02/02/2014
    03/02/2014
    04/02/2014
    05/02/2014
    J'était parti pour générer la liste de dates en Java (je crée une appli Java) et créer un tableau (collection) de c'est date. Mais je suis preneur s'il y a possibilité de générer ce type de résultat.

    En clair après j'effectue une fonction d'aggrégation (moyenne par jour par exemple) sur une colonne A que j'associe à chaque date. Chaque valeur de la colonne A appartienne à un intervalle de temps (non fixe, une simple date de début et date de fin)

    Exemple de données
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    TABLE data
    -----------
    DEB                             FIN                           VALUE
    01/02/2014 02:25:23      05/02/2014 15:40:32   150
    03/02/2014 02:25:23      04/02/2014 15:40:32   300
    01/07/2014 02:25:23      05/07/2014 15:40:32   2000
    Est il faut que fasse une moyenne par exemple par jour.
    est donc
    on aurait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    01/02/2014-->30
    02/02/2014-->30
    03/02/2014-->180
    04/02/2014-->180
    05/02/2014-->30
    ... et ainsi de suite
    05/07/2014
    Est ce possible? J'ai vu ocdidatelist. J'aurais aimé avoir une requête qui me fait cela plutôt que de traiter cela en Java. Donc si tu as une solution ou une piste je suis preneur

  4. #4
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Regardez aussi calendrier sur ce forum!

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2007
    Messages : 103
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Regardez aussi calendrier sur ce forum!
    *

    Merci pour le lien!

    Je me suis inspiré de ce qu'il y a. Je ne peux pas créer de nouvelles tables et je n'ai pas besoin d'avoir les jours fériés/ouvrées.

    Voici ma requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    with calendar
       as
        (select mindate + NUMTODSINTERVAL(level - 1, 'day') as adate
          from (select sysdate as maxdate, date '2014-05-20' as mindate from dual)
        connect by level <=  maxdate - mindate + 2
        )
    select adate from calendar;
    Je peux facilement régler la granularité en modifiant la fonction NUMTODSINTERVAL ou NUMTOYMINTERVAL et le paramètre day, month, year, hour ou minute. J'ai également la date min et max.
    Pareil comme je connais à la granularité à appliquer je peux ajouter un coefficient. Par exemple pour les minute on sera sur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    with calendar
       as
        (select mindate + NUMTODSINTERVAL(level - 1, 'minute') as adate
          from (select sysdate as maxdate, date '2014-05-20' as mindate from dual)
        connect by level <=  (maxdate - mindate) * 24*60 + 2
        )
    select adate from calendar;

    s'il y a des optimisations possibles n'hésitez pas.
    Encore merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Oracle Data Types
    Par the_cha0s dans le forum SQL
    Réponses: 7
    Dernier message: 27/06/2012, 20h32
  2. [Oracle][ODBC]Restricted data type attribute violation
    Par jolatouf dans le forum VBScript
    Réponses: 1
    Dernier message: 03/09/2010, 11h33
  3. Data type sous Oracle
    Par Minusk dans le forum Débuter
    Réponses: 2
    Dernier message: 09/05/2008, 15h42
  4. datetime data type resulted in an out-of-range
    Par faamugol dans le forum ASP
    Réponses: 2
    Dernier message: 26/05/2004, 20h51
  5. [SQL Server] Error converting data type varchar...
    Par Sir Tengu dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 13/06/2003, 10h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo