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 :

impossibilité de faire un alter table dans un bloc 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 impossibilité de faire un alter table dans un bloc PL/SQL
    bonjour,
    je souhaitais effectuer un ALTER TABLE XXX dans un bloc PL/SQL pour droper puis recréer une contrainte et l'index qui lui est lié...
    Le probleme est que lorsque je l'execute il m'indique qu'il ne veut pas de ALTER TABLE à ce niveau...
    je peux realiser ce que je veux avec un EXECUTE IMMEDIATE mais j'aurais souhaité comprendre la raison logique de cet échec...
    Si quelqu'un peut me dire ce qui foire....

    Mon code était celui là...
    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
    DECLARE
      i number;
    BEGIN
     
      select count(*) 
      into i
      from user_constraints
      where CONSTRAINT_NAME = 'PK_EXPENSE_CODES'
      ;
     
      if (i>0)
      then 
        ALTER TABLE EXPENSE_CODES 
        DROP CONSTRAINT PK_EXPENSE_CODES
      end if;
      --drop index PK_EXPENSE_CODES (pas nécessaire index dropé avec la CONSTRAINT
     
      CREATE UNIQUE INDEX PK_EXPENSE_CODES ON EXPENSE_CODES
      (TYPE_CODE, CHARGE_CODE, TRANS_SIGN, ACTIVE_DATE)
      TABLESPACE TS_SB03_IDX
      ;
     
     
      ALTER TABLE EXPENSE_CODES ADD (
        CONSTRAINT PK_EXPENSE_CODES PRIMARY KEY (TYPE_CODE, CHARGE_CODE, TRANS_SIGN, ACTIVE_DATE)
          USING INDEX 
          TABLESPACE TS_SB03_IDX;
     
    END;
    /
    et l'erreur rencontrée était celle ci
    ORA-06550: line 21, column 3:
    PLS-00103: Encountered the symbol "ALTER" when expecting one of the following:
    begin case declare end exception exit for goto if loop mod
    null pragma raise return select update while with
    <an identifier> <a double-quoted delimited-identifier>
    <a bind variable> << close current delete fetch lock insert
    open rollback savepoint set sql execute commit forall merge
    <a single-quoted SQL string> pipe
    Dyvim

  2. #2
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Dans un bloc PL/SQL il faut utiliser le sql dynamique.

    Pour plus d'infos :
    http://sheikyerbouti.developpez.com/..._immediate/#L4

    Fais une recherche sur le forum sur execute immediate tu trouveras pleins d'exemples.
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  3. #3
    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
    Merci pour le EXECUTE IMMEDIATE... même si je savais déjà que je pouvais le faire comme çà
    Ce que je ne sais pas c'est pourquoi je ne peux pas le faire autrement...
    J'ai cru voir un début de réponse mentionnant une histoire de DDL mais j'avoue que je n'ai pas bien compris...
    Dyvim

  4. #4
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Tous les ordres DDL (create, alter, drop, ...) ne peuvent pas être exécutés dans un bloc PL
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  5. #5
    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
    Voilà comme çà c'est plus clair...
    Tu peux pas alors tu peux pas... c'est simple...
    Merci beaucoup...
    Dyvim

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

Discussions similaires

  1. ALTER TABLE dans Access 97
    Par dut-dut dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 20/05/2008, 11h44
  2. ALTER TABLE dans un package
    Par guntzerp dans le forum Oracle
    Réponses: 2
    Dernier message: 29/06/2006, 15h40
  3. Réponses: 2
    Dernier message: 03/03/2006, 13h41
  4. Alter table dans procédure stockée
    Par mehitabelle dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 30/11/2005, 16h14
  5. Problème d'alter table dans une procédure stockée
    Par Oluha dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 16/03/2005, 09h19

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