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