2010-03-02 4 views
2

Est-il possible d'appeler une procédure stockée Oracle avec un type d'enregistrement comme paramètre IN?Appelez la procédure stockée Oracle avec un enregistrement comme paramètre

Dans Oracle J'ai une définition d'enregistrement:

TYPE R_InData_tab IS RECORD (...); 
TYPE InData_tab IS TABLE OF R_InData_tab INDEX BY BINARY_INTEGER; 

Maintenant, je veux définir ce type d'enregistrement en tant que paramètre:

PROCEDURE myProcedure (inRecord IN myPackage.InData_tab); 

Et appeler cette procédure de mon code C#.

Est-ce que quelqu'un a une idée?

Merci

Répondre

1

je pense que vous êtes limité aux types intégrés Oracle définis dans OracleType. Si c'est le cas, vous devrez écrire une procédure stockée qui prend des paramètres réguliers, construit la valeur du type et appelle la procédure d'origine.

1

Vous pouvez le faire en envoyant un bloc de code comme la déclaration (il a été un moment que je travaillais avec Oracle de sorte que la syntaxe est peut-être légèrement:

DECLARE 
    param indata_tab; 
BEGIN 
    FOR i IN 1 .. :field1%COUNT LOOP 
     param(i).field1 := :field1(i); 
     param(i).field2 := :field2(i); 
    END LOOP; 
    myProcedure(param); 
END; 

puis vous liez les paramètres field1 et field2 aux tableaux.

0

Si vous utilisez Oracle Data Provider for .NET (ODP.NET), il est certainement possible de call the procedure directly sans utiliser le massant suggéré par erikkallen.

Cependant, je ne suis pas sûr que cela résoudre votre problème. comme vous définissez les types dans le package qui contient la procédure. Pour utiliser la méthode liée ci-dessus, vos types doivent être créés comme des objets séparés dans la base de données, en utilisant DDL comme ceci:

CREATE TYPE R_InData_tab AS OBJECT (...); 
CREATE TYPE InData_tab AS TABLE OF R_InData_tab; 

Cela peut nécessiter quelques modifications dans le paquet, comme INDEX PAR types ne sont pas pris en charge en tant qu'objets de schéma, les tables imbriquées (ou varrays) doivent être utilisées.

Questions connexes