Lorsque j'exécute la requête ci-dessous, le résultat que j'obtiens est la procédure PL / SQL terminée. Au lieu du résultat réel. Comment puis-je afficher le résultat de l'exécution de cette instruction sur l'écran
Declare
v_sql varchar2(500);
v_schema varchar(30);
v_event varchar2(500):= 'EVENT NAME';
v_email varchar2(200) := 'Name@XYZ.com';
v_prj_id varchar2(4000):='ProjectA,ProjectB,ProjectC,ProjectD';
BEGIN
Dbms_Output.Put_Line('v_prj_id='||v_prj_id);
--
FOR i IN (SELECT trim(regexp_substr(v_prj_id, '[^,]+', 1, LEVEL)) l
FROM dual
CONNECT BY LEVEL <= regexp_count(v_prj_id, ',') + 1
) LOOP
--
Dbms_Output.Put_Line('---------------------');
--
--
v_sql := 'UPDATE ' || i.l|| '.Table set email = email ||'';''||:1 WHERE
EVENT = :2' ;
--
Dbms_Output.Put_Line('v_sql='||v_sql);
--
begin
EXECUTE IMMEDIATE v_sql USING v_email, v_event;
Exception
when others then
Dbms_Output.Put_Line('sqlerrm='||sqlerrm);
End;
--
END LOOP;
END;
Les résultats réels sont la procédure PL / SQL terminée. mais j'attendais le résultat de sortie de l'exécution de cette instruction à l'écran
3 Réponses :
SET SERVEROUTPUT ON ---execute your procedure
Merci pour l'information. mais je reçois seulement la déclaration de mise à jour. mais j'ai réellement besoin du résultat de cette déclaration de mise à jour.
oui normalement avec la déclaration ci-dessus, vous devriez obtenir le résultat de la mise à jour .. qu'est-ce que vous obtenez à l'écran après avoir exécuté la procédure avec set serveroutput activé?
Quel est le "résultat de la mise à jour" que vous attendez de voir? Les seuls appels à dbms_output sont avant la mise à jour et dans le gestionnaire d'exceptions.
Le nombre total de lignes mises à jour peut être vérifié à l'aide de SQL% ROWCOUNT.
begin
EXECUTE IMMEDIATE v_sql USING v_email, v_event;
DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT||' rows are updated.');
Lorsque vous exécutez une procédure PL / SQL, la sortie sera soit "Procédure PL / SQL terminée avec succès." ou il affichera l'erreur s'il y en a une.
Si vous voulez produire quelque chose de spécifique, vous devez le dbms_output.put_line .
Même si je ne suis pas sûr de ce que vous voulez afficher, si vous voulez vérifier le nombre de lignes mises à jour, vous pouvez faire:
begin
EXECUTE IMMEDIATE v_sql USING v_email, v_event;
dbms_output.put_line(SQL%ROWCOUNT||' rows are updated.');
exception
when others then
dbms_output.put_Line('sqlerrm='||sqlerrm);
end;
Essayez d'exécuter
SET SERVEROUTPUT ONavant d'exécuter le code.