Ecrivez-vous l'instruction ALTER SESSION dans la même session que celle utilisée par la procédure stockée? Ou est-ce ALTER SESSION exécuté dans une session séparée?
Vous pouvez intégrer la session dans votre ALTER PL/SQL avec SQL dynamique, à savoir
BEGIN
EXECUTE IMMEDIATE 'ALTER SESSION SET skip_unusable_indexes = TRUE';
<<more code>>
END;
quelques-unes des index uniques (ou utilisés pour appliquer une contrainte unique)? Comme les États skip_unusable_indexes documentation
Note: If an index is used to enforce a UNIQUE constraint on a table, then allowing insert and update operations on the table might violate the constraint. Therefore, this setting does not disable error reporting for unusable indexes that are unique.
Si tel est le cas, vous pouvez désactiver la contrainte et/ou modifier l'indice (s) pour être non-unique?
Un exemple rapide de la différence entre les index uniques et non uniques. Notez que lorsque vous avez un index unique inutilisable, skip_unusable_indexes ne supprime pas l'erreur ORA-01502 comme c'est le cas lorsque vous avez un index non unique inutilisable.
SQL> create table a (
2 col1 number
3 );
Table created.
SQL> create unique index idx_a on a(col1);
Index created.
SQL> insert into a values(1);
1 row created.
SQL> commit;
Commit complete.
SQL> alter index idx_a unusable;
Index altered.
SQL> insert into a values(2);
insert into a values(2)
*
ERROR at line 1:
ORA-01502: index 'SCOTT.IDX_A' or partition of such index is in unusable state
SQL> alter session set skip_unusable_indexes = true;
Session altered.
SQL> insert into a values(2);
insert into a values(2)
*
ERROR at line 1:
ORA-01502: index 'SCOTT.IDX_A' or partition of such index is in unusable state
SQL> drop index idx_a;
Index dropped.
SQL> create index idx_a_nonunique on a(col1);
Index created.
SQL> alter index idx_a_nonunique unusable;
Index altered.
SQL> insert into a values(2);
1 row created.
Semble la réponse est ... vous ne pouvez pas. – dacracot