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 :

execution partielle d'un script PL/SQL


Sujet :

PL/SQL Oracle

  1. #1
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2005
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 250
    Points : 277
    Points
    277
    Par défaut execution partielle d'un script PL/SQL
    version d'Oracle 9.2...

    bonjour,
    le script suivant est censé vérifier l'existence d'une table dans mon schema et si elle n'existe pas la créer mais aussi supprimer une autre table en basculant ses données dans la nouvelle... Il doit aussi aller modifier des references à l'ancienne table dans deux tables de reference...
    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
    DECLARE
      I NUMBER;
    BEGIN
     
      SELECT COUNT(*)
      INTO I
      FROM USER_TABLES
      WHERE TABLE_NAME = 'PRP_GMSTLXUSG002TLX002_____DH';
     
      IF I=0
      THEN
     
        EXECUTE IMMEDIATE 
    	'CREATE TABLE PRP_GMSTLXUSG002TLX002_____DH '||
    	'( ORIGINATING_FILE          VARCHAR2(249 BYTE)  NOT NULL ,'||
        '  REFERENCE_NUMBER          NUMBER(38)          NOT NULL ,'||
        '  ORIGINATOR_ADDRESS        VARCHAR2(249 BYTE),'||
        '  NCC                       VARCHAR2(249 BYTE),'||
        '  DOUBLE_SIGNATURE          VARCHAR2(249 BYTE),'||
        '  DESTINATION_ADDRESS       VARCHAR2(249 BYTE),'||
        '  DESTINATION_IATA_COUNTRY  VARCHAR2(249 BYTE),'||
        '  DESTINATION_IATA_CENTER   VARCHAR2(249 BYTE),'||
        '  TELEX_DIAL_CODE           NUMBER(38),'||
        '  NUMBER_OF_MESSAGES        VARCHAR2(249 BYTE),'||
        '  CHARGEABLE_TRAFIC         NUMBER(38),'||
        '  DURATION                  NUMBER(38),'||
        '  FIRST_DAY_OF_ACTIVITY     VARCHAR2(249 BYTE),'||
        '  LAST_DAY_OF_ACTIVITY      VARCHAR2(249 BYTE),'||
        '  STATUS                    NUMBER(38)          NOT NULL ,'||
        '  AVAILABLE                 VARCHAR2(249 BYTE),'||
        '  CHG_WHO                   VARCHAR2(249 BYTE),'||
        '  FREE_COMMENT              VARCHAR2(249 BYTE),'||
        '  ERROR_CODE                VARCHAR2(249 BYTE),'||
        '  CHG_DATETIME              DATE'||
        ')';
     
        EXECUTE IMMEDIATE 
    	'CREATE UNIQUE INDEX PK_GMSTLXUSG002TLX002_____DH ON PRP_GMSTLXUSG002TLX002_____DH '||
        '(ORIGINATING_FILE, REFERENCE_NUMBER, STATUS)'||
        'TABLESPACE TS_SVCCONFIG_IDX';
     
     
        EXECUTE IMMEDIATE 
    	'ALTER TABLE PRP_GMSTLXUSG002TLX002_____DH ADD ('||
        'CONSTRAINT PK_GMSTLXUSG002TLX002_____DH '||
        'PRIMARY KEY (ORIGINATING_FILE, REFERENCE_NUMBER, STATUS)'||
        'USING INDEX  TABLESPACE TS_SVCCONFIG_IDX )';
     
    	INSERT INTO PRP_GMSTLXUSG002TLX002_____DH
    	SELECT * 
    	FROM PRP_GMSTLXAPI002TLX002_____DH;
     
    	EXECUTE IMMEDIATE 'drop table PRP_GMSTLXAPI002TLX002_____DH';
     
    	UPDATE PRP_FIELD_DESCRIPTION
    	SET PD_TABLE_NAME = 'PRP_GMSTLXUSG002TLX002_____DH'
    	WHERE PD_TABLE_NAME = 'PRP_GMSTLXAPI002TLX002_____DH';
     
    	UPDATE PRP_METATABLE
    	SET PM_TABLE_NAME = 'PRP_GMSTLXUSG002TLX002_____DH'
    	WHERE PM_TABLE_NAME = 'PRP_GMSTLXAPI002TLX002_____DH';
     
    	COMMIT;	   
      END IF;
    END;
    mon problème est le suivant:
    -le script crée bien la nouvelle table
    -mais il ne supprime pas l'ancienne table...
    -il ne modifie pas les tables de reference non plus...
    -sans pour autant me renvoyer d'erreur me disant qu'il n'a pas pu le faire
    (d'ailleurs à première vue le script marche parfaitement)

    Si quelqu'un a des idées sur ce qui pourrait bien clocher...
    Dyvim

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    manquerait pas un commit par hasard ? Et c'est pas plus simple un bête script SQL ?

  3. #3
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    une 8.2 , Oracle crée des releases que pour vous alors

    est ce que si tu passes les requêtes une a une elle fonctionne ?

  4. #4
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut Re: execution partielle d'un script PL/SQL
    Citation Envoyé par dyvim
    -mais il ne supprime pas l'ancienne table...
    sans DROP ça parait logique

  5. #5
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut Re: execution partielle d'un script PL/SQL
    Citation Envoyé par Fred_D
    Citation Envoyé par dyvim
    -mais il ne supprime pas l'ancienne table...
    sans DROP ça parait logique
    tu es fatigué toi


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXECUTE IMMEDIATE 'drop table PRP_GMSTLXAPI002TLX002_____DH';

  6. #6
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    même en cherchant je le voyais toujours pas

    Désolé

    Faudrait essayer en SQL simple et en ajoutant des messages de trace

  7. #7
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2005
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 250
    Points : 277
    Points
    277
    Par défaut
    Je viens de me rendre compte que j'avais l'instruction RENAME...
    pour faire presque tout ce que je veux...

    par contre je ne sais pas si elle garantit l'integrité des données et la conservatiuon des index, contraintes, triggers...
    Dyvim

  8. #8
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    non cela pose probléme pour les triggers , index clé étrangére ... enfin toutes réfèrences

  9. #9
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2005
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 250
    Points : 277
    Points
    277
    Par défaut
    Aucun moyen d'eviter de refaire les triggers,... ???

    Par exemple avec une option CASCADED ???
    Dyvim

  10. #10
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2005
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 250
    Points : 277
    Points
    277
    Par défaut
    Citation Envoyé par Fred_D
    manquerait pas un commit par hasard ?
    Non j'ai déjà essayé d'en rajouter un ca ne change rien... (ah et puis il y en a un à la fin car je ne vous ai mis qu'un bout du script..
    Citation Envoyé par Fred_D
    Et c'est pas plus simple un bête script SQL ?
    et comment je check si ma table existe en SQL simple ???
    Dyvim

  11. #11
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    cette option n'existe pas

    Pour tester si une table existe un requête sur user_tables fonctionne trés bien

    ce probléme a été posé recemment

  12. #12
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2005
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 250
    Points : 277
    Points
    277
    Par défaut
    Citation Envoyé par Jaouad
    une 8.2 , Oracle crée des releases que pour vous alors
    Oh je me suis encore gouré.... 9.2 sorry....
    est ce que si tu passes les requêtes une a une elle fonctionne ?
    oui.. sans problème... chacune des modifs est correcte en soi...
    Dyvim

  13. #13
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2005
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 250
    Points : 277
    Points
    277
    Par défaut
    Citation Envoyé par Jaouad
    cette option n'existe pas
    C'est bien dommage...
    Pour tester si une table existe un requête sur user_tables fonctionne trés bien ...
    ce probléme a été posé recemment
    Oui ca je sais faire... La remarque etait plutôt : et comment je fais un test conditionnel en SQL simple...
    Dyvim

  14. #14
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    et si tu met chaque execute immediate dans un script pl/sql

    et que tu les laisse séquentiellement

    est ce que cela marche aussi ?

    Je dit ca au cas ou tu aurais uniquement tester les ordres SQL ?

  15. #15
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2005
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 250
    Points : 277
    Points
    277
    Par défaut
    En fait il se produit de temps en temps une erreur qui bloque alors tout le script... (je ne l'ai pas quand j'execute le script comme un script de patch sur le serveur unix /Oracle mais elle se produit sous TOAD si je teste le code)
    Au moment de l'INSERT il lui arrive de dire que la table n'existe pas et donc de bloquer à ce moment là...
    Dyvim

  16. #16
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Est ce que sous SqlPlus tu peux essayer cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    begin
    EXECUTE IMMEDIATE 'drop table PRP_GMSTLXAPI002TLX002_____DH'; 
        end ; 
    /
    assure toi que le table existe :

  17. #17
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2005
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 250
    Points : 277
    Points
    277
    Par défaut
    Est ce que RENAME fonctionne pour autre chose que des TABLEs et des VIEWs ???
    A ma connaissance (cours de l'année passée) je ne peux pas renommer ainsi des contraintes et des indexes...

    Par contre j'ai jeté un oeil et à priori le fait de renommer une table lui conserve ses contraintes et ses indexes (même si le nom n'est plus très adéquat)
    Dyvim

  18. #18
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2005
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 250
    Points : 277
    Points
    277
    Par défaut
    Citation Envoyé par Jaouad
    Est ce que sous SqlPlus tu peux essayer cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    begin
    EXECUTE IMMEDIATE 'drop table PRP_GMSTLXAPI002TLX002_____DH'; 
        end ; 
    /
    assure toi que le table existe :
    C'est quelque chose que j'ai déjà fait...
    PL/SQL procedure successfully executed....
    Dyvim

  19. #19
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Citation Envoyé par dyvim
    Est ce que RENAME fonctionne pour autre chose que des TABLEs et des VIEWs ???
    A ma connaissance (cours de l'année passée) je ne peux pas renommer ainsi des contraintes et des indexes...

    Par contre j'ai jeté un oeil et à priori le fait de renommer une table lui conserve ses contraintes et ses indexes (même si le nom n'est plus très adéquat)
    Mais il me semble que les index sont invalidés donc inutilisable ...

  20. #20
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2005
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 250
    Points : 277
    Points
    277
    Par défaut
    Citation Envoyé par Jaouad
    Mais il me semble que les index sont invalidés donc inutilisable ...
    Comment pourrais je vérifier cela???
    Parce que des index inutilisables cela ne m'arrangera pas du tout...
    Dyvim

Discussions similaires

  1. Execute DDL avec un script PL/SQL
    Par EtudiantJ2EE dans le forum PL/SQL
    Réponses: 4
    Dernier message: 20/09/2011, 17h59
  2. execution d'un script T-sql
    Par morados dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 12/07/2007, 16h13
  3. [9i] Executer script depuis SQL+
    Par lbgl dans le forum Oracle
    Réponses: 2
    Dernier message: 23/03/2007, 13h54
  4. [9i - PL/SQL] Execution d'un shell script
    Par lgomez dans le forum Oracle
    Réponses: 2
    Dernier message: 13/02/2006, 10h23
  5. Execution Script PL/SQL
    Par hair_peace dans le forum PL/SQL
    Réponses: 13
    Dernier message: 29/06/2005, 10h55

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