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

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2018
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : janvier 2018
    Messages : 1
    Points : 1
    Points
    1

    Par défaut Conversion SQLServer / Oracle

    Bonjour à tous ! Je développe un outil qui doit fonctionner avec des bases de données SQLServer ainsi qu'Oracle et je ni connais absolument rien en Oracle.

    Voici mon problème, je possède la requête ci-dessous (avec SQLServer) qui fonctionne et qui permet de récupérer toutes les colonnes de chaque table de la base de données sur laquelle j'exécute ma requête, elle select :
    - Nom de la table
    - Nom du schéma de la table
    - Nom de la colonne
    - Type de données de la colonne
    - Nom de la table de référence si la colonne est clé étrangère (si non null)
    - Savoir s'il s'agit d'une vue ou d'une table avec le renvoi d'un simple 'U' ou 'V'
    - Savoir si la colonne est nullable avec le renvoi d'un BIT
    - Savoir si la colonne est identity avec le renvoi d'un BIT
    - Savoir si la colonne est clé primaire avec le renvoi d'un BIT
    - Savoir si la colonne est clé étrangère avec le renvoi d'un BIT
    - Connaitre le nombre de caratère maximum pour les types string (null si autre type)
    - Connaitre la précision numérique pour les types de nombre (null si autre type)
    - Connaitre l'échelle numérique pour les types de nombre (null si autre type)


    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
     
    SELECT c.table_name AS tableName, c.table_schema AS schemaName, c.column_name, c.data_type, FK.table_ref
                                    , CAST(CASE WHEN t.type = 'U' THEN 'U' ELSE 'V' END AS VARCHAR) AS is_table_or_view
                                    , CAST(CASE WHEN c.is_nullable = 'YES' THEN 1 ELSE 0 END AS BIT) AS is_nullable
                                    , CAST(CASE WHEN COLUMNPROPERTY(object_id(c.TABLE_SCHEMA+'.'+c.TABLE_NAME), c.column_name, 'IsIdentity') = 1 THEN 1 ELSE 0 END AS BIT) AS is_identity
                                    , ISNULL(TKEY.is_primaryKey, 0) AS is_primaryKey
                                    , ISNULL(TKEY.is_foreignKey, 0) AS is_foreignKey
                                    , c.character_maximum_length
    	                            , c.numeric_precision
                                    , c.numeric_scale
                                FROM information_schema.columns c
                                INNER JOIN sys.objects t ON t.object_id = object_id(c.TABLE_SCHEMA+'.'+c.TABLE_NAME)
                                OUTER APPLY (
    	                            SELECT CAST(OBJECTPROPERTY(OBJECT_ID(cu.constraint_schema + '.' + QUOTENAME(cu.constraint_name)), 'IsPrimaryKey') AS BIT)
    		                            , CAST(OBJECTPROPERTY(OBJECT_ID(cu.constraint_schema + '.' + QUOTENAME(cu.constraint_name)), 'IsForeignKey') AS BIT)
    	                            FROM information_schema.key_column_usage cu
    	                            WHERE cu.table_name = c.table_name AND cu.table_schema = c.table_schema
    	                            AND cu.column_name = c.column_name
                                ) AS TKEY (is_primaryKey, is_foreignKey)
                                OUTER APPLY (
                                    SELECT object_name(fk.referenced_object_id)
                                    FROM sys.foreign_keys fk
                                    INNER JOIN sys.foreign_key_columns fkc ON fkc.constraint_object_id = fk.object_id AND TKEY.is_foreignKey = 1
                                    INNER JOIN sys.columns cl ON cl.column_id = fkc.parent_column_id AND cl.object_id = fkc.parent_object_id
                                    WHERE cl.object_id = object_id(c.TABLE_NAME)
                                    AND cl.name = c.COLUMN_NAME
                                ) AS FK (table_ref)

    J'ai fouillé et bidouillé un peu et pus voir que les CAST sont différents, les OUTER APPLY aussi, ce que je ne comprend pas, et le pire de tout : les différentes tables systèmes que j'utilise pour obtenir mes données

    Si une personne est capable de m'aider je le lui serais éternellement reconnaissant

  2. #2
    Modérateur

    Homme Profil pro
    Consultant Teradata
    Inscrit en
    septembre 2008
    Messages
    7 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Teradata

    Informations forums :
    Inscription : septembre 2008
    Messages : 7 692
    Points : 16 033
    Points
    16 033

    Par défaut

    Citation Envoyé par Furiks Voir le message
    ce que je ne comprend pas, et le pire de tout : les différentes tables systèmes que j'utilise
    Il n'y a rien de plus simple à comprendre, ce sont des systèmes différents, donc les tables systèmes sont différentes.
    Pour faire court :
    • il n'y a pas de type BIT avec Oracle - utilisez un char(1) avec (Y/N) ou un number(1) avec 0/1
    • utilisez les vues all_tables et all_tab_columns à la place d'information_schema.columns
    • trouvez les informations des clefs à l'aide de all_constraints (constraint_type = P pour PK et R pour FK)

    Avec ça vous devriez pouvoir reproduire une requête similaire.
    Mais ce sera bien une autre requête.

  3. #3
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    octobre 2007
    Messages
    5 577
    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 577
    Points : 11 453
    Points
    11 453

    Par défaut

    Citation Envoyé par Furiks Voir le message
    Bonjour à tous ! Je développe un outil qui doit fonctionner avec des bases de données SQLServer ainsi qu'Oracle et je ni connais absolument rien en Oracle.

    ...
    J'adore ça "je ni connais rien..." mais ... cela ne m'empêche pas de faire! Je pense que vous avez sauté une étape indispensable: se documenter avant de faire. Sinon vous gaspillez tout simplement votre temps.

Discussions similaires

  1. [AC-2003] conversion de oracle à access (ANSI syntax)
    Par blaise4714 dans le forum Access
    Réponses: 2
    Dernier message: 07/05/2009, 13h56
  2. Conversion Requete SQLServer -> Oracle
    Par locs dans le forum SQL
    Réponses: 13
    Dernier message: 04/03/2009, 14h40
  3. Migration procédures SQLSERVER => Oracle
    Par toomsounet dans le forum Outils
    Réponses: 0
    Dernier message: 20/11/2008, 14h31
  4. LIEN SQLSERVER -> ORACLE : plus de mémoire
    Par pb_inge dans le forum MS SQL-Server
    Réponses: 21
    Dernier message: 12/09/2008, 09h49
  5. Migration de Base de données SQLServer -> Oracle
    Par karamazov994 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 11/07/2005, 14h30

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