web-dev-qa-db-fra.com

Comment tester une procédure stockée Oracle avec le type de retour RefCursor?

Je cherche une bonne explication sur la façon de tester une procédure stockée Oracle dans SQL Developer ou Embarcardero Rapid XE2. Je vous remercie.

35
Ryan Fisch

Quelque chose comme

create or replace procedure my_proc( p_rc OUT SYS_REFCURSOR )
as
begin
  open p_rc
   for select 1 col1
         from dual;
end;
/

variable rc refcursor;
exec my_proc( :rc );
print rc;

fonctionnera dans SQL * Plus ou SQL Developer. Je n'ai aucune expérience avec Embarcardero Rapid XE2, donc je ne sais pas s'il prend en charge les commandes SQL * Plus comme celle-ci.

60
Justin Cave

Quelque chose comme cela vous permet de tester votre procédure sur presque tous les clients:

DECLARE 
  v_cur SYS_REFCURSOR;
  v_a   VARCHAR2(10);
  v_b   VARCHAR2(10);
BEGIN
  your_proc(v_cur);

  LOOP
    FETCH v_cur INTO v_a, v_b;
    EXIT WHEN v_cur%NOTFOUND;
    dbms_output.put_line(v_a || ' ' || v_b);
  END LOOP;
  CLOSE v_cur;
END;

Fondamentalement, votre faisceau de test doit prendre en charge la définition d'une variable SYS_REFCURSOR et la possibilité d'appeler votre procédure tout en transmettant la variable que vous avez définie, puis en parcourant le jeu de résultats du curseur. PL/SQL fait tout cela, et les blocs anonymes sont faciles à configurer et à gérer, assez adaptables et assez lisibles par quiconque travaille avec PL/SQL.

Une autre façon, bien que similaire, serait de créer une procédure nommée qui fasse la même chose, et en supposant que le client dispose d’un débogueur (comme SQL Developer, PL/SQL Developer, TOAD, etc.), vous pouvez ensuite exécuter l’exécution.

21
DCookie

Dans SQL Developer, vous pouvez cliquer avec le bouton droit sur le corps du package, puis sélectionner Exécuter. La fenêtre 'Run PL/SQL' vous permettra d'éditer le bloc PL/SQL. En cliquant sur OK, une sous-fenêtre intitulée «Variables de sortie - Journal» avec un onglet Variables de sortie apparaît. Vous pouvez sélectionner vos variables de sortie à gauche et le résultat est affiché à droite. Très pratique et rapide.

J'ai utilisé Rapid avec T-SQL et je pense qu'il y avait quelque chose de similaire à cela.

Écrire votre propre script delcare-begin-end où vous parcourez le curseur, comme dans l'exemple de DCookie, est toujours un bon exercice à faire de temps en temps. Cela fonctionnera avec n'importe quoi et vous saurez que votre code fonctionne.

8
Glenn Wark

Dans Toad 10.1.1.8, j'utilise:

variable salida refcursor
exec MY_PKG.MY_PRC(1, 2, 3, :salida)  -- 1, 2, 3 are params
print salida

Ensuite, exécutez en tant que script.

4
create or replace procedure my_proc(  v_number IN number,p_rc OUT SYS_REFCURSOR )
as
begin
open p_rc
for select 1 col1
     from dual;
 end;
 /

puis écrivez une fonction mentez ce qui appelle votre procédure stockée

 create or replace function my_proc_test(v_number IN NUMBER) RETURN sys_refcursor
 as
 p_rc sys_refcursor;
 begin
 my_proc(v_number,p_rc);
 return p_rc;
 end
 /

alors vous pouvez exécuter cette requête SQL dans l'éditeur SQLDeveloper.

 SELECT my_proc_test(3) FROM DUAL;

vous verrez le résultat dans la console, cliquez dessus avec le bouton droit de la souris, cilckez sur la vue d'un enregistrement et modifiez le résultat. Vous pouvez voir tous les enregistrements renvoyés par le curseur de référence.

3
user1118468

Je pense que ce lien vous suffira. Je l'ai trouvé lorsque je cherchais un moyen d'exécuter les procédures Oracle.

Le lien vers la page

Brève description:

--cursor variable declaration 
variable Out_Ref_Cursor refcursor;
--execute procedure 
execute get_employees_name(IN_Variable,:Out_Ref_Cursor);
--display result referenced by ref cursor.
print Out_Ref_Cursor;
0
Shivam Sharma