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

Administration Oracle Discussion :

DBLink et types LONG/LONG RAW


Sujet :

Administration Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 34
    Points : 14
    Points
    14
    Par défaut DBLink et types LONG/LONG RAW
    Bonjour

    Grâce à la précieuse aide de Helyos je peux désormais faire de la réplication de table d'une base à une autre à l'aide d'un DBLINK ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE DBLINK MONLINK ... etc 
     
    CREATE TABLE tableLocale AS SELECT * FROM tabledistant@MONLINK;
    Le petit soucis ... ce sont les types LONG et LONG RAW :

    si la table distante sur laquelle je fais le select en contient :
    ERREUR à la ligne 1 :
    ORA-00997: Utilisation illégale du type de données LONG
    Quelqu'un sait-il comment contourner l'erreur ?

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    Alors c un probleme connu celui la donc on va aller plus vite

    Tu fais le create table as ... sans les colonnes de type LONG
    Tu ajoutes les colonnes LONG dans ta nouvelle table
    Tu utilises le bloc pl suivant pour finir la copy

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE OR REPLACE PROCEDURE <procedure name> IS    
    CURSOR <cursor name> IS SELECT * FROM <old_table>; 
    BEGIN     
    FOR  i IN <cursor name> LOOP   	       
    IF <i.long_column> IS NOT NULL THEN           
    UPDATE <new_table>            
    SET <new table long_column> = <i.long_column>            
    WHERE <new table.rec_num> = <i.rec_num>;        
    END IF; 
    END LOOP; 
    END; 
    /

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 34
    Points : 14
    Points
    14
    Par défaut
    J'achète

    Tout ça ma l'air fort bien ... ça fais longtemps que j'ai pas pratiquer le PL /SQL je vais en profiter pour réviser un peu tout ça ...

    je te tiens au courant quand j'ai résussi la 3eme étape

    merci

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 34
    Points : 14
    Points
    14
    Par défaut
    bon ben je dois pas être super bon :-)))

    j'ai tenté comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SQL>CREATE OR REPLACE PROCEDURE copychamp IS    
        2  CURSOR copychamp_cursor IS SELECT * FROM
            tabledistante@monlien; 
        3  BEGIN      
        4  FOR  i IN copychamp_cursor LOOP               
        5  IF i.champacopier IS NOT NULL THEN            
        6  UPDATE tablelocale            
        7  SET champslonglocal = i.champacopier            
        8  WHERE tablelocale.id = i.id;        
        9  END IF; 
      10  END LOOP; 
      11  END; 
      12  /
    Attention : Procédure créée avec erreurs de compilation

    SQL>

    donc même pas la peine de l'executer ... tu peux me dire comment on fait pour avoir le log de la compilation ?

    merci @++

    [Balises code rajoutées par Helyos]

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    tapes show errors apres la compilation de ton bloc pl

  6. #6
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 34
    Points : 14
    Points
    14
    Par défaut
    :-)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SQL> CREATE OR REPLACE PROCEDURE copychamp IS    
                etc etc ...
    Procédure créée.
    SQL> show error
    Pas d'erreur.
    SQL> execute copychamp
    Procédure PL/SQL terminée avec succès.
    génial ... merci helyos

    la seul chose bizare ... c que sous Toad ben je voi pas le contenu du champ copié dans la table recevant la copie.

    alors que sous sql+ un select du champ à copier et un select du champ copié donne le même résulat ...

    [Balise code rajoutées par Helyos]

  7. #7
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    si tu parles de la colonne de type LONG peut etre que Toad ne t'affiche pas directement les LONG

  8. #8
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 34
    Points : 14
    Points
    14
    Par défaut
    c koi que je pensais ... sauf qu' en ce qui concerne la table de départ, Toad affiche bien la valeur du champ ...

    mais avec un COMMIT ça marche mieux et tout est bien qui fini bien ...

    merci pour tout helyos et pour ma remise a niveau en pl/sql

    @++ bonne continuation.

    (et peut être à bientôt ) )

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/04/2009, 14h26
  2. Un type plus long que le type "double"
    Par savoir dans le forum Débuter
    Réponses: 5
    Dernier message: 09/04/2008, 15h05
  3. Variable Chaîne pour variable de type Entier long
    Par ggvert dans le forum VBA Access
    Réponses: 4
    Dernier message: 22/12/2007, 18h32
  4. code contenant un type long long
    Par Bayard dans le forum C
    Réponses: 3
    Dernier message: 02/10/2007, 14h02
  5. Réponses: 6
    Dernier message: 06/12/2005, 16h54

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