次の .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();
}
}
次のエラーが表示されます。
ORA-01460: unimplemented or unreasonable conversion requested
ORA-02063: preceding line from XXX
これは私のデータベースではなく、取得した select ステートメントを制御することはできません。そのテーブルはデータベース リンクからのものです。
面白いことに、ExecuteReader の直前に次のコードを追加すると、問題なく動作します。
c.CommandText = c.CommandText.Replace("\r\n", " ");
残念ながら、SQL を制御できないため、私の場合は良い解決策ではありません。そのように変更することはできません。
テーブル自体に関しては、列は c1 Number(5) c2 varchar2(40) c3 varchar2(20) です。
後に続くORA-02063はデータベースリンクに関する何かを示していることは知っていますが、シノニムテーブルを調べたところ、データベースリンクからのものではなく、\r\nがデータベースリンクに影響を与えるとは思いません.
バインドされたパラメーターなしでクエリを実行しようとしましたが、うまくいきましたが、一般的な用語でそうするのは悪い習慣です。
問題は、.Net ベースではない競合ツールが動作しているため、一般的な問題ではないことです。
私自身の環境でも問題を再現できませんでした。これは顧客データベースとサイトです。私はインスタントクライアント11.1.6.20を使用しており、インスタントクライアント11.2.3.0でもテストしました
db は 10 で、db リンクは oracle v8 データベースへのリンクです
どんな助けでもいただければ幸いです