1. ホーム
  2. oracle

[解決済み] ORA-01460: 未実装または不当な変換が要求されました。

2022-02-18 04:22:37

質問事項

以下の.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文を制御することはできません、そのテーブルはデータベースリンクからIS。

面白いのは、ExecuteReaderの直前に以下のコードを追加すると、正常に実行されることです。

c.CommandText = c.CommandText.Replace("\r\n", " ");

残念ながら、私の場合、SQLを制御することはできませんし、そのように変更することもできないので、良い解決策ではありません。

テーブルそのものは、カラムは c1 数字(5) c2 varchar2(40) c3 varchar2(20)です。

その後に出てくるORA-02063はデータベースリンクのことを指していると思いますが、synonimテーブルを見たところ、database_linkから来るものではありませんでしたし、また、database linkには˶‾‾‾‾˶は影響しないのではと思いました。

バインドパラメータなしでクエリを実行してみましたが、うまくいきました - しかし、再び一般用語でそうするのは悪い習慣です。

困ったことに、.Netベースではない競合ツールが動いているため、一般的な問題とは言えない。

また、私自身の環境では問題を再現できませんでした。これは顧客のデータベースとサイトです。 インスタントクライアント11.1.6.20を使用していますが、インスタントクライアント11.2.3.0でもテストしています。

dbは10で、dbリンクはOracle v8データベースです。

ご協力をお願いします。

解決方法は?

やっと答えが見つかりました!!!

コードを調査し反映させた結果、ParameterのDirectionをinput outputに変更することで問題が解決することがわかりました。

p.Direction = ParameterDirection.InputOutput;