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 :

ORA-01790 lors d'un différentiel de tables "apparemment" identiques


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 23
    Par défaut ORA-01790 lors d'un différentiel de tables "apparemment" identiques
    Bonjour,

    Environnement :
    ====================
    Oracle 11g

    Problème :
    ====================
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORA-01790: une expression doit être du même type que l'expression qui lui correspond

    Contexte :
    ====================
    Je suis en train de mettre en place un différentiel de bases (en fait la même base à moment M et un moment M+1).
    j'ai donc
    - une base OLD que j'importe dans le schéma OLD
    - une base NEW que j'importe dans le schéma NEW
    - un schéma DIF pour le différentiel

    Pour le moment j'ai réussi à automatiser le différentiel de structure entre les bases OLD et NEW ainsi que l'adaptation structurelle de OLD pour qu'elle corresponde à NEW.

    cette adaptation structurelle (nécessaire car la base peut évoluer entre M et M+1 sans que je le sache) me permet alors de pouvoir faire un différentiel de données de chaque table via un MINUS comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into DIF.MATABLE select * from NEW.MATABLE minus select * from OLD.MATABLE
    Quand j'execute mon script différentiel_data sur l'ensemble des bases tout fonctionne nickel sauf pour une table où je me retrouve avec l'erreur citée ci-dessus.

    Au départ je me suis dit que dans mon script différentiel_structure j'avais peut être oublié un cas de figure (du genre je prend en compte l'ajout de colonne sur une table entre M et M+1 mais pas la suppression).
    Mais non ...
    Et puis surtout j'ai bien comparé les tables OLD.MATABLE et NEW.MATABLE et je ne trouve pas de différence !!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select * from NEW.MATABLE minus select * from OLD.MATABLE
    SQL Error: ORA-01790: une expression doit être du même type que l'expression qui lui correspond
    pourtant si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select column_name, data_type, data_length, data_precision, data_scale
    from all_tab_cols 
    where owner='NEW' and table_name='MATABLE'
    minus
    select column_name, data_type, data_length, data_precision, data_scale
    from all_tab_cols 
    where owner='OLD' and table_name='MATABLE'
    > 0 rows selected
    et rien non plus d'ans l'autre sens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select column_name, data_type, data_length, data_precision, data_scale
    from all_tab_cols 
    where owner='OLD' and table_name='MATABLE'
    minus
    select column_name, data_type, data_length, data_precision, data_scale
    from all_tab_cols 
    where owner='NEW' and table_name='MATABLE'
    > 0 rows selected
    ce qui me fait dire que les tables dans les deux schémas sont bien identiques. D'où mon message car je ne comprends pas pourquoi ce message apparaît !!!

    quelqu'un aurait une piste ?
    D'avance merci

  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
    Nommez toutes vos colonnes au lieu de faire des select *.

    Vous vous rendrez probablement compte que dans cette table vous avez interverti deux colonnes : (A,B) et dans l'autre (B,A).

    D'ailleurs, rajoutez le column_id dans vos requêtes sur les vues systèmes pour le vérifier.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 23
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Vous vous rendrez probablement compte que dans cette table vous avez interverti deux colonnes : (A,B) et dans l'autre (B,A).

    D'ailleurs, rajoutez le column_id dans vos requêtes sur les vues systèmes pour le vérifier.
    C'est exact !
    merci, une fois lu ça tombe sous le sens. l'ordre des colonnes doit être le même si l'on ne les précise pas en faisant un INSERT INTO table_dest select * from table_src

    j'ai donc ajouté un order by column_id dans ma requête listant les colonnes sur lesquelles il y a un différentiel afin de faire les modifications structurelles dans le bon ordre.

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

Discussions similaires

  1. ora-00942 lors d'un truncate sur une table qui existe
    Par olivier] dans le forum Oracle
    Réponses: 2
    Dernier message: 17/11/2011, 17h08
  2. comment eviter ora-00942 lors d'un drop table
    Par sqlakf76 dans le forum Oracle
    Réponses: 22
    Dernier message: 11/10/2005, 15h48
  3. [8i]ORA-00600 lors d'un export
    Par neo.51 dans le forum Oracle
    Réponses: 9
    Dernier message: 15/04/2005, 19h44
  4. erreur "ORA-22905" lors de l'execution d'un requet
    Par benji999 dans le forum Administration
    Réponses: 26
    Dernier message: 14/04/2004, 11h47
  5. Erreur lors de modification d'une table
    Par seb.49 dans le forum SQL
    Réponses: 11
    Dernier message: 13/01/2003, 17h16

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