Salutations, tousOracle - Obtenir Sélectionnez Count (*) de ... en tant que paramètre de sortie dans System.Data.OracleClient
J'ai une question. J'essaye de construire une requête paramétrée pour m'obtenir le nombre de rangées d'une table dans Oracle. Plutôt simple. Cependant, je suis un débutant Oracle ..
Je sais que dans SQL Server, vous pouvez faire quelque chose comme:
Select @outputVariable = count(*) from sometable where name = @SomeOtherVariable
et vous pouvez configurer un paramètre de sortie dans le System.Data.SqlClient pour obtenir le @outputVariable.
Penser que l'on devrait être en mesure de le faire dans Oracle ainsi, je la requête suivante
Select count(*) into :theCount from sometable where name = :SomeValue
Je mis mes paramètres d'oracle (en utilisant System.Data.OracleClient - oui je sais que ce sera dépréciée en .Net 4 - mais c'est ce que je travaille avec pour l'instant) comme suit
IDbCommand command = new OracleCommand();
command.CommandText = "Select count(*) into :theCount from sometable where name = :SomeValue";
command.CommandType = CommandType.Text;
OracleParameter parameterTheCount = new OracleParameter(":theCount", OracleType.Number);
parameterTheCount .Direction = ParameterDirection.Output;
command.Parameters.Add(parameterTheCount);
OracleParameter parameterSomeValue = new OracleParameter(":SomeValue", OracleType.VarChar, 40);
parameterSomeValue .Direction = ParameterDirection.Input;
parameterSomeValue .Value = "TheValueToLookFor";
command.Parameters.Add(parameterSomeValue);
command.Connection = myconnectionObject;
command.ExecuteNonQuery();
int theCount = (int)parameterTheCount.Value;
à ce moment-là, j'espérais que le nombre serait dans le paramètre parameterTheCount
que je pouvais facilement accéder.
Je continue d'obtenir l'erreur ora-01036 qui http://ora-01036.ora-code.com me dit de vérifier ma liaison dans l'instruction SQL. Suis-je quelque chose dans la déclaration SQL? Ai-je manqué quelque chose de simple ailleurs?
Je pourrais juste utiliser command.ExecuteScaler() car je ne reçois qu'un seul article, et je vais probablement finir par l'utiliser, mais à ce stade, la curiosité a eu raison de moi. Que faire si j'avais deux paramètres que je voulais revenir de ma requête (par exemple: select max (IVC), min (ColB) en: max,: min .....)
Merci ..
Salutations, J'ai essayé d'enlever les: dans le nom sur les définitions de paramètres. Aucun effet. J'ai fini par utiliser ExecuteScaler. Je suis toujours intéressé (par curiosité) s'il est possible de faire ce que j'essayais de faire. Le problème semble être lié à la définition du paramètre de sortie. Lorsque je supprime ce paramètre et le: theCount de la requête, il fonctionne comme un charme. – cbeuker
Mise à jour avec une tentative de SELECT INTO – FerranB
Oui, en ajoutant le début et la fin l'a fait, cela fonctionne maintenant et je peux obtenir la valeur en tant que paramètre de sortie. Je vous remercie.. – cbeuker