Oracle ODP.NET使用参数调用包过程时出现问题
| 
                        副标题[/!--empirenews.page--]
                         
        
           
 问题: 
  ORA-06502: PL/SQL: numeric or value error ORA-06512: at line 1 程序定义: procedure DUP_EXACT (
    SSN in VARCHAR2,LASTNAME in VARCHAR2,FIRSTNAME in VARCHAR2,MASTERRECORD IN VARCHAR2 DEFAULT NULL,C_Table out sp_cursor) 
 参数创建: For Each SearchParameter In SearchParameters
        ValueParameter = New OracleParameter
        ValueParameter.Direction = ParameterDirection.Input
        ValueParameter.OracleDbType = OracleDbType.Varchar2
        ValueParameter.ParameterName = SearchParameter.ParameterFieldName
        If Not SearchParameter.TransformedFieldValue = Nothing Then
            ValueParameter.Value = SearchParameter.TransformedFieldValue
        Else
            ValueParameter.Value = String.Empty
        End If
        ExactMatchSearchParameters.Add(ValueParameter)
    Next
    Dim MasterRecordParameter As New OracleParameter()
    MasterRecordParameter.Direction = ParameterDirection.Input
    MasterRecordParameter.OracleDbType = OracleDbType.Varchar2
    MasterRecordParameter.ParameterName = "MASTERRECORD"
    MasterRecordParameter.Value = DBNull.Value
    ExactMatchSearchParameters.Add(MasterRecordParameter)
    Dim TableParameter As New OracleParameter
    TableParameter.ParameterName = "C_Table"
    TableParameter.OracleDbType = OracleDbType.RefCursor
    TableParameter.Direction = ParameterDirection.Output
    ExactMatchSearchParameters.Add(TableParameter) 
 执行: Using Command As OracleCommand = 
        New OracleCommand(
            QualifiedProcedureName,Me.Database.Connection)
    Command.CommandType = CommandType.StoredProcedure
    'Command.AddToStatementCache = False '
    For Each Parameter In Parameters
        Command.Parameters.Add(Parameter)
    Next
    Command.Connection.Open()
    'Command.Connection.FlushCache() '
    Using Reader As OracleDataReader = Command.ExecuteReader() 
 示例成功&失败: *** SUCCESS *** [SSN]: "6#######0" [LASTNAME]: "W_____x" [FIRSTNAME]: "D______e" [MASTERRECORD]: "" [C_Table]: "" *** FAILURE *** [SSN]: "2#######_1" [LASTNAME]: "C____n" [FIRSTNAME]: "L___e" [MASTERRECORD]: "" [C_Table]: "" *** FAILURE *** [SSN]: "5#######5" [LASTNAME]: "C_______s" [FIRSTNAME]: "R_____o" [MASTERRECORD]: "" [C_Table]: "" *** SUCCESS *** [SSN]: "6#######0" [LASTNAME]: "P___a" [FIRSTNAME]: "N______r" [MASTERRECORD]: "" [C_Table]: "" 附加测试: 我试着运行跟踪来查看ODP.NET实际上在参数中发送到数据库的内容,但是tracefiles没有提供任何有意义的信息(IE:实际参数值) TIME:2013/02/14-14:10:19:678 TID:231c OpsSqlPrepare2(): SQL: Begin PACKAGE.DUP_EXACT(:v0,:v1,:v2,:v3,:v4); End; 示例参数值: ?Command.Parameters(0)
{SSN}
    ArrayBindSize: Nothing
    ArrayBindStatus: Nothing
    CollectionType: None {0}
    DbType: String {16}
    Direction: Input {1}
    InvalidPrecision: 100
    InvalidScale: 129
    InvalidSize: -1
    IsNullable: False
    m_bOracleDbTypeExSet: False
    m_bReturnDateTimeOffset: False
    m_collRef: {Oracle.DataAccess.Client.OracleParameterCollection}
    m_commandText: ""
    m_direction: Input {1}
    m_disposed: False
    m_enumType: ORADBTYPE {4}
    m_modified: False
    m_oraDbType: Varchar2 {126}
    m_paramName: "SSN"
    m_paramPosOrName: ""
    m_saveValue: Nothing
    MaxScale: 127
    MinScale: -84
    Offset: 0
    OracleDbType: Varchar2 {126}
    OracleDbTypeEx: Varchar2 {126}
    ParameterEnumType: ORADBTYPE {4}
    ParameterName: "SSN"
    Precision: 0
    Scale: 0
    Size: 0
    SourceColumn: ""
    SourceColumnNullMapping: False
    SourceVersion: Current {512}
    Status: Success {0}
    UdtTypeName: ""
    Value: "4#######0" {String}
解决方法答案是Oracle 9.2.0.6.0中存在一个导致间歇性VARCHAR2绑定错误的错误.真棒.This forum post finally gave me the answer: 
 快速检查确认我们所使用的版本受到影响: select * from v$version; ---------------------------------------------------------------- Oracle9i Enterprise Edition Release 9.2.0.6.0 - Production PL/SQL Release 9.2.0.6.0 - Production CORE 9.2.0.6.0 Production TNS for 32-bit Windows: Version 9.2.0.6.0 - Production NLSRTL Version 9.2.0.6.0 - Production 幸运的是我们的生产服务器是10g,所以我们最终将我们的开发服务器更新到10g,而中提琴,没有更多的问题. 回答路径: Parameter issue with Oracle RefCursor Oracle ODP.NET Forum (编辑:91站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!  | 
                  


