2010-10-19 20 views
4

J'ai une base de données Oracle 10g accessible à partir d'une application ASP.NET. Bien que j'aie beaucoup utilisé SQL Server sous différents aspects et qu'Oracle pour l'interrogation et la création de rapports, c'est la première fois que j'utilise Oracle comme base de données OLTP pour une application.Appel de procédures de package Oracle qui renvoient des curseurs de référence en langage PL/SQL direct

Les procédures au niveau de la base de données dans les packages sont de la forme:

-- TYPE refcur IS REF CURSOR; 

PROCEDURE get_some_stuff(o_cursor OUT refcur, p_param1 IN INTEGER, p_param2 IN INTEGER) IS 
BEGIN 
    OPEN o_cursor FOR 
    SELECT whatever 
    FROM whatever 
END 

Je suppose que ceux-ci sont faits de cette façon au profit de la couche de ADO.NET capable d'utiliser le curseur de la sortie param et je crois comprendre que c'est la meilleure pratique acceptable pour appeler Oracle procs à partir de .NET. Dans SQL Server, par exemple, nous n'avons pas de curseurs de référence explicites, si un proc renvoie un ensemble de résultats (ou plusieurs ensembles de résultats), accessible en tant que jeu de résultats de sortie dans ADO.NET et SSMS, et vous pouvez simplement tester les SP en faisant EXEC spname param1, param2. Le problème que j'ai est que je ne sais pas comment les appeler directement dans SQL dans Toad, par exemple, pour pouvoir tester les changements au niveau PL/SQL avant d'aller à l'application. Je suis très habitué à pouvoir exercer et même remixer des processus et des fonctions stockés dans SQL Server pour pouvoir refactoriser la couche d'interface de base de données sans affecter l'interface externe au code au niveau de l'application.

+2

double possible de [meilleure façon de tester une procédure stockée Oracle] (http://stackoverflow.com/questions/952663/easiest-method-to-test-an-oracle-stored-procedure) –

+0

@OMG Poneys Il est toujours facile de trouver les exemples seulement après avoir abandonné la recherche ... On dirait que j'ai besoin d'un crapaud plus récent, cependant. –

+0

Quoi - Toad ne vous laissera pas utiliser un bloc PLSQL anonyme ?! Je n'ai utilisé que Toad pour SQL Server, PLSQLDeveloper (version gratuite) pour moi quand j'ai affaire à Oracle =) –

Répondre

3

regard sur le lien OMG Poneys affiché, mais ce que vous pouvez faire est

var x refcursor; 


declare 

    PROCEDURE GET_SOME_STUFF(O_CURSOR OUT SYS_REFCURSOR, P_PARAM1 IN NUMBER, P_PARAM2 IN NUMBER) IS 
    BEGIN 
     OPEN O_CURSOR FOR 
     SELECT LEVEL, p_param1 ,P_PARAM2 FROM DUAL CONNECT BY LEVEL < 3; 
    END ; 

BEGIN 
GET_SOME_STUFF(:x , 5, 10); 
END; 
/

PRINT X; 

vous à peu près juste envelopper dans une annonce de bloc anonyme, il sera exécuté. J'utilise SQL Developer (fortement recommandé, gratuit avec beaucoup de support) ou SQL plus donc je ne peux pas aider avec TOAD, mais je m'attendrais à ce que ce soit la même chose. Dans SQL Developer (et dans SQL Navigator si la mémoire est bonne), vous pouvez simplement cliquer avec le bouton droit de la souris sur le paquet/la méthode que vous souhaitez et il créera le script pour vous.
dans crapaud et navigateur Je crois que vous pourriez être en mesure d'obtenir le curseur ref dans une jolie grille tandis que dans le développeur vous l'obtenez dans le texte.

SQL Developer you can unit test as well

2

Essayez ceci:

DECLARE 
    aCursor  SYS_REFCURSOR; 
    someVariable SOME_TYPE; 

    FUNCTION SOME_FUNC_RETURNING_A_CURSOR RETURN SYS_REFCURSOR IS 
    csrLocal SYS_REFCURSOR; 
    BEGIN 
    OPEN csrLocal FOR SELECT whatever FROM wherever; 

    RETURN csrLocal; 
    END SOME_FUNC_RETURNING_A_CURSOR; 

BEGIN 
    aCursor := SOME_FUNC_RETURNING_A_CURSOR; 

    WHILE TRUE LOOP 
    FETCH aCursor INTO someVariable; 
    EXIT WHEN aCursor%NOTFOUND; 

    ...do whatever with variables... 
    END LOOP; 

    COMMIT; 
END; 

Partager et profiter.

1

J'ai trouvé un moyen plus facile de cette ... essayer (Cela générera également un script pour vous)

Dans l'éditeur de procédure, chargez votre procédure. Cliquez sur le boulon éclair à exécuter et vous verrez la fenêtre Set Parameters, qui est également disponible via le bouton de la barre d'outils de l'éditeur Proc qui a une image similaire à (...), à côté de l'éclair . Cliquez sur le bouton des options de sortie et vous verrez vos options. S'il s'agit d'un curseur faible, vous devez utiliser l'option de grille en mémoire.Les résultats vont à l'onglet des résultats du curseur en bas du PE après l'exécution.

http://toad.10940.n7.nabble.com/display-ref-cursor-in-toad-td1427.html