ORA-01460: non mises en œuvre ou déraisonnable de la conversion demandée
Quand je lance le suivant .Net code:
using (var c = Shared.DataSources.BSS1.CreateCommand())
{
c.CommandText = "\r\nSelect c1, c2, c3, rowid \r\nFrom someSpecificTable \r\nWhere c3 = :p0";
var p = c.CreateParameter() as Oracle.DataAccess.Client.OracleParameter;
c.Parameters.Add(p);
p.OracleDbType = Oracle.DataAccess.Client.OracleDbType.Varchar2;
p.DbType = System.Data.DbType.AnsiString;
p.Size = 20;
p.Value = "007";
p.ParameterName = ":p0";
using (var r = c.ExecuteReader())
{
r.Read();
}
}
J'obtiens l'erreur suivante:
ORA-01460: unimplemented or unreasonable conversion requested
ORA-02063: preceding line from XXX
Ce n'est pas ma base de données, et je n'ai pas de contrôle sur les instructions select que je reçois, ce tableau EST à partir d'un lien de base de données.
Le plus drôle, c'est que si j'ajoute le code suivant juste avant la ExecuteReader il fonctionne très bien.
c.CommandText = c.CommandText.Replace("\r\n", " ");
Malheureusement, ce n'est pas une bonne solution dans mon cas, comme je ne peux pas le contrôle à SQL nore puis-je changer cette façon.
Pour la table elle-même, les colonnes sont:
c1 Nombre(5)
c2 varchar2(40)
c3 varchar2(20).
Je sais que ORA-02063 qui vient après indiquent quelque chose sur un lien de base de données, mais j'ai regardé dans le synonim table et il n'est pas venu de toute database_link, et aussi je ne pense pas que \r\n devrait affecter lien de base de données.
J'ai essayé d'exécuter la requête sans paramètres liés, et il a fait un travail - mais encore une fois une mauvaise pratique de le faire dans des termes généraux.
Le problème, c'est que la concurrence d'un autre outil qui ne l'est pas .Net, c'est de travailler et donc il n'est pas un problème général.
Je n'avais pas reproduire le problème dans mon propre environnement, c'est un client de base de données et du site.
Je suis à l'aide de la client 11.1.6.20 et aussi testé avec instant client 11.2.3.0
La db est de 10 et la db lien est un oracle v8 de base de données
Toute aide serait appréciée
C'est une application qui est migré automatiquement à partir d'une langue à l'autre. La plupart du SQL est auto-généré à la volée. Certains de il est incorporé dans le code.
Mon gues il me doit quelque chose dans le .Net pilote ou une application. Il est par exemple pas de problème à toutes les instructions SQL intégré avec des retours à la ligne via JDBC
Ce n'est pas chaque requête. C'est cette requête spécifique. J'ai exécuté des milliers d'autres requêtes, et sont tous beaux.
Je pense qu'il a quelque chose à faire avec des variables de liaison, odp.net et le lien de base de données.
OriginalL'auteur Noam | 2012-06-14
Vous devez vous connecter pour publier un commentaire.
Ce problème peut être recréé avec directe les étapes. C'est, de toute requête SQL ayant une chaîne littérale, dans la clause where, plus de 4000 caractères donne une erreur "ORA-01704: littéral de chaîne trop longue"
Mais, lorsque la même requête est exécutée via JDBC elle donne "ORA-01460: non mises en œuvre ou déraisonnable de la conversion demandée"
OriginalL'auteur Kiran
J'ai enfin trouvé la réponse!!!
Après l'enquête et de réflexion dans le code, j'ai trouvé que la modification de la Direction du Paramètre d'entrée et de sortie - le problème a été résolu.
OriginalL'auteur Noam
Après beaucoup de recherches, j'ai découvert qu'il est tout au sujet du fait que nous avons lié des paramètres qui sont utilisés à partir de ODP.NET et le ciblage des tables à partir d'un DBLINK à un V8 serveur Oracle.
Une fois que j'ai éliminé les paramètres liés et tout a fonctionné.
C'est tout à l'arrière, mais je pense qu'il avait quelque chose à faire avec différentes longueurs de chaîne les chaînes de caractères envoyées pour le paramètre de limite.
Il semble qu'elle ne tient pas compte de la taille de la propriété, de sorte que si dans la première requête, j'ai envoyé une chaîne de longueur 10 et dans la deuxième chaîne, j'ai envoyé une chaîne d'une longueur de 12, je vais les faire cette erreur.
J'ai aussi trouvé l'oracle des articles à ce sujet :
https://community.oracle.com/thread/2460796?tstart=0
et le patch pour elle:
https://support.oracle.com/CSP/main/article?cmd=show&type=&id=745005.1
Mais j'ai trouvé un fix dans mon code qui fait résolu - voir ma prochaine réponse.
Espère que cela aide quelqu'un.
OriginalL'auteur Noam
Accepté la réponse n'a pas fonctionné pour moi. Cependant, après avoir lu les liens, j'ai appliqué la suite – bien que cela n'implique la modification du SQL.
Dans mon cas, je savais que la gauche maximale de la liaison variable (la longueur de la réduction après le premier appel est quelles sont les causes de la question). J'ai donc collier de la .NET de la chaîne, et a ajouté une
TRIM
dans le SQL. Suivant votre exemple:OriginalL'auteur AdamRossWalker