moins qu'il ne soit fourni en tant que paramètre, le nom de la procédure doit être à l'intérieur de la chaîne comme une valeur fixe; vous avez à l'extérieur donc il essaie d'être interprété comme un nom de variable, qui n'existe pas:
l_sql = 'BEGIN UserB.procB(:l_v1,:l_v2) END;';
Mais alors vous aurait pas besoin de EXECUT dynamiquement de toute façon, vous pouvez simplement faire:
PROCEDURE ProcA AS
BEGIN
UserB.procB(l_v1, l_v2);
END;
Si vous passez la procédure comme une variable, ce qui serait un peu étrange, vous auriez quelque chose comme:
PROCEDURE procA (proc_name in varchar2) AS
BEGIN
l_sql = 'BEGIN ' || proc_name || '(:l_v1,:l_v2) END;';
EXECUTE IMMEDIATE l_sql USING IN l_v1,IN l_v2;
END;
... et vous appelleriez que procA('UserB.procB')
. Je ne pense pas que ce soit ce que vous essayez de faire, mais ce n'est pas tout à fait clair.
Dans les deux cas, vous ne semblez pas avoir défini l_v1
ou l_v2
, donc je suppose que vous avez manqué cette partie du code.
Voici une erreur avec les guillemets ... – kpater87