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

PL/SQL Oracle Discussion :

Create table dans une loop PL/SQL


Sujet :

PL/SQL Oracle

  1. #1
    Expert éminent
    Avatar de neo.51
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    2 663
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 663
    Points : 6 418
    Points
    6 418
    Par défaut Create table dans une loop PL/SQL
    Bonjour,

    Je suis en train de faire un script sql pour dupliquer une base via un DBlink en utilisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create table *** as select * from tablesource@dblink
    en gros voilà à quoi ça ressemble :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    DECLARE
    TYPE LISTE_TABLES IS TABLE OF NVARCHAR2(30);
    ma_liste_table LISTE_TABLES;
    requete NVARCHAR2(255);
    begin
    select TABLE_NAME BULK COLLECT INTO ma_liste_table from ALL_ALL_TABLES@SYNCHRO2 where OWNER='SYNOPTIS2';
    For i IN ma_liste_table.first..ma_liste_table.last Loop
         IF ma_liste_table(i)= 'TRONC' then
          dbms_output.put_line('CREATE TABLE SYNOPTIS.'||ma_liste_table(i)||' as select * from SYNOPTIS2.'||ma_liste_table(i)||'@SYNCHRO2');
          execute immediate 'CREATE TABLE SYNOPTIS.'||ma_liste_table(i)||' as select * from SYNOPTIS2.'||ma_liste_table(i)||'@SYNCHRO2';
         end if;
    End loop;
    end;
    SYNOPTIS = schema de destination.
    SYNOPTIS2 = schéma source
    SYNCHRO2 = dblink vers la database source
    le tout est excécuté sur la base de destination.

    la ligne retournée par dbms_output.put_line est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE TABLE SYNOPTIS.TRONC as select * from SYNOPTIS2.TRONC@SYNCHRO2
    cette commande s'exécute parfaitement sous SQLplus. Mais dés que j'intègre ça dans un execute immediate et une boucle la requête ne passe plus :
    Error report:
    ORA-00900: instruction SQL non valide
    ORA-06512: ligne 11
    00900. 00000 - "invalid SQL statement"
    *Cause:
    *Action:
    Une idée ?


  2. #2
    Membre expérimenté Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Points : 1 332
    Points
    1 332
    Par défaut
    Bonjour,

    Quelle est ta version Oracle ??

    asktom.oracle.com tahiti.oracle.com otn.oracle.com

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.


    phrase chinoise issue du Huainanzi

  3. #3
    Expert éminent
    Avatar de neo.51
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    2 663
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 663
    Points : 6 418
    Points
    6 418
    Par défaut
    oracle 10g désolé pour l'oubli

  4. #4
    Membre expérimenté Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Points : 1 332
    Points
    1 332
    Par défaut
    Directement IMPDP

    less code, less bug

    Tu as deja ton dblink

    tu as juste a importer !!!



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SQL> conn new_Scott/tiger
    Connected.
     
    SQL> create database link old_scott connect to scott identified by tiger  using 'orcl.oracle.com';
    Database link created.
     
    impdp new_scott/tiger DIRECTORY=dmpdir NETWORK_LINK=old_scott remap_schema=scott:new_scott
    tu fais ca shcema par schema

    asktom.oracle.com tahiti.oracle.com otn.oracle.com

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.


    phrase chinoise issue du Huainanzi

  5. #5
    Expert éminent
    Avatar de neo.51
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    2 663
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 663
    Points : 6 418
    Points
    6 418
    Par défaut
    J'ai beaucoup de transformations à faire sur mes tables. Un impdb ne me satisfait pas...

    par contre j'ai réussi à le faire marche d'une manière étrange :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ma_requete :='CREATE TABLE SYNOPTIS.'||ma_liste_table(i)||' as select * from SYNOPTIS2.'||ma_liste_table(i)||'@SYNCHRO2';
          execute immediate ma_requete;
    je sais pas du tout pourquoi ça marche comme ça mais ça marche

  6. #6
    Membre expérimenté Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Points : 1 332
    Points
    1 332
    Par défaut
    Bonjour,

    avec un impdp t'as une option pour ne faire que la structure sans les datas ...
    ou les datas uniquement sans la structure des tables ,indexes.

    CONTENTS =METADATA_ONLY
    tu peux aussi inclure et exclure ...

    mais bon ...

    un autre lien est pour des exemples de sql dynamique pour l'inspiration

    http://sheikyerbouti.developpez.com/execute_immediate/

    asktom.oracle.com tahiti.oracle.com otn.oracle.com

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.


    phrase chinoise issue du Huainanzi

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

Discussions similaires

  1. [WD17] Associer deux tables dans une troisième, REQ SQL
    Par v95kp5s dans le forum WinDev
    Réponses: 8
    Dernier message: 15/05/2014, 17h16
  2. Create table dans une fonction SQL
    Par mimi0501 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/02/2008, 13h25
  3. [SQL] recherche de nom de table dans une BD
    Par benohit dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 15/09/2006, 14h54
  4. Requete sql pour création de table dans une base access
    Par Ben156 dans le forum Bases de données
    Réponses: 1
    Dernier message: 17/01/2006, 22h12
  5. [PL/SQL] Charger une table dans une collection
    Par nosnoss dans le forum Oracle
    Réponses: 10
    Dernier message: 03/03/2005, 17h56

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