Based on a quick look at the exception, it looks like you've run into the same 
issue we did, which is that the provider you are using has difficulties mapping 
the larger Oracle number types into the .net types.

At the time that we encountered this issue we were only in a position to 
evaluate the Oracle 9i client and the Microsoft client. Since the Oracle 9i 
client performed markedly better, we worked around the problem by modifying our 
query statements to cast such problematic number fields to varchar and allow 
ibatis.net to map those back into the desired .net numeric types.

We still have yet to evaluate the 10g client, but I'd like to get to it 
sometime soon. In the meantime, these workarounds have been rare, so there's 
not been much need to push towards the 10g client, as much as I might like to 
dig into it.

Jeremy Gray

-----Original Message-----
From: Uwe Lesta [mailto:[EMAIL PROTECTED] 
Sent: Friday, December 02, 2005 3:02 AM
To: [email protected]
Subject: Re: Oracle provider with iBatis dataMapper 1.2


Befor i dig into some solution i like to ask my question with other words:

Which Oracle provider is best tested and is advised by the iBatis comunety ?


Jeremy Gray wrote:

> Can you provide any details regarding the exceptions you are seeing? We

sure

my test query is :

        <select id="SelectFilter" parameterClass="MMServer.DAL.USERSDB_Filter" 
resultMap="USERSSelectResult" >
                SELECT
                        ID, LOGIN, FIRSTNAME, LASTNAME, ROLE_ID, ORG_ID, 
REMARK, EXPIRES, MODIFIED, DISABLED, ACTIVE
                FROM USERS
                <dynamic prepend="WHERE">
                        <isNotNull prepend="AND" property="LOGIN">
                                LOGIN like #LOGIN#
                        </isNotNull>    
                        <isGreaterThan prepend="AND" property="ACTIVE" 
compareValue="-1">
                                ACTIVE = #ACTIVE#
                        </isGreaterThan>
                </dynamic>
        </select>

with
        <add key="provider" value="oracle10.1" />
i get

[OracleTypeException: Numerische Stellenangabe liegt außerhalb des gültigen 
Bereiches (1 - 38)]
    Oracle.DataAccess.Types.OracleDecimal.ConvertToPrecScale(OracleDecimal 
value1, Int32 precision, Int32 scale) +667
    Oracle.DataAccess.Client.OracleParameter.PreBind_Decimal() +3956
    Oracle.DataAccess.Client.OracleParameter.PreBind(OracleConnection conn, 
IntPtr errCtx, Int32 arraySize) +132
    Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, 
Boolean fillRequest, CommandBehavior behavior) 
+2349
    Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, 
Boolean fillRequest, CommandBehavior behavior) +0
    
Oracle.DataAccess.Client.OracleCommand.System.Data.IDbCommand.ExecuteReader() 
+81
    
Oracle.DataAccess.Client.OracleCommand.System.Data.IDbCommand.ExecuteReader() +0
    
IBatisNet.DataMapper.MappedStatements.MappedStatement.RunQueryForList(RequestScope
 request, IDalSession session, 
Object parameterObject, Int32 skipResults, Int32 maxResults, RowDelegate 
rowDelegate)
    
IBatisNet.DataMapper.MappedStatements.MappedStatement.ExecuteQueryForList(IDalSession
 session, Object 
parameterObject, Int32 skipResults, Int32 maxResults)
    
IBatisNet.DataMapper.MappedStatements.MappedStatement.ExecuteQueryForList(IDalSession
 session, Object parameterObject)
    IBatisNet.DataMapper.SqlMapper.QueryForList(String statementName, Object 
parameterObject)
    MMServer.DAL.USERSDB.SelectFilter(USERSDB_Filter filter) in 
e:\projekteweb\lft\medienmanager\mmserver\app_code\dal\man\usersdb.cs:103
    MMServer.Pages.ifPlayListen.Page_Load(Object sender, EventArgs e) in 
e:\projekteweb\lft\medienmanager\mmserver\app_code\pages\playlisten\ifplaylisten.aspx.cs:41


with
        <add key="provider" value="oracleClient1.0" />

i get

[Exception: Parameter 'param0': No size set for variable length data type: 
String.]
    
System.Data.OracleClient.OracleParameterBinding.PrepareForBind(OracleConnection 
connection, Int32& offset) +720
    System.Data.OracleClient.OracleCommand.Execute(OciHandle statementHandle, 
CommandBehavior behavior, Boolean 
isReader, Boolean needRowid, OciHandle& rowidDescriptor, ArrayList& 
refCursorParameterOrdinals) +1919
    System.Data.OracleClient.OracleCommand.Execute(OciHandle statementHandle, 
CommandBehavior behavior, ArrayList& 
refCursorParameterOrdinals) +28
    System.Data.OracleClient.OracleCommand.ExecuteReader(CommandBehavior 
behavior) +272
    System.Data.OracleClient.OracleCommand.ExecuteReader() +7
    
