异常调用时,存储过程:ORA-01460 - 未实现或不合理的转换要求 [英] Exception when calling stored procedure: ORA-01460 - unimplemented or unreasonable conversion requested

查看:222
本文介绍了异常调用时,存储过程:ORA-01460 - 未实现或不合理的转换要求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用ADO .NET来调用存储过程,我发现了以下错误:

I'm trying to call a stored procedure using ADO .NET and I'm getting the following error:

ORA-01460 - 未实现或   要求不合理的转换

ORA-01460 - unimplemented or unreasonable conversion requested

该存储过程,我试图调用具有以下参数:

The stored procedure I'm trying to call has the following parameters:

param1 IN VARCHAR2,
param2 IN NUMBER,
param3 IN VARCHAR2,
param4 OUT NUMBER,
param5 OUT NUMBER,
param6 OUT NUMBER,
param7 OUT VARCHAR2

下面是C#code我使用调用存储过程:

Below is the C# code I'm using to call the stored procedure:

    OracleCommand command = connection.CreateCommand();
    command.CommandType = CommandType.StoredProcedure;
    command.CommandText = "MY_PROC";

    OracleParameter param1 = new OracleParameter() { ParameterName = "param1", Direction = ParameterDirection.Input,
        Value = p1, OracleDbType = OracleDbType.Varchar2, Size = p1.Length };
    OracleParameter param2 = new OracleParameter() { ParameterName = "param2", Direction = ParameterDirection.Input,
        Value = p2, OracleDbType = OracleDbType.Decimal };
    OracleParameter param3 = new OracleParameter() { ParameterName = "param3", Direction = ParameterDirection.Input,
        Value = p3, OracleDbType = OracleDbType.Varchar2, Size = p3.Length };

    OracleParameter param4 = new OracleParameter() { ParameterName = "param4", Direction = ParameterDirection.Output,
        OracleDbType = OracleDbType.Decimal };
    OracleParameter param5 = new OracleParameter() { ParameterName = "param5", Direction = ParameterDirection.Output,
        OracleDbType = OracleDbType.Decimal};
    OracleParameter param6 = new OracleParameter() { ParameterName = "param6", Direction = ParameterDirection.Output,
        OracleDbType = OracleDbType.Decimal };
    OracleParameter param7 = new OracleParameter() { ParameterName = "param7", Direction = ParameterDirection.Output,
        OracleDbType = OracleDbType.Varchar2, Size = 32767 };

    command.Parameters.Add(param1);
    command.Parameters.Add(param2);
    command.Parameters.Add(param3);
    command.Parameters.Add(param4);
    command.Parameters.Add(param5);
    command.Parameters.Add(param6);
    command.Parameters.Add(param7);

    command.ExecuteNonQuery();

任何想法,我做错了什么?

Any ideas what I'm doing wrong?

推荐答案

不知道这是否是相关的,但SQL VARCHAR2值被限定在4000(虽然PL / SQL可以应付32000)

Not sure if it is relevant but SQL VARCHAR2 values are limited to 4000 (though PL/SQL can cope with 32 thousand)

您可以尝试修改大小= 32767到更小的东西(如500),看看是否可行。

You could try amending "Size = 32767" to something smaller (eg 500) and see if that works.

还应考虑要传递的字符串的大小。如果其中一个是50000个字符,这可能是这个问题。

Also look into the sizes of the strings you are passing in. If one of them is 50000 characters, that might be the problem.

这篇关于异常调用时,存储过程:ORA-01460 - 未实现或不合理的转换要求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