1
votes

Comment obtenir la sortie de la procédure ci-dessous

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


1 commentaires

Essayez d'exécuter SET SERVEROUTPUT ON avant d'exécuter le code.


3 Réponses :


0
votes
SET SERVEROUTPUT ON
---execute your procedure

3 commentaires

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.



0
votes

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.');


0 commentaires

0
votes

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;


0 commentaires