Est-il possible de passer correctement un OracleParameter à un paramètre booléen dans une procédure stockée pl/sql?Est-ce que odp.net peut passer un paramètre à un paramètre booléen pl/sql?
Répondre
Vous ne pouvez pas utiliser de paramètres booléens dans SQL. L'appel d'une procédure stockée qui prend ou retourne une valeur booléenne ne fonctionnera donc pas en SQL. Il n'y a aucun problème à utiliser une telle procédure depuis un bloc pl/sql.
AJOUTÉE de réponse JCallico:
J'ai utilisé la solution suivante pour contourner cette limitation:
- Enroulez le appel de fonction à l'aide d'un bloc anonyme.
- Retourne une variable de sortie contenant 1 ou 0.
- Lire la variable de sortie et la convertir en valeur booléenne.
Voici quelques exemples de code:
using (var connection = new OracleConnection("<connection string>"))
{
var command = new OracleCommand();
command.Connection = connection;
command.CommandText =
"declare v_bool boolean;" +
"begin " +
"v_bool := auth_com.is_valid_username (:username); "+
"if (v_bool = TRUE) then select 1 into :v_result from dual; end if; " +
"if (v_bool = FALSE) then select 0 into :v_result from dual; end if; " +
"end;";
command.Parameters.Add(new OracleParameter { ParameterName = "username", OracleDbType = OracleDbType.NVarchar2, Size=512, Direction = ParameterDirection.Input });
command.Parameters.Add(new OracleParameter { ParameterName = "v_result", OracleDbType = OracleDbType.Decimal, Direction = ParameterDirection.Output });
try
{
connection.Open();
command.ExecuteNonQuery();
}
finally
{
connection.Close();
}
bool success = Convert.ToBoolean(((OracleDecimal)command.Parameters["v_result"].Value).ToInt32());
}
EDIT:
Alex Keh d'Oracle, octobre 2013:
Nous prévoyons de soutenir ODP.NET Boolean dans le fournisseur géré à court terme, probablement au milieu de l'année prochaine.
J'ai utilisé la solution suivante pour contourner cette limitation:
- Enroulez le appel de fonction à l'aide d'un bloc anonyme.
- Retourne une variable de sortie contenant 1 ou 0.
- Lire la variable de sortie et la convertir en valeur booléenne.
Voici quelques exemples de code:
using (var connection = new OracleConnection("<connection string>"))
{
var command = new OracleCommand();
command.Connection = connection;
command.CommandText =
"declare v_bool boolean;" +
"begin " +
"v_bool := auth_com.is_valid_username (:username); "+
"if (v_bool = TRUE) then select 1 into :v_result from dual; end if; " +
"if (v_bool = FALSE) then select 0 into :v_result from dual; end if; " +
"end;";
command.Parameters.Add(new OracleParameter { ParameterName = "username", OracleDbType = OracleDbType.NVarchar2, Size=512, Direction = ParameterDirection.Input });
command.Parameters.Add(new OracleParameter { ParameterName = "v_result", OracleDbType = OracleDbType.Decimal, Direction = ParameterDirection.Output });
try
{
connection.Open();
command.ExecuteNonQuery();
}
finally
{
connection.Close();
}
bool success = Convert.ToBoolean(((OracleDecimal)command.Parameters["v_result"].Value).ToInt32());
}
EDIT:
Alex Keh d'Oracle, octobre 2013:
Nous prévoyons de soutenir ODP.NET Boolean dans le fournisseur géré à court terme, probablement au milieu de l'année prochaine.
- 1. Passer un NSArray en tant que paramètre?
- 2. Comment passer un paramètre d'ASP à XSL?
- 3. Passer un paramètre à System.EventHandler dans C#
- 4. Comment passer un paramètre à cette jquery?
- 5. Comment passer un paramètre à une servlet
- 6. Iphone - comment passer un paramètre à animationDidStop?
- 7. JSF- passer un paramètre à valuechangelistener
- 8. comment passer un itérateur Ruby en tant que paramètre?
- 9. VB.NET - Passer un événement en tant que paramètre
- 10. Passer un délégué lui-même en tant que paramètre
- 11. C# - Comment passer un type en paramètre
- 12. Passer un tableau en tant que paramètre de fonction JavaScript
- 13. Passer un paramètre à un service Windows dans C#
- 14. Passer un paramètre CSV dans Postgres
- 15. Pourquoi cette instruction sql dit-elle que c'est un booléen et non un paramètre? (php/Mysql)
- 16. passer un paramètre a son onload
- 17. Ruby win32ole - comment passer un paramètre VARIANT?
- 18. comment puis-je passer un paramètre d'ASP.NET à SSRS Report?
- 19. Comment passer un paramètre à SQlDataSource à partir de gridview?
- 20. Passer une requête en tant que paramètre
- 21. Un conteneur unité peut-il passer une référence de lui-même en tant que paramètre constructeur?
- 22. Passer l'URL en tant que paramètre
- 23. Comment passer un paramètre à l'opérateur IN dans NHibernate?
- 24. référenceurs un paramètre à un autre paramètre dans testng.xml fichier
- 25. Plug-in Maven Mojo simple: Paramètre booléen
- 26. Unity Application Block, Comment passer un paramètre à Injection Factory?
- 27. Comment passer une variable à un paramètre d'impression awk
- 28. Passer un paramètre à la méthode serveur en utilisant JavaScript
- 29. Comment passer un paramètre à une fonction Javascript définie dynamiquement?
- 30. Passer un paramètre à une fonction de comparaison?
Y a-t-il une solution de rechange? Puis-je passer un type alternatif? – haymansfield
Vous pouvez redéfinir votre procédure pour qu'elle prenne une valeur Y/N ou 1/0. Tout ce que tu aimes. – Rene
Il y a des moments où la modification de la fonction d'origine n'est pas une option. Voir une solution de contournement ci-dessous. – JCallico