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à...
et l'erreur rencontrée était celle ci
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; /
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
Partager