System.Data.OracleClient.OracleCommand.System.Data.IDbCommand.ExecuteReader() +5
    
IBatisNet.DataMapper.MappedStatements.MappedStatement.RunQueryForList(RequestScope
 request, IDalSession session, 
Object parameterObject, Int32 skipResults, Int32 maxResults, RowDelegate 
rowDelegate)
    
IBatisNet.DataMapper.MappedStatements.MappedStatement.ExecuteQueryForList(IDalSession
 session, Object 
parameterObject, Int32 skipResults, Int32 maxResults)
    
IBatisNet.DataMapper.MappedStatements.MappedStatement.ExecuteQueryForList(IDalSession
 session, Object parameterObject)
    IBatisNet.DataMapper.SqlMapper.QueryForList(String statementName, Object 
parameterObject)
    MMServer.DAL.USERSDB.SelectFilter(USERSDB_Filter filter) in 
e:\projekteweb\lft\medienmanager\mmserver\app_code\dal\man\usersdb.cs:103
    MMServer.Pages.ifPlayListen.Page_Load(Object sender, EventArgs e) in 
e:\projekteweb\lft\medienmanager\mmserver\app_code\pages\playlisten\ifplaylisten.aspx.cs:43




If i change the condition to

                        <isNotEqual prepend="AND" property="LOGIN" 
compareValue="">
                                LOGIN like #LOGIN#
                        </isNotEqual>   

i get

[DataMapperException: Error comparing in conditional fragment.  Uknown 'compare 
to' values.]
    
IBatisNet.DataMapper.Configuration.Sql.Dynamic.Handlers.ConditionalTagHandler.Compare(SqlTagContext
 ctx, SqlTag 
sqlTag, Object parameterObject)
    
IBatisNet.DataMapper.Configuration.Sql.Dynamic.Handlers.IsEqualTagHandler.IsCondition(SqlTagContext
 ctx, SqlTag tag, 
Object parameterObject)
    
IBatisNet.DataMapper.Configuration.Sql.Dynamic.Handlers.IsNotEqualTagHandler.IsCondition(SqlTagContext
 ctx, SqlTag 
tag, Object parameterObject)
    
IBatisNet.DataMapper.Configuration.Sql.Dynamic.Handlers.ConditionalTagHandler.DoStartFragment(SqlTagContext
 ctx, 
SqlTag tag, Object parameterObject)
    
IBatisNet.DataMapper.Configuration.Sql.Dynamic.DynamicSql.ProcessBodyChildren(RequestScope
 request, SqlTagContext 
ctx, Object parameterObject, IEnumerator localChildren, StringBuilder buffer)
    
IBatisNet.DataMapper.Configuration.Sql.Dynamic.DynamicSql.ProcessBodyChildren(RequestScope
 request, SqlTagContext 
ctx, Object parameterObject, IEnumerator localChildren, StringBuilder buffer)
    
IBatisNet.DataMapper.Configuration.Sql.Dynamic.DynamicSql.ProcessBodyChildren(RequestScope
 request, SqlTagContext 
ctx, Object parameterObject, IList localChildren)
    
IBatisNet.DataMapper.Configuration.Sql.Dynamic.DynamicSql.Process(RequestScope 
request, Object parameterObject)
    
IBatisNet.DataMapper.Configuration.Sql.Dynamic.DynamicSql.GetRequestScope(Object
 parameterObject, IDalSession session)
    
IBatisNet.DataMapper.MappedStatements.MappedStatement.ExecuteQueryForList(IDalSession
 session, Object 
parameterObject, Int32 skipResults, Int32 maxResults)
    
IBatisNet.DataMapper.MappedStatements.MappedStatement.ExecuteQueryForList(IDalSession
 session, Object parameterObject)
    IBatisNet.DataMapper.SqlMapper.QueryForList(String statementName, Object 
parameterObject)
    MMServer.DAL.USERSDB.SelectFilter(USERSDB_Filter filter) in 
e:\projekteweb\lft\medienmanager\mmserver\app_code\dal\man\usersdb.cs:103
    MMServer.Pages.ifPlayListen.Page_Load(Object sender, EventArgs e) in 
e:\projekteweb\lft\medienmanager\mmserver\app_code\pages\playlisten\ifplaylisten.aspx.cs:43




> too encountered some early on, specifically with respect to default type
> conversion of certain sizes of oracle number fields, and might be able
> to point you in the right direction.
> 
> Jeremy Gray


<snip>

> I like to ask:
> 
> Which seems to be the best Oracle provider to work with the ibatis
> DataMapper 1.2 ( latest SVN version ) ?
> 
> Background: I get different TypeExceptions on different columntypes on
> different providers.

-- 

Kind regards

Uwe
Lesta at SBS-Softwaresysteme.de



Reply via email to