Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/09/2005, 12h37   #1
Membre confirmé
 
Homme Thomas Coquery
Consultant informatique
Inscription : février 2005
Messages : 250
Détails du profil
Informations personnelles :
Nom : Homme Thomas Coquery
Âge : 37
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 : 247
Points : 247
Envoyer un message via MSN à dyvim
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 :
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
Citation:
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 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2005, 12h39   #2
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
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 866
Points : 3 448
Points : 3 448
Dans un bloc PL/SQL il faut utiliser le sql dynamique.

Pour plus d'infos :
http://sheikyerbouti.developpez.com/execute_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.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2005, 13h01   #3
Membre confirmé
 
Homme Thomas Coquery
Consultant informatique
Inscription : février 2005
Messages : 250
Détails du profil
Informations personnelles :
Nom : Homme Thomas Coquery
Âge : 37
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 : 247
Points : 247
Envoyer un message via MSN à dyvim
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 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2005, 13h08   #4
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
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 866
Points : 3 448
Points : 3 448
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.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2005, 13h14   #5
Membre confirmé
 
Homme Thomas Coquery
Consultant informatique
Inscription : février 2005
Messages : 250
Détails du profil
Informations personnelles :
Nom : Homme Thomas Coquery
Âge : 37
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 : 247
Points : 247
Envoyer un message via MSN à dyvim
Voilà comme çà c'est plus clair...
Tu peux pas alors tu peux pas... c'est simple...
Merci beaucoup...
dyvim est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h18.


 
 
 
 
Partenaires

Hébergement Web