From: Anupam M. (JIRA) <nh...@gm...> - 2011-05-20 06:53:04
|
[ http://216.121.112.228/browse/NH-2713?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=21131#action_21131 ] Anupam Mishra commented on NH-2713: ----------------------------------- Please change the priority to Major > When calling Oracle stored procedure with Custom Type as parameter , NHibernate is throwing exception. where as with MS SQL Server 2008 it is working. > ------------------------------------------------------------------------------------------------------------------------------------------------------- > > Key: NH-2713 > URL: http://216.121.112.228/browse/NH-2713 > Project: NHibernate > Issue Type: Bug > Components: Core, DataProviders / Dialects > Affects Versions: 3.0.0.GA > Reporter: Anupam Mishra > Attachments: Oracle Exception.txt > > > Please check the attached Exception while calling Oracle Stored Procedure . > Class which implement IType > using System; > using System.Collections.Generic; > using System.Text; > using NHibernate.Type; > using NHibernate.SqlTypes; > using System.Data; > using NHibernate; > using System.Data.SqlClient; > using Oracle.DataAccess.Client; > namespace DomainObject > { > public class Sql2008Structured : IType > { > private static readonly SqlType[] x = new[] { new SqlType(DbType.Object) }; > public SqlType[] SqlTypes(NHibernate.Engine.IMapping mapping) > { > return x; > } > public bool IsCollectionType > { > get { return true; } > } > public int GetColumnSpan(NHibernate.Engine.IMapping mapping) > { > return 1; > } > > #region IType Members > public int Compare(object x, object y, EntityMode? entityMode) > { > throw new NotImplementedException(); > } > public object DeepCopy(object val, EntityMode entityMode, NHibernate.Engine.ISessionFactoryImplementor factory) > { > throw new NotImplementedException(); > } > public object FromXMLNode(System.Xml.XmlNode xml, NHibernate.Engine.IMapping factory) > { > throw new NotImplementedException(); > } > public int GetHashCode(object x, EntityMode entityMode, NHibernate.Engine.ISessionFactoryImplementor factory) > { > throw new NotImplementedException(); > } > public int GetHashCode(object x, EntityMode entityMode) > { > throw new NotImplementedException(); > } > public IType GetSemiResolvedType(NHibernate.Engine.ISessionFactoryImplementor factory) > { > throw new NotImplementedException(); > } > public object Hydrate(IDataReader rs, string[] names, NHibernate.Engine.ISessionImplementor session, object owner) > { > throw new NotImplementedException(); > } > public bool IsAnyType > { > get { throw new NotImplementedException(); } > } > public bool IsAssociationType > { > get { throw new NotImplementedException(); } > } > public bool IsComponentType > { > get { throw new NotImplementedException(); } > } > public bool IsDirty(object old, object current, bool[] checkable, NHibernate.Engine.ISessionImplementor session) > { > throw new NotImplementedException(); > } > public bool IsDirty(object old, object current, NHibernate.Engine.ISessionImplementor session) > { > throw new NotImplementedException(); > } > public bool IsEntityType > { > get { throw new NotImplementedException(); } > } > public bool IsEqual(object x, object y, EntityMode entityMode, NHibernate.Engine.ISessionFactoryImplementor factory) > { > throw new NotImplementedException(); > } > public bool IsEqual(object x, object y, EntityMode entityMode) > { > throw new NotImplementedException(); > } > public bool IsModified(object oldHydratedState, object currentState, bool[] checkable, NHibernate.Engine.ISessionImplementor session) > { > throw new NotImplementedException(); > } > public bool IsMutable > { > get { throw new NotImplementedException(); } > } > public bool IsSame(object x, object y, EntityMode entityMode) > { > throw new NotImplementedException(); > } > public bool IsXMLElement > { > get { throw new NotImplementedException(); } > } > public string Name > { > get { throw new NotImplementedException(); } > } > public object NullSafeGet(IDataReader rs, string name, NHibernate.Engine.ISessionImplementor session, object owner) > { > throw new NotImplementedException(); > } > public object NullSafeGet(IDataReader rs, string[] names, NHibernate.Engine.ISessionImplementor session, object owner) > { > throw new NotImplementedException(); > } > public void NullSafeSet(IDbCommand st, object value, int index, bool[] settable, NHibernate.Engine.ISessionImplementor session) > { > var s = st as SqlCommand; > if (s != null) > { > s.Parameters[index].SqlDbType = SqlDbType.Structured; > s.Parameters[index].TypeName = "EmployeeType"; > s.Parameters[index].Value = value; > } > else > { > var o = st as OracleCommand; > o.Parameters[index].OracleDbType = OracleDbType.Array; > o.Parameters[index].UdtTypeName = "TESTTYPE"; > o.Parameters[index].Value = value; > } > } > public object Replace(object original, object target, NHibernate.Engine.ISessionImplementor session, object owner, System.Collections.IDictionary copyCache, ForeignKeyDirection foreignKeyDirection) > { > throw new NotImplementedException(); > } > public object Replace(object original, object target, NHibernate.Engine.ISessionImplementor session, object owner, System.Collections.IDictionary copiedAlready) > { > throw new NotImplementedException(); > } > public object ResolveIdentifier(object value, NHibernate.Engine.ISessionImplementor session, object owner) > { > throw new NotImplementedException(); > } > public Type ReturnedClass > { > get { throw new NotImplementedException(); } > } > public object SemiResolve(object value, NHibernate.Engine.ISessionImplementor session, object owner) > { > throw new NotImplementedException(); > } > public void SetToXMLNode(System.Xml.XmlNode node, object value, NHibernate.Engine.ISessionFactoryImplementor factory) > { > throw new NotImplementedException(); > } > public bool[] ToColumnNullness(object value, NHibernate.Engine.IMapping mapping) > { > throw new NotImplementedException(); > } > public string ToLoggableString(object value, NHibernate.Engine.ISessionFactoryImplementor factory) > { > throw new NotImplementedException(); > } > #endregion > #region ICacheAssembler Members > public object Assemble(object cached, NHibernate.Engine.ISessionImplementor session, object owner) > { > throw new NotImplementedException(); > } > public void BeforeAssemble(object cached, NHibernate.Engine.ISessionImplementor session) > { > throw new NotImplementedException(); > } > public object Disassemble(object value, NHibernate.Engine.ISessionImplementor session, object owner) > { > throw new NotImplementedException(); > } > #endregion > #region IType Members > public void NullSafeSet(IDbCommand st, object value, int index, NHibernate.Engine.ISessionImplementor session) > { > var s = st as SqlCommand; > if (s != null) > { > s.Parameters[index].SqlDbType = SqlDbType.Structured; > s.Parameters[index].TypeName = "EmployeeType"; > s.Parameters[index].Value = value; > } > else > { > var o = st as OracleCommand; > o.Parameters[index].OracleDbType = OracleDbType.Array; > o.Parameters[index].UdtTypeName = "TESTTYPE"; > o.Parameters[index].Value = value; > } > } > #endregion > } > public static class StructuredExtensions > { > private static readonly Sql2008Structured structured = new Sql2008Structured(); > public static IQuery SetStructured(this IQuery query, string name, DataTable dt) > { > return query.SetParameter(name, dt, structured); > } > public static IQuery SetOracleStructured(this IQuery query, string name, Object[] dt) > { > return query.SetParameter(name, dt, structured); > } > } > } > Type defined in Oracle > create or replace > TYPE employeeType AS OBJECT (employeeId INT, employeeName VARCHAR2 (50)); > *************** > create or replace > TYPE TESTTYPE AS TABLE OF EMPLOYEETYPE; > Stored Procedure > create or replace PROCEDURE TESTCUSTOMEMPLOYEE (PARAM1 OUT SYS_REFCURSOR,PARAM IN TESTTYPE) IS > BEGIN > open PARAM1 for SELECT EMP_ID,EMP_NAME,EMP_PASSWORD,TEAM_ASSOCIATED_WITH,IS_CAPTAIN,NO_OF_MOM,BALANCE FROM employee; > END; -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://216.121.112.228/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |