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 ON
avant d'exécuter le code.