Tout d'abord,
bonjour à toutes et à tous,
J'ai plutôt une bonne expertise SQL Server mais là, je dois oeuvrer en Oracle et je sèche sur un problème.
J'ai un ensemble d'utilisateurs (schéma) et un schéma de travail TRAV sur lequel va travailler mon programme.
Je possède une table TABLE1 dans les schéma qui doit être alimenté depuis mon schéma de travail, cette table possède un ID en autoincrément (Trigger en Oracle).
Afin que ma procédure stockée compile, j'ai donc recopié la table dans le schéma TRAV.
Dans ma procédure je dois écrire tantôt dans mon schéma TRAV, tantôt dans d'autre schéma.
J'ai donc utilisé dans ma procédure :.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 -- Set Good Schema execute immediate 'ALTER SESSION SET CURRENT_SCHEMA=' || myschema;
Si j'essai l'extrait suivant en dehors de la procédure stockéeCela fonctionne parfaitement. En effet le schéma Autreschema possède bien la table et le trigger qui va bien pour renseigner le champs ID.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ALTER SESSION SET CURRENT_SCHEMA=AutreSchema; INSERT INTO TABLE1 (MonCh) VALUES ('test'); ALTER SESSION SET CURRENT_SCHEMA=TRAV ;
Lorsque j'exécute ma procédure stockée qui possède la même séquence, j'obtiens le message suivant :
L'erreur est donc logique si celui ci essai d'insérer dans le schéma TRAV puisque le trigger n'existe pas.Rapport d'erreur -
ORA-01400: impossible d'insérer NULL dans ("TRAV "."TABLE1 "."ID")
ORA-06512: à "TRAV .MAPROCSTOCK", ligne 52
ORA-06512: à ligne 21
01400. 00000 - "cannot insert NULL into (%s)"
*Cause: An attempt was made to insert NULL into previously listed objects.
*Action: These objects cannot accept NULL values.
Je peux néanmoins confirmer que le changement de session a lieu puisque dans l'exécution de mes requêtes le current user est bien AutreSchema.
Il doit me manquer quelques chose mais quoi ?
Merci de votre aide.
Partager