Bonjour,
Je n'arrive pas à exécuter une procédure avec un DB Link,
J'ai essayé plein d'écriture différentes.. Mais aucune ne marche.
Pour l'instant j'en suis là :
Il me dit sql invalide.Code:EXEC BO_RCTA1_V2@LUC();
Une idée?
Version imprimable
Bonjour,
Je n'arrive pas à exécuter une procédure avec un DB Link,
J'ai essayé plein d'écriture différentes.. Mais aucune ne marche.
Pour l'instant j'en suis là :
Il me dit sql invalide.Code:EXEC BO_RCTA1_V2@LUC();
Une idée?
J'ai un peu de mal à voir où ça coince car tu donnes peu d'infos.
Ta procédure se trouve sur la base de données distante et elle est accessible via un DBLink ou bien ta procédure est dans ta base locale et elle utilise, dans son code, un DBLink?
De ce que je lis je pense que LUC est ton DBLink. Est-il valide? Exécute le code suivant pour voir si le DBLink est OK (attention : même si son statut dans DBA_OBJECT est VALID, ça ne veut pas dire qu'il ait été correctement créé) :
Si c'est OK, enlève les () car ta procédure n'a pas de paramètre; c'est peut-être lié à ça.Code:select 1 from dual@LUC;
Au fait, lors de la compilation de ta procédure sur la base distante, il n'y a pas eu de message d'erreur? Vérifie que ta procédure peut correctement s'exécuter sur la base distante en te connectant directement sur celle-ci si c'est possible.
Alors oui,
mon DB link fonctionne correctement et il n'y a pas d'erreur sur le script,
je viens d'essayer sans le () mais toujours pareil..
Je suis passé avec un package finalement et ça marche..
Mais je ne comprend pas pourquoi la procédure non..?Code:
1
2
3
4 BEGIN PKG_Test.PS_RDV1@LUC(); END;
Si ça marche, c'est le principal :)
Mais je note que le nom de la procédure n'est pas le même entre les deux messages, c'est normal?
Message 1 : BO_RCTA1_V2
Message 2 : PS_RDV1
En outre dans le message 1 je vois un EXEC et dans le message 2 un BEGIN END --> au début tu voulais exécuter ta procédure directement sous SQL*Plus et dans le deuxième cas tu as appelé celle-ci via un bloc PL/SQL?
J'ai l'impression qu'il y a entre le test 1 KO et le test 2 OK beaucoup de paramètres qui ont changé.
Ah mais EXEC n'est pas une commande PL/SQL d'Oracle?? ^^
Sinon oui c'est normal, c'est la même procédure.
Oui, tu as raison, EXEC est pour le PL/SQL :-(
J'en fais pas assez, surtout avec des appels de fonctions.
Pour répondre à la marge, EXEC (ou EXECUTE en toutes lettres) n'appartient ni au SQL, ni au PL/SQL.
C'est une commande propre à SQL*Plus, et éventuellement adoptée par d'autres outils compatibles.
Sous le capot, "EXEC ma_commande_plsql" se transforme en
On peut le constater en mode trace : sql_trace=true, événement 10046, dbms_monitor ou toute autre technique équivalente.Code:
1
2
3 begin ma_commande_plsql; end;
C'est donc juste une facilité d'écriture acceptée par l'outil.
Encore un détail: ce n'est pas EXEC mais CALL qui peut être employé pour l'appel d'une routine.
Merci pour ces explications!