- 3,716,133 Users
- 2,242,960 Discussions
- 7,845,840 Comments
Forum Stats
Discussions
Categories
- 17 Data
- 362.2K Big Data Appliance
- 7 Data Science
- 1.6K Databases
- 479 General Database Discussions
- 3.7K Java and JavaScript in the Database
- 22 Multilingual Engine
- 487 MySQL Community Space
- 5 NoSQL Database
- 7.6K Oracle Database Express Edition (XE)
- 2.8K ORDS, SODA & JSON in the Database
- 417 SQLcl
- 42 SQL Developer Data Modeler
- 184.9K SQL & PL/SQL
- 21K SQL Developer
- 1.9K Development
- 3 Developer Projects
- 32 Programming Languages
- 135.1K Development Tools
- 9 DevOps
- 3K QA/Testing
- 259 Java
- 6 Java Learning Subscription
- 11 Database Connectivity
- 67 Java Community Process
- 1 Java 25
- 9 Java APIs
- 141.1K Java Development Tools
- 6 Java EE (Java Enterprise Edition)
- 153K Java Essentials
- 135 Java 8 Questions
- 86.2K Java Programming
- 270 Java Lambda MOOC
- 65.1K New To Java
- 1.7K Training / Learning / Certification
- 13.8K Java HotSpot Virtual Machine
- 10 Java SE
- 13.8K Java Security
- 3 Java User Groups
- 22 JavaScript - Nashorn
- 18 Programs
- 125 LiveLabs
- 31 Workshops
- 9 Software
- 3 Berkeley DB Family
- 3.5K JHeadstart
- 5.7K Other Languages
- 2.3K Chinese
- 4 Deutsche Oracle Community
- 11 Español
- 1.9K Japanese
- 2 Portuguese
"Value does not fall within the expected range" when passing UDT to the stored procedure
Here's my class mapping to the UDT (really simple):
[OracleCustomTypeMapping("PORTAL_OPS.SHAPEUDT")]
public class Shape : IOracleCustomType, IOracleCustomTypeFactory
{
[OracleObjectMapping("SIDES")]
public Int32 Sides { get; set; }
public string UdtTypeName
{
get
{
Attribute attr = Attribute.GetCustomAttribute(this.GetType()
, typeof(OracleCustomTypeMappingAttribute));
return (attr != null) ?
((OracleCustomTypeMappingAttribute)attr).UdtTypeName
:
String.Empty;
}
}
public void FromCustomObject(OracleConnection con, IntPtr pUdt)
{
OracleUdt.SetValue(con, pUdt, "SIDES", Sides);
}
public void ToCustomObject(OracleConnection con, IntPtr pUdt)
{
Sides = (int)OracleUdt.GetValue(con, pUdt,"SIDES");
}
public IOracleCustomType CreateObject()
{
return new Shape();
}
}
To call the stored procedure:
if (Command.Connection.State == ConnectionState.Closed)
{
Command.Connection.Open();
}
// setting up the parameter
OracleParameter param = new OracleParameter();
param.Direction = ParameterDirection.Input;
param.UdtTypeName = udt.UdtTypeName;
param.DbType = DbType.Object;
param.OracleDbType = OracleDbType.Object;
param.Value = udt;
Command.CommandText = "PORTAL_OPS.PROC_CREATE_SHAPE";
Command.CommandType = CommandType.StoredProcedure;
Command.Parameters.Add(param);
Command.ExecuteNonQuery();
A couple of points:
- Oracle's documentation says to use OracleCustomTypeMappingAttribute, but I notice a lot of people use OracleCustomTypeMapping. Which one is the correct one to use?
- While I was troubleshooting, I purposely misspelled the the value inside the OracleObjectMapping...and it didn't seem to affect anything...still getting the "Value does not fail within the expected range"?
The stacktrace stopps at
OracleCustomTypeMappingAttribute.ctor(String udtTypeName) (I am sure the UDT type name is correct)
Help! Thanks!