当我运行以下.Net代码时:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
ORA-01460: unimplemented or unreasonable conversion requested
ORA-02063: preceding line from XXX
Run Code Online (Sandbox Code Playgroud)
这不是我的数据库,我无法控制我得到的select语句,表IS来自数据库链接.
有趣的是,如果我在ExecuteReader之前添加以下代码,它运行正常.
c.CommandText = c.CommandText.Replace("\r\n", " ");
Run Code Online (Sandbox Code Playgroud)
不幸的是,在我的情况下,这不是一个好的解决方案,因为我无法控制到SQL,我可以通过这种方式进行更改.
对于表本身,列是:c1 Number(5)c2 varchar2(40)c3 varchar2(20).
我知道之后出现的ORA-02063表明了一些关于数据库链接的内容,但我查看了synonim表并且它并非来自任何database_link,而且我也不认为\ r \n应该影响数据库链接.
我尝试运行没有绑定参数的查询,它确实有效 - 但是在一般术语中这样做也是不好的做法.
麻烦的是,基于.Net的竞争工具正在运行,因此它不是一般问题.
我也无法在我自己的环境中重现问题,这是一个客户数据库和站点.我正在使用即时客户端11.1.6.20并使用即时客户端11.2.3.0对其进行了测试
db为10,db链接到oracle v8数据库
任何帮助,将不胜感激
Kir*_*ran 10
可以使用直接的步骤重新创建此问题.也就是说,任何具有字符串文字的SQL查询,在where子句中,长度超过4000个字符会产生错误"ORA-01704:字符串文字太长"
但是,当通过JDBC执行相同的查询时,它会提供"ORA-01460:请求未实现或不合理的转换"
终于我找到了答案!!!
在调查并反映了代码之后,我发现通过将“参数的方向”更改为输入输出,问题得以解决。
p.Direction = ParameterDirection.InputOutput;
Run Code Online (Sandbox Code Playgroud)