Desarrollo de aplicaciones: Programación de aplicaciones del servidor

Procedimientos CLR (Tiempo de ejecución de lenguaje común) con múltiples conjuntos de resultados

El número máximo de conjuntos de resultados que un procedimiento CLR (Tiempo de ejecución de lenguaje común) puede devolver es limitado. El límite está determinado por el número máximo de objetos DB2DataReader que el proveedor de datos de DB2 .NET puede soportar simultáneamente que estén abiertos dentro de una conexión. El soporte del lector de datos activos simultáneos permite que se abran varios objetos DB2DataReader. Por consiguiente, un procedimiento CLR puede devolver varios conjuntos de resultados.

Modalidades de control de ejecución de rutinas CLR (Tiempo de ejecución de lenguaje común) (cláusula EXECUTION CONTROL)

Como administrador de bases de datos o desarrollador de aplicaciones, es posible que desee proteger los ensamblajes asociados a las rutinas externas de DB2 Universal Database (UDB) frente a manipulaciones no deseadas restringiendo las acciones de las rutinas en tiempo de ejecución. Las rutinas CLR de DB2 .NET dan soporte a la especificación de una modalidad de control de ejecución que identifica qué tipos de acciones puede realizar una rutina en tiempo de ejecución. Durante la ejecución, DB2 UDB puede detectar si la rutina intenta realizar acciones más allá del ámbito de su modalidad de control de ejecución especificada, lo que puede resultar de utilidad cuando se determina si un ensamblaje se ha visto comprometido.

Para establecer la modalidad de control de ejecución de una rutina CLR, especifique la cláusula opcional EXECUTION CONTROL en la sentencia CREATE correspondiente a la rutina. Las modalidades válidas son:

Para modificar la modalidad de control de ejecución en una rutina CLR existente, ejecute la sentencia ALTER PROCEDURE o ALTER FUNCTION.

Si no se especifica la cláusula EXECUTION CONTROL para una rutina CLR, por omisión la rutina CLR se ejecuta utilizando la modalidad de control de ejecución más restrictiva, SAFE. Las rutinas creadas con esta modalidad de control de ejecución sólo pueden acceder a los recursos controlados por el gestor de bases de datos. Las modalidades de control de ejecución menos restrictivas permiten que una rutina acceda a archivos del sistema de archivos local (FILEREAD o FILEWRITE) o de la red. La modalidad de control de ejecución UNSAFE especifica que no se coloca ninguna restricción sobre el comportamiento de la rutina. Las rutinas definidas con la modalidad de control de ejecución UNSAFE pueden ejecutar código binario.

Estas modalidades de control representan una jerarquía de acciones permitidas y una modalidad de nivel superior incluye las acciones permitidas bajo la misma en la jerarquía. Por ejemplo, la modalidad de control de ejecución NETWORK permite a una rutina acceder a archivos de la red, archivos del sistema de archivos local y recursos controlados por el gestor de bases de datos. Utilice la modalidad de control de ejecución más restrictiva posible y evite utilizar la modalidad UNSAFE.

Si DB2 UDB detecta en tiempo de ejecución que una rutina CLR está intentando una acción fuera del ámbito de su modalidad de control de ejecución, DB2 UDB devuelve un error (SQLSTATE 38501).

La cláusula EXECUTION CONTROL sólo se puede especificar para rutinas CLR LANGUAGE. El ámbito de aplicación de la cláusula EXECUTION CONTROL está limitado a la propia rutina CLR .NET y no abarca ninguna rutina a la que ésta pueda llamar.

Escala y precisión decimal máximas en rutinas CLR (Tiempo de ejecución de lenguaje común)

El tipo de datos DECIMAL en DB2 Universal Database (UDB) se representa con una precisión de 31 dígitos y una escala de 28 dígitos. El tipo de datos de CLR .NET System.Decimal está limitado a una precisión de 29 dígitos y a una escala de 28 dígitos. Por lo tanto, las rutinas CLR externas de DB2 UDB no deben asignar un valor mayor que (2^96)-1, el valor máximo que se puede representar mediante una precisión de 29 dígitos y una escala de 28 dígitos, a una variable del tipo de datos System.Decimal. DB2 UDB genera un error de tiempo de ejecución (SQLSTATE 22003, SQLCODE -413) si se produce dicha asignación.

Cuando se ejecuta una sentencia CREATE de rutina, si hay un parámetro de tipo de datos DECIMAL definido con una escala mayor que 28, DB2 UDB genera un error (SQLSTATE 42611, SQLCODE -604).

[ Principio de página |Página anterior | Página siguiente | Contenido ]