bonjour,
j aimerai savoir comment passer des parametres en input. j ai une procédure stockée qui reçoit en input des paramètres de type table pl/sql
comment je passe des paramètres de ce type en c#?
merci
bonjour,
j aimerai savoir comment passer des parametres en input. j ai une procédure stockée qui reçoit en input des paramètres de type table pl/sql
comment je passe des paramètres de ce type en c#?
merci
Il s'agit bien de paramètre de type table value parameter ? Dans ce cas il n'y a rien de particulier en plus que des paramètres "normaux" mise à part que le type du paramètre doit être "structured"
http://msdn.microsoft.com/en-us/library/bb675163.aspx
http://www.codeproject.com/KB/cs/CSh...lueParams.aspx
" Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]
j ai une procedure stockée de 22 parametres, 3 sont des inputs, les autres c est outputs. certain de ses outputs sont des tables pl/sql dans la procedure stockée. je ne sais pas quels paramètres donner à l'appel de la procedure
voici mon une partie de la procedure stockée:
N_IDRENS, N_LECT, N_TYPE, S_TITRE, S_UNITE, N_DEL, N_MARQ, N_IDGROUP, S_GROUPE, S_MOYEN, N_NORME, N_TOLEM, N_TOLEP, N_INIT, N_POS, S_REV, S_CRIT, S_AUTO, S_CODEAUTO...sont des tables pl/sql et sont tous des ouput...comment je fais stp?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 PROCEDURE PROC_RECH2 (N_SOC IN NUMBER, S_REF_ART IN VARCHAR2, S_REF_ACT IN VARCHAR2, N_IDRENS OUT TAB_NUM, N_LECT OUT TAB_NUM,N_TYPE OUT TAB_NUM, S_TITRE OUT TAB_CHR, S_UNITE OUT TAB_CHR,N_DEL OUT TAB_NUM, N_MARQ OUT TAB_NUM, N_IDGROUP OUT TAB_NUM, S_GROUPE OUT VARCHAR2, S_MOYEN OUT TAB_CHR, n_NORME OUT TAB_NUM, N_TOLEM OUT TAB_NUM, N_TOLEP OUT TAB_NUM, N_INIT OUT TAB_NUM, n_Pos OUT TAB_NUM, S_REV OUT TAB_CHR, s_crit OUT TAB_CHR, s_Auto OUT TAB_CHR,s_CodeAuto OUT TAB_CHR ) IS lnd NUMBER...
Tu fais comme mentionné dans les liens supra, simplement en omettant pas de préciser la direction du paramètre comme étant Output
Accessoirement, je m'interroge sur le design de la proc stoc .....
Code : Sélectionner tout - Visualiser dans une fenêtre à part myParameter.Direction = ParameterDirection.Output;
Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...
Une réponse vous a aidé ? utiliser le bouton
"L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel
Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...
Une réponse vous a aidé ? utiliser le bouton
"L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel
ce que je veux faire c'est passer un paramètre de type tableau comme un dataset ou datatable...habituellement je fais comme suit:
et ça marche très bien. si c'etait possible de faire OleDbType.table ou un truc du genre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 OleDbParameter carte = myOleDbCommand_FillCS.Parameters.Add("N_IDA", OleDbType.Numeric); carte.Direction = ParameterDirection.Input; OleDbParameter OF = myOleDbCommand_FillCS.Parameters.Add("S_OF", OleDbType.VarChar, 50); OF.Direction = ParameterDirection.Output;
ps: la procedure stockée c'est pas moi qui l'ai ecrite, je travaille dessus c'est tout. merci
De quel type de SGBD s'agit il ? Du Oracle visiblement, puisque tu parles de PL/SQL.
Donc, déjà on ne comprends pas pourquoi tu utilises OleDB plutot que l'ODP (et avec OleDB en effet, je ne sais pas si les TVP peuvent être utilisés; très possible que ce ne soit pas le cas).
EDIT : en effet, OleDBType n'a pas d'entrée Structured.
Donc, si tu veux faire cela, n'utilises pas OleDB (de toute manière on n'en voit pas bien la raison).
Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...
Une réponse vous a aidé ? utiliser le bouton
"L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel
la raison est que la version d'oracle sur laquelle je travaille la 8.0 pose bcp de problème avec l ancien système mit en place, il y a des attentes de connexions et des crash tout le temps. avec oledb ça se passe mieu je sais pas pourquoi. mais je ne pense pas qu'oracle a le type structured non plus
Si, le type de paramètre Structured existe avec la version 10.0.2 de ODP mais je ne sais pas si il fonctionne avec la version 8 en serveur.
Cherche si c'est le cas ou vois avec ton DBA.
Le type de paramètre Structured existe aussi avec le provider Oracle de Microsoft (qui ne sera normalement plus supporté - Microsoft recommande l'usage de l'ODP - mais existe toujours même en Fw 4.0)
Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...
Une réponse vous a aidé ? utiliser le bouton
"L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel
structured se met directement en rouge, donc ça passe pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 OracleCommand mycmd = new OracleCommand("RNS.PROC_RECH2", connection); mycmd.CommandType = CommandType.StoredProcedure; OracleParameter parameter = new OracleParameter(); parameter.ParameterName = "@N_IDRENS"; parameter.OracleType = System.Data.OracleClient.OracleType.Structured; parameter.Value = mydata3; mycmd.Parameters.Add(parameter);
Effectivement, je t'ai induit en erreur; je ne trouve pas ce type de paramètre avec ODP (je me suis mélangé les pinceaux avec Sql Server).
Je cherche et reviens vers toi (pas tout de suite).
Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...
Une réponse vous a aidé ? utiliser le bouton
"L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel
Peut être quelque chose là :
http://download.oracle.com/docs/html...1/featUDTs.htm
Il faut utiliser le OracleDbType.Object et il faut le client 11g (ODP 11.1.0.6.20 apparement).
Accessoirement, ton code n'est pas de l'ODP mais de l'OracleClient Microsoft.
Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...
Une réponse vous a aidé ? utiliser le bouton
"L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel
Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...
Une réponse vous a aidé ? utiliser le bouton
"L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel
Tu lui as fais remarquer que la conception de sa procédure stockée est tordue. 22 paramètres c'est trop en plus 3 inputs pour 19 outputs c'est un peu du grand n'importe quoi.
Je me demande même si sa procédure est vraiment "appelable" depuis l'extérieure..
Bref, juste par curiosité elle s'appelle comment la procédure et qu'est-ce qu'elle est sensée faire ?
" Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]
voici la procedure complete
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 PROCEDURE PROC_RECH2 (N_SOC IN NUMBER, S_REF_ART IN VARCHAR2, S_REF_ACT IN VARCHAR2, N_IDRENS OUT TAB_NUM, N_LECT OUT TAB_NUM,N_TYPE OUT TAB_NUM, S_TITRE OUT TAB_CHR, S_UNITE OUT TAB_CHR,N_DEL OUT TAB_NUM, N_MARQ OUT TAB_NUM, N_IDGROUP OUT TAB_NUM, S_GROUPE OUT VARCHAR2, S_MOYEN OUT TAB_CHR, n_NORME OUT TAB_NUM, N_TOLEM OUT TAB_NUM, N_TOLEP OUT TAB_NUM, N_INIT OUT TAB_NUM, n_Pos OUT TAB_NUM, S_REV OUT TAB_CHR, s_crit OUT TAB_CHR, s_Auto OUT TAB_CHR,s_CodeAuto OUT TAB_CHR ) IS Ind NUMBER; RefNum NUMBER; CURSOR cur1 IS SELECT RNSID,RNSLECT, rnstype, rnstitre, rnsunite, rnsmarq, rnsdel, rnsref, rnsmoyen,rnsnorme,rnstolmoins,rnstolplus,rnsinit, rnscote, rnsrev, rnscritique, rnsauto, rnscodeauto FROM RENS WHERE rnssociete = N_SOC AND RNSARTICLE = S_REF_ART AND NVL(RNSOPER,'NULL') = NVL(S_REF_ACT,'NULL') ORDER BY RNSCOTE; CURSOR cur2 IS SELECT RNSarticle FROM RENS WHERE rnssociete = N_SOC AND RNSID = refnum; BEGIN -- Remplissage des tableaux Ind := 1; FOR rrr IN cur1 LOOP N_IDRENS(Ind):=rrr.RNSID; N_LECT(Ind):=rrr.RNSLECT; N_TYPE(Ind):=rrr.rnstype; S_TITRE(Ind):=rrr.rnstitre; S_UNITE(Ind):=rrr.rnsunite; N_DEL(Ind):=rrr.rnsdel; N_MARQ(Ind):=rrr.rnsmarq; N_IDGROUP(ind):=rrr.rnsref; S_MOYEN(ind):=rrr.rnsmoyen; N_NORME(ind):=rrr.rnsnorme; N_TOLEM(ind):=rrr.rnstolmoins; N_TOLEP(ind):=rrr.rnstolplus; N_INIT(ind):=rrr.rnsinit; N_POS(ind):=rrr.rnscote; S_REV(ind):=rrr.rnsrev; S_crit(ind):=rrr.rnscritique; s_Auto(ind):=rrr.rnsauto; s_CodeAuto(ind):=rrr.rnscodeauto; RefNum:=rrr.RNSref; Ind := Ind+1; END LOOP; OPEN cur2; FETCH cur2 INTO S_GROUPE; END PROC_RECH2;
je n ai pas une version plus recente de oracle on travaille sur la 8.0 dans l entreprise ou je suis..
cette procedure il reussit a l appeler mais avec centura2000, un vieu langage...le but justement est de tout reecrire en c#
Concernant la version, je parlais du client ODP pas du serveur Oracle.
En 8 de toute manière, il n'y a aucun moyen de l'appeler depuis C#, c'est tout.
Donc essayer avec la version d'ODP que je t'ai indiquée. (si elle marche avec un vieux Nanard comme le 8, ce dont je n'ai pas la moindre idée - je suis informaticien pas paléontologue).
Sinon, en lisant ce chef d'oeuvre de programmation que constitue cette procédure, je suis mort de rire.
(accessoirement elle ne sert à rien, enfin elle n'a aucun effet positif sur les perf, ce qui est un des buts d'un PS).
Je pense que ton maitre de stage n'est, jusqu'à plus ample informé, pas vrailment une épée ....
Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...
Une réponse vous a aidé ? utiliser le bouton
"L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager