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 :

DBeaver - column


Sujet :

SQL Oracle

  1. #1
    Membre Expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 475
    Par défaut DBeaver - column
    Bonjour à tous,

    J'utilise DBeaver et lorsque j'exécute ce sql

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    @set deb_period = 202010
    @set end_period = 202109
     
    WITH tmp AS (
    			--Permet de générer une liste de mois entre les deux bornes temporelles
    			SELECT to_char(add_months(to_date(:deb_period, 'yyyymm'), level -1), 'yyyymm') mois
    			    FROM dual
    			    CONNECT BY LEVEL <= months_between(to_date(:end_period, 'yyyymm'), to_date(:deb_period, 'yyyymm')) + 1
    			)
     
    SELECT DISTINCT
        per.inss
        ,tmp.mois
        ,CASE fam.type
            WHEN 'MONO' THEN 'M'
            ELSE 'D'
        END AS typ_fam
    FROM
        beneficiaries ben
        LEFT JOIN lumpsum_beneficiaries lum ON lum.actor_id = ben.actor_id
        INNER JOIN actors ac ON ac.actor_id = ben.actor_id
        INNER JOIN persons per ON per.person_id = ac.person_id
        	AND per.inss IN (00000018043)
        INNER JOIN historical_family_situations his_fam ON his_fam.concerned_natural_person_id = ac.person_id
        INNER JOIN family_situations fam ON his_fam.historical_fam_situation_id = fam.historical_fam_situation_id
        INNER JOIN tmp ON 
            /*AND*/ TO_NUMBER(TO_CHAR(LAST_DAY(ADD_MONTHS(TO_DATE(tmp.mois, 'yyyymm'), -1)),'yyyymmdd')) BETWEEN TO_NUMBER(TO_CHAR(fam.start_date,'yyyymmdd')) AND NVL(TO_NUMBER(TO_CHAR(fam.end_date,'yyyymmdd')),99991231)
    WHERE lum.actor_id IS NULL
    ORDER BY 1,2 ASC 
    ;
    J'obtiens ce résultat :

    Nom : Image 3.png
Affichages : 628
Taille : 34,6 Ko

    Ce que je souhaite faire, c'est de pivoter les données et de garder la partie variable de la période.
    Voici ce que je fais avec Oracle sdl developer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    column chaque_mois new_value str_in_statement
    select listagg(''''||mois||'''',',') 
    within group (order by mois) as chaque_mois
    from (
                       --Permet de générer une liste de mois entre les deux bornes temporelles
                       SELECT to_char(add_months(to_date(202010, 'yyyymm'), level -1), 'yyyymm') mois
                          FROM dual
                          CONNECT BY LEVEL <= months_between(to_date(202109, 'yyyymm'), to_date(202010, 'yyyymm')) + 1
                       )
    ;
    WITH tmp AS (
                       --Permet de générer une liste de mois entre les deux bornes temporelles
                       SELECT to_char(add_months(to_date(202010, 'yyyymm'), level -1), 'yyyymm') mois
                          FROM dual
                          CONNECT BY LEVEL <= months_between(to_date(202109, 'yyyymm'), to_date(202010, 'yyyymm')) + 1
                       )
    SELECT *    
    FROM 
    (SELECT DISTINCT
       per.inss
       ,tmp.mois
       ,CASE fam.type
           WHEN 'MONO' THEN 'M'
           ELSE 'D'
       END AS typ_fam
    FROM
       beneficiaries ben
       LEFT JOIN lumpsum_beneficiaries lum ON lum.actor_id = ben.actor_id
       INNER JOIN actors ac ON ac.actor_id = ben.actor_id
       INNER JOIN persons per ON per.person_id = ac.person_id
        AND per.inss IN (00000018043)
       INNER JOIN historical_family_situations his_fam ON his_fam.concerned_natural_person_id = ac.person_id
       INNER JOIN family_situations fam ON his_fam.historical_fam_situation_id = fam.historical_fam_situation_id
       INNER JOIN tmp ON 
           /*AND*/ TO_NUMBER(TO_CHAR(LAST_DAY(ADD_MONTHS(TO_DATE(tmp.mois, 'yyyymm'), -1)),'yyyymmdd')) BETWEEN TO_NUMBER(TO_CHAR(fam.start_date,'yyyymmdd')) AND NVL(TO_NUMBER(TO_CHAR(fam.end_date,'yyyymmdd')),99991231)
    WHERE lum.actor_id IS NULL
    ORDER BY 1,2 ASC 
    ) 
    PIVOT
    (
    MAX(TYP_FAM)
    --FOR MOIS IN ('202010', '202109')
    FOR MOIS IN (&str_in_statement)
    )
    ;
    Qui me donne le bon résultat :

    Nom : Image 4.png
Affichages : 595
Taille : 10,3 Ko

    Ma question : j'essaie d'adapter ce sql à DBeaver mais j'obtiens une erreur ORA-00900: invalid SQL statement. Je pense que DBeaver ne veut pas trop de Column. Pouvez-vous confirmer et si oui, existe-t-il une autre façon de faire pour obtenir le même résultat ?

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Faites un bloc PL/SQL avec une variable et un execute immediate.

  3. #3
    Membre Expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 475
    Par défaut
    Merci Waldar.
    J'avoue que ta réponse est un peu nébuleuse. Je vais devoir échanger mon éventail contre quelque chose de plus efficace pour faire disparaître ce brouillard.

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 962
    Par défaut
    aussi bien DBeaver que SQLDeveloper permettent d'exécuter soit une instruction SQL soit un script SQL,
    et exécuter un script SQL comme une instruction ne fonctionne pas (toujours)

    Sous DBeaver, c'est la 3ème icone partir du haut dans la marge gauche : ou ALT-X/option-X, une flèche orange au-dessus d'une sorte de parchemin déroulé
    sous SQLDeveloper c'est la deuxième icone : la flèche verte avec une page en-dessous (F5)

  5. #5
    Membre Expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 475
    Par défaut
    Merci JeitEmgie.
    Effectivement, j'avais compris que je devais passe r par ALT+X.
    Mon brouillard est ici
    Citation Envoyé par Waldar
    Faites un bloc PL/SQL avec une variable et un execute immediate

Discussions similaires

  1. Error : a column definition list is required ....
    Par chico_du_33 dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 13/01/2006, 17h35
  2. [FireBird 1.5][IB Expert][Delphi 5]Erreur Column unknown
    Par Jean73 dans le forum Bases de données
    Réponses: 2
    Dernier message: 12/08/2004, 08h33
  3. Pb avec DROP COLUMN sous SQL Server 2000
    Par debailleul dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 03/03/2004, 14h38
  4. Alter column => passer de NOT NULL à NULL
    Par JohnGT dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 17/10/2003, 11h16
  5. Insert ds une column identity
    Par Trahwn dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 06/10/2003, 15h14

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