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 :

Convertir requête PostgreSQL en Oracle


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 171
    Points : 68
    Points
    68
    Par défaut Convertir requête PostgreSQL en Oracle
    Bonjour je veux creer traduire cette requéte creer en postgres en oracle

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
     
    CREATE OR REPLACE VIEW rm_documents_view AS 
    SELECT 
        rm_documents.*,
     
        rm_items.archival_agency_it_ident,
        rm_items.description_language,
        rm_items.name,
        rm_items.item_type,
        rm_items.originating_agency_it_ident,
        rm_items.service_level,
        rm_items.transferring_agency_it_ident,
        rm_items.schedule_id, 
     
        rm_content_descriptions.description as content_description,
        rm_content_descriptions.description_level,
        rm_content_descriptions.file_plan_position,
        rm_content_descriptions.language,
        rm_content_descriptions.latest_date,
        rm_content_descriptions.oldest_date,
        rm_content_descriptions.other_descriptive_data,
     
        rm_custodial_history.custodial_history_item,
     
        doctypes.description as type_label,
     
        doctypes_first_level.doctypes_first_level_id, 
        doctypes_first_level.doctypes_first_level_label, 
        doctypes_first_level.css_style as doctype_first_level_style, 
     
        doctypes_second_level.doctypes_second_level_id, 
        doctypes_second_level.doctypes_second_level_label, 
        doctypes_second_level.css_style as doctype_second_level_style,
     
        file_plan_position.folders_system_id,
     
    	schedule.folder_id as schedule_name,
     
        originating_agency.identification as originating_ag_ident,
        originating_agency.entity_id as originating_ag_entity_id,
        originating_agency.name as originating_ag_name,
     
        rm_contacts.department_name as dest_user,
     
        rm_appraisal_rules.code as appraisal_code,
        rm_appraisal_rules.duration as appraisal_duration,
        rm_appraisal_rules.start_date as appraisal_start_date,
     
        rm_access_restriction_rules.code as access_restriction_code,
        rm_access_restriction_rules.start_date as access_restrict_start_date
     
    FROM rm_documents
        LEFT JOIN rm_items on rm_items.item_id = rm_documents.item_id
        LEFT JOIN rm_content_descriptions on rm_items.item_id = rm_content_descriptions.item_id
        LEFT JOIN rm_custodial_history on rm_items.item_id = rm_custodial_history.item_id
        LEFT JOIN doctypes on rm_documents.type_id = doctypes.type_id
        LEFT JOIN doctypes_first_level ON doctypes.doctypes_first_level_id = doctypes_first_level.doctypes_first_level_id
        LEFT JOIN doctypes_second_level ON doctypes.doctypes_second_level_id = doctypes_second_level.doctypes_second_level_id
        LEFT JOIN rm_organizations AS originating_agency ON originating_agency.organization_id = 
            (
            SELECT organization_id 
            FROM rm_organizations 
            WHERE rm_organizations.parent_id = rm_items.item_id AND rm_organizations.role = 'OriginatingAgency'
            ORDER BY organization_id
            LIMIT 1
            )
        LEFT JOIN rm_contacts on originating_agency.organization_id = rm_contacts.organization_id and contact_id = 
            (
            SELECT contact_id 
            FROM rm_contacts 
            WHERE rm_contacts.organization_id = originating_agency.organization_id
            ORDER BY contact_id
            LIMIT 1
            )
        LEFT JOIN rm_appraisal_rules ON rm_appraisal_rules.parent_id = rm_items.item_id
        LEFT JOIN rm_access_restriction_rules ON rm_access_restriction_rules.parent_id = rm_items.item_id
        LEFT JOIN folders file_plan_position ON rm_content_descriptions.file_plan_position = file_plan_position.folder_id AND foldertype_id = '101'
        LEFT JOIN folders schedule ON rm_items.schedule_id = schedule.folders_system_id
    WHERE item_type = 'ArchiveObject';
    et j'ai cette erreur
    Erreur à la ligne de commande : 63, colonne : 8
    Rapport d'erreur :
    Erreur SQL : ORA-00907: parenthèse de droite absente
    00907. 00000 - "missing right parenthesis"
    *Cause:
    *Action:

  2. #2
    Membre expérimenté Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Points : 1 597
    Points
    1 597
    Par défaut
    Remplacez les Select ... From ... where ... order by .... limit 1 sur le modèle suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT organization_id 
    FROM rm_organizations 
    WHERE rm_organizations.parent_id = rm_items.item_id AND rm_organizations.role = 'OriginatingAgency'
    ORDER BY organization_id
    LIMIT 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Select min(organization_id)
    FROM rm_organizations 
    WHERE rm_organizations.parent_id = rm_items.item_id 
      AND rm_organizations.role = 'OriginatingAgency'

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    C'est la forme des sous-requête qui n'est pas adaptée.

    il faudrait remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT  organization_id 
    FROM    rm_organizations 
    WHERE   rm_organizations.parent_id = rm_items.item_id 
        AND rm_organizations.role = 'OriginatingAgency'
    ORDER BY organization_id
    LIMIT 1
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT  MIN(organization_id) 
    FROM    rm_organizations 
    WHERE   rm_organizations.parent_id = rm_items.item_id 
        AND rm_organizations.role = 'OriginatingAgency'
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  4. #4
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 171
    Points : 68
    Points
    68
    Par défaut
    maintenant voila ce que j'ai comme erreur:
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    CREATE OR REPLACE VIEW drs.rm_documents_view AS 
    SELECT 
        rm_documents.*,
     
        drs.rm_items.archival_agency_it_ident,
        drs.rm_items.description_language,
        drs.rm_items.name,
        drs.rm_items.item_type,
        drs.rm_items.originating_agency_it_ident,
        drs.rm_items.service_level,
        drs.rm_items.transferring_agency_it_ident,
        drs.rm_items.schedule_id, 
     
        drs.rm_content_descriptions.description as content_description,
        drs.rm_content_descriptions.description_level,
        drs.rm_content_descriptions.file_plan_position,
        drs.rm_content_descriptions.language,
        drs.rm_content_descriptions.latest_date,
        drs.rm_content_descriptions.oldest_date,
        drs.rm_content_descriptions.other_descriptive_data,
     
        drs.rm_custodial_history.custodial_history_item,
     
        drs.doctypes.description as type_label,
     
        drs.doctypes_first_level.doctypes_first_level_id, 
        drs.doctypes_first_level.doctypes_first_level_label, 
        drs.doctypes_first_level.css_style as doctype_first_level_style, 
     
        drs.doctypes_second_level.doctypes_second_level_id, 
        drs.doctypes_second_level.doctypes_second_level_label, 
        drs.doctypes_second_level.css_style as doctype_second_level_style,
     
        drs.file_plan_position.folders_system_id,
     
    	drs.schedule.folder_id as schedule_name,
     
        drs.originating_agency.identification as originating_ag_ident,
        drs.originating_agency.entity_id as originating_ag_entity_id,
        drs.originating_agency.name as originating_ag_name,
     
        drs.rm_contacts.department_name as dest_user,
     
        drs.rm_appraisal_rules.code as appraisal_code,
        drs.rm_appraisal_rules.duration as appraisal_duration,
        drs.rm_appraisal_rules.start_date as appraisal_start_date,
     
        drs.rm_access_restriction_rules.code as access_restriction_code,
        drs.rm_access_restriction_rules.start_date as access_restrict_start_date
     
    FROM drs.rm_documents
        LEFT JOIN drs.rm_items on drs.rm_items.item_id = drs.rm_documents.item_id
        LEFT JOIN drs.rm_content_descriptions on drs.rm_items.item_id = drs.rm_content_descriptions.item_id
        LEFT JOIN drs.rm_custodial_history on drs.rm_items.item_id = drs.rm_custodial_history.item_id
        LEFT JOIN drs.doctypes on drs.rm_documents.type_id = drs.doctypes.type_id
        LEFT JOIN drs.doctypes_first_level ON drs.doctypes.doctypes_first_level_id = drs.doctypes_first_level.doctypes_first_level_id
        LEFT JOIN drs.doctypes_second_level ON drs.doctypes.doctypes_second_level_id = drs.doctypes_second_level.doctypes_second_level_id
        LEFT JOIN drs.rm_organizations  originating_agency ON drs.originating_agency.organization_id = 
            (
           SELECT  MIN(organization_id) 
          FROM    drs.rm_organizations 
          WHERE   drs.rm_organizations.parent_id = drs.rm_items.item_id 
          AND drs.rm_organizations.role = 'OriginatingAgency'
            )
        LEFT JOIN drs.rm_contacts on drs.originating_agency.organization_id = drs.rm_contacts.organization_id and contact_id = 
            (
            SELECT MIN(contact_id) 
            FROM drs.rm_contacts 
            WHERE drs.rm_contacts.organization_id = drs.originating_agency.organization_id
     
            )
        LEFT JOIN drs.rm_appraisal_rules ON drs.rm_appraisal_rules.parent_id = rm_items.item_id
        LEFT JOIN drs.rm_access_restriction_rules ON drs.rm_access_restriction_rules.parent_id = drs.rm_items.item_id
        LEFT JOIN drs.folders file_plan_position ON drs.rm_content_descriptions.file_plan_position = drs.file_plan_position.folder_id AND foldertype_id = '101'
        LEFT JOIN drs.folders schedule ON drs.rm_items.schedule_id = drs.schedule.folders_system_id
    WHERE item_type = 'ArchiveObject';
    Erreur à la ligne de commande : 1, colonne : 0
    Rapport d'erreur :
    Erreur SQL : ORA-01799: une colonne ne peut pas être jointe extérieurement à une sous-interrogation
    01799. 00000 - "a column may not be outer-joined to a subquery"
    *Cause: <expression>(+) <relop> (<subquery>) is not allowed.
    *Action: Either remove the (+) or make a view out of the subquery.
    In V6 and before, the (+) was just ignored in this case.

  5. #5
    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
    Votre jointure avec la sous-requête d'origine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    LEFT JOIN rm_organizations AS originating_agency ON originating_agency.organization_id = 
            (
            SELECT organization_id 
            FROM rm_organizations 
            WHERE rm_organizations.parent_id = rm_items.item_id 
              AND rm_organizations.role = 'OriginatingAgency'
            ORDER BY organization_id
            LIMIT 1
            )
    doit être réecrite de la façon
    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
     
    Left Join
            (
            Select t.*
              From (
                      SELECT organization_id,
                             parent_id,
                             role,
                             identification,
                             name, 
                             entity_id
                             row_number() over (partition by parent_id order by organization_id) rn
                      FROM rm_organizations 
                      WHERE rm_organizations.role = 'OriginatingAgency'
                   )  t
             Where t.rn = 1
            ) originating_agency
        On originating_agency.organization_id = rm_items.item_id

  6. #6
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 171
    Points : 68
    Points
    68
    Par défaut
    je ne comprend pas vraiment que represente le select t*?

  7. #7
    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 sélectionnez toutes les colonnes de la table qui vous intéresse, vous les attribuées un rang en les ordonnant de la manière souhaité et vous gardez le premier enregistrement (top N).

Discussions similaires

  1. Construction d'une requête "imbriquée" avec Oracle
    Par kyra78 dans le forum Langage SQL
    Réponses: 0
    Dernier message: 05/02/2008, 14h29
  2. requêtes Perl sur oracle et sybae (serveurs Linux)
    Par super_dz dans le forum Langage
    Réponses: 1
    Dernier message: 28/04/2007, 12h41
  3. Date+delai dans une requête PostGresql
    Par bobic dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 12/03/2007, 12h11
  4. Problème de requête récursive sous Oracle 10
    Par boulgom12 dans le forum Oracle
    Réponses: 1
    Dernier message: 13/12/2006, 09h54
  5. Réponses: 7
    Dernier message: 24/08/2006, 08h28

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