Restrictions on .NET CLR routines
The general implementation restrictions that apply to all external routines or particular routine classes (procedure or UDF) also apply to CLR routines. There are some restrictions that are particular to CLR routines.
The CREATE METHOD statement with LANGUAGE CLR clause is not supported
You cannot create external methods for the database structured types that reference a CLR assembly. The use of a CREATE METHOD statement that specifies the LANGUAGE clause with value CLR is not supported.
CLR procedures cannot be implemented as NOT FENCED procedures
CLR procedures cannot be run as unfenced procedures. The CREATE PROCEDURE statement for a CLR procedure can not specify the NOT FENCED clause.
EXECUTION CONTROL clause restricts the logic contained in the routine
The EXECUTION CONTROL clause and associated value determine what types of logic and operations can be executed in a .NET CLR routine. By default the EXECUTION CONTROL clause value is set to SAFE. For routine logic that reads files, writes to files, or that accesses the internet, a non-default and less restrictive value for the EXECUTION CONTROL clause must be specified.
Maximum decimal precision is 29, maximum decimal scale is 28 in a CLR routine
The DECIMAL
data type in the database is represented with a 31-digit precision
and 28-digit scale. The .NET CLR System.Decimal
data
type is limited to a 29-digit precision and 28-digit scale. Therefore,
external CLR routines must not assign a value to a System.Decimal
data
type that has a value greater than (2^96)-1
, which
is the highest value that can be represented using a 29-digit precision
and 28-digit scale. The database manager returns a runtime error (SQLSTATE
22003, SQLCODE -413) if such an assignment occurs. At the time of
execution of the CREATE statement for the routine, if a DECIMAL data
type parameter is defined with a scale greater than 28, the database
manager returns an error (SQLSTATE 42613, SQLCODE -628).
If you require your routine to manipulate decimal values with the maximum precision and scale supported by the database manager, you can implement your external routine in a different programming language such as Java™.
Data types not supported in CLR routines
- BINARY
- VARBINARY
- LONG VARCHAR
- LONG VARCHAR FOR BIT DATA
- LONG GRAPHIC
- ROWID
Running a 32-bit CLR routine on a 64-bit instance
CLR routines cannot be run on 64- bit instances, because the .NET Framework cannot be installed on 64-bit operating systems at this time.
.NET CLR not supported for implementing security plug-ins
The .NET CLR is not supported for compiling and linking source code for security plug-in libraries.