Instrucción CREATE FUNCTION (función escalar SQL compilada)
La sentencia CREATE FUNCTION (escalar de SQL compilada) define una función escalar de SQL en el servidor actual y especifica las sentencias de origen de la función. El cuerpo de la función se escribe en el Lenguaje de procedimientos SQL. La función devuelve un valor único cada vez que se invoca.
Se crea un paquete para una función escalar SQL compilada.
Para las funciones escalares SQL compiladas, puede definir varias versiones de la función. Utilice CREATE FUNCTION (escala SQL compilada) para definir la versión inicial, y ALTER FUNCTION para definir las versiones posteriores. Para obtener información sobre las instrucciones SQL que son compatibles con las funciones SQL, consulte Instrucción de procedimiento SQL (SQL PL ).
Invocación para CREATE FUNCTION (escala SQL compilada)
Para una función SQL compilada, esta instrucción solo puede prepararse dinámicamente, pero el comportamiento de ejecución de DYNAMICRULES debe especificarse implícita o explícitamente.
Autorización para CREAR FUNCIÓN (escalar SQL compilado)
El conjunto de privilegios definido a continuación debe incluir al menos uno de los siguientes:
- El privilegio CREATEIN en el esquema
- Autorización DBADM del sistema
- Autorización SYSCTRL
- Autorización SYSADM
- DBADM del sistema
Instalación de la autoridad SYSOPR (cuando el SQLID actual del proceso se establece en SYSINSTL)
El ID de autorización que se corresponde con el nombre del esquema tiene implícito el privilegio CREATEIN sobre el esquema.
Si el ID de autorización que se utiliza para crear la función tiene la autoridad de instalación SYSADM o la autoridad de instalación SYSOPR y si el SQLID actual se establece en SYSINSTL, la función se identifica como función definida por el sistema.
Para crear una función con un cuerpo de rutina SQL, el conjunto de privilegios debe incluir la autorización necesaria para añadir un nuevo paquete o una nueva versión de un paquete existente en función del valor del campo BIND NEW PACKAGE del panel de instalación DSNTIPP, o bien el conjunto de privilegios debe incluir la autoridad SYSADM, SYSCTRL o DBADM del sistema. El propietario del paquete debe tener los privilegios necesarios para ejecutar las sentencias del cuerpo de la rutina SQL.
Si se hace referencia a un tipo definido por el usuario como tipo de datos de un parámetro, el conjunto de privilegios también debe incluir al menos uno de los siguientes privilegios o autoridades:
- Propiedad del tipo definido por el usuario
- El privilegio USAGE en el tipo definido por el usuario
- Autorización DBADM del sistema
- Autorización DATAACCESS
- Autorización SYSADM
Si la función utiliza una tabla como parámetro, el conjunto de privilegios también debe incluir al menos uno de los siguientes:
- Propiedad de la tabla
- El privilegio SELECT en la mesa
- Autorización DATAACCESS
- Autorización SYSADM
Puede ser necesaria una autorización adicional en las tablas SYSDUMMYx en función del contenido de la definición de la función. Ver tablas SYSDUMMYx.
Conjunto de privilegios:
Si la sentencia está incrustada en un programa de aplicación, el conjunto de privilegios son los privilegios que tiene el propietario del plan o paquete. Si el propietario del paquete es un rol, la coincidencia de esquema implícita no se aplica y este rol debe incluir una de las condiciones enumeradas anteriormente.
Si la declaración se prepara dinámicamente y no se ejecuta en un contexto de confianza para el que se especifica la cláusula ROLE AS OBJECT OWNER, el conjunto de privilegios es el conjunto de privilegios que posee el ID de autorización SQL del proceso. Si el nombre del esquema no es el mismo que el ID de autorización SQL del proceso, debe cumplirse una de las siguientes condiciones:
- El conjunto de privilegios incluye la autoridad SYSADM o SYSCTRL.
- El ID de autorización SQL del proceso tiene el privilegio CREATEIN en el esquema.
Cuando se emite CREATE FUNCTION en un contexto de confianza que tiene la cláusula ROLE AS OBJECT OWNER, el propietario del paquete se determina como sigue:- Si no se especifica la opción PROPIETARIO DEL PAQUETE, el rol asociado con la carpeta se convierte en el propietario del paquete.
- Si se especifica la opción PROPIETARIO DEL PAQUETE, el rol especificado en la opción PROPIETARIO DEL PAQUETE se convierte en el propietario del paquete. En un contexto de confianza, el PROPIETARIO DEL PAQUETE especificado debe ser un rol.

Si especifica la cláusula WLM ENVIRONMENT FOR DEBUG MODE, se invoca RACF® o un producto de seguridad externo para comprobar la autoridad requerida para definir programas en el entorno WLM. Si el acceso al entorno WLM está protegido en RACF, el conjunto de privilegios debe incluir la autoridad requerida.
Se requiere al menos uno de los siguientes privilegios adicionales si se especifica la opción SECURED:
- Autorización SECADM
- Privilegio CREATE_SECURE_OBJECT
Sintaxis para CREATE FUNCTION (escalar SQL compilado)
declaración de parámetros:
tipo de parámetro:
tipo de datos:
tipo integrado:
definición de función:
SQL-cuerpo-de-rutina:
option-list : (Las opciones de la opción-lista pueden especificarse en cualquier orden, pero cada una solo puede especificarse una vez)
Descripción de CREATE FUNCTION (escala SQL compilada)
- nombre-función
- Nombra la función. Si function-name ya existe con la firma especificada, se devuelve un error incluso si VERSION se especifica con un routine-version-id que es diferente de cualquier identificador de versión existente para la función que se especifica en function-name. Para obtener más información, consulte
Elegir los nombres de esquema y función
yDeterminar la singularidad de las funciones en un esquema
en la declaración CREATE FUNCTION (resumen ). - (declaración de parámetros,...)
Especifica el número de parámetros de entrada de la función y el nombre y tipo de datos de cada parámetro. Cada declaración de parámetro especifica un parámetro de entrada para la función. Una función puede tener cero o más parámetros de entrada. Debe haber una entrada en la lista para cada parámetro que la función espera recibir. Todos los parámetros de una función son parámetros de entrada y pueden ser nulos. Si la función tiene más de 30 parámetros, solo se utilizan los 30 primeros para determinar si la función es única.
- nombre-parámetro
- Especifica el nombre del parámetro de entrada. El nombre es un identificador SQL, y cada nombre de la lista de parámetros no debe ser igual a ningún otro nombre.
- tipo-datos
- Especifica el tipo de datos del parámetro de entrada. El tipo de datos puede ser un tipo de datos incorporado o un tipo definido por el usuario.
- tipo integrado
- El tipo de datos del parámetro de entrada es un tipo de datos integrado. Para obtener descripciones de los tipos de datos incorporados, consulte Tipos de datos y la descripción de built-in-type en la sentencia CREATE TABLE.
Para los parámetros con un tipo de datos de carácter o gráfico, la cláusula CCSID de PARÁMETRO o la cláusula CCSID indica el esquema de codificación del parámetro. Si no especifica ninguna de estas cláusulas, el esquema de codificación es el valor del campo DEF ENCODING SCHEME en el panel de instalación DSNTIPF.
- nombre-de-tipo-distinto
- El tipo de datos del parámetro de entrada es un tipo distinto. Cualquier atributo de longitud, precisión, escala, subtipo o esquema de codificación para el parámetro son los del tipo de origen del tipo distinto. El tipo distinto no debe basarse en un tipo de datos LOB.
Si especifica el nombre del tipo distinto sin un nombre de esquema, Db2 resuelve el tipo distinto buscando los esquemas en la ruta de SQL.
- TABLE LIKE nombre-tabla AS LOCATOR
- Especifica que el parámetro es una tabla de transición. Sin embargo, cuando se invoca la función, los valores reales de la tabla de transición no se pasan a la función. En su lugar, se pasa un único valor. Este valor es un localizador para la tabla, que la función utiliza para acceder a las columnas de la tabla de transición. La tabla identificada puede contener columnas XML; sin embargo, la función no puede hacer referencia a esas columnas XML.
Una función con un parámetro de tabla solo puede invocarse desde la acción desencadenada de un disparador.
- nombre-tipo-matriz
- El tipo de datos del parámetro de entrada es un tipo de matriz definida por el usuario.
Si especifica array-type-name sin un nombre de esquema, Db2 resuelve el tipo de matriz buscando los esquemas en la ruta de SQL.
El esquema de codificación especificado implícita o explícitamente de todos los parámetros con un tipo de datos de cadena de caracteres o gráficos debe ser el mismo: todo ASCII, todo EBCDIC o todo UNICODE.
Aunque los parámetros con un tipo de datos de carácter tienen un subtipo especificado implícita o explícitamente (BIT, SBCS o MIXED), el programa de funciones puede recibir datos de carácter de cualquier subtipo. Por lo tanto, la conversión de los datos de entrada al subtipo del parámetro podría ocurrir cuando se invoque la función. Se produce un error si se utilizan datos mixtos que contienen caracteres DBCS como valor de un parámetro de entrada declarado con un subtipo SBCS.
Los parámetros con un tipo de datos datetime o un tipo distinto se pasan a la función como un tipo de datos diferente:
- Un parámetro de tipo fecha-hora se pasa como un tipo de datos de carácter, y los datos se pasan en formato ISO.
El esquema de codificación para un parámetro de tipo fecha y hora es el mismo que el esquema de codificación especificado implícita o explícitamente de cualquier parámetro de carácter o cadena gráfica. Si no se pasan parámetros de caracteres o cadenas gráficas, el esquema de codificación es el valor del campo DEF ENCODING SCHEME en el panel de instalación DSNTIPF.
- Un parámetro de tipo diferenciado se pasa como tipo fuente del tipo diferenciado.
- RETURNS
- Identifica el resultado de la función.
- data-type2
- Especifica el tipo de datos de la salida. La salida es anulable.
Las mismas consideraciones que se aplican al tipo de datos del parámetro de entrada, como se describe en tipo de datos, se aplican al tipo de datos de la salida de la función.
- VERSION identificador-de-versión-rutinaria
- Especifica el identificador de versión para la primera versión de la función que se va a generar. Puede utilizar una instrucción ALTER FUNCTION con la cláusula ADD VERSION o el comando BIND DEPLOY para crear versiones adicionales de la función.
- identificador-de-versión-rutinaria
- Un identificador SQL de hasta 64 bytes EBCDIC que designa una versión de una rutina. La representación e UTF-8 e del identificador no debe exceder los 122 bytes.
V1 es el identificador de versión predeterminado.
- LANGUAGE SQL
- Especifica que la función está escrita exclusivamente en SQL.
- SPECIFIC nombre-específico
- Especifica un nombre único para la función. El nombre está calificado implícita o explícitamente con un nombre de esquema. El nombre, incluido el nombre del esquema, no debe identificar el nombre específico de otra función que exista en el servidor actual.
El formato no calificado de un nombre-específico es un identificador SQL. El formulario válido es un identificador SQL (el nombre del esquema) seguido de un punto y un identificador SQL.
Si no especifica un nombre de esquema, será el mismo que el nombre de esquema explícito o implícito del nombre de la función (nombre-función ). Si especifica un nombre de esquema, debe ser el mismo que el nombre de esquema explícito o implícito del nombre de la función.
Si no especifica la cláusula SPECIFIC, el nombre específico predeterminado es el nombre de la función. Sin embargo, si el nombre de la función no proporciona un nombre específico único o si el nombre de la función es un solo asterisco, Db2 genera un nombre específico en la forma de:
dondeSQLxxxxxxxxxxxx'xxxxxxxxxxxx'es una cadena de 12 caracteres que hacen que el nombre sea único.El nombre específico se almacena en la columna SPECIFIC de la tabla de catálogo SYSROUTINES. El nombre específico se puede utilizar para identificar de forma única la función en varias sentencias SQL (como ALTER FUNCTION, COMMENT, DROP, GRANT y REVOKE) y debe utilizarse en los comandos de l Db2 a (START FUNCTION, STOP FUNCTION y DISPLAY FUNCTION). Sin embargo, la función no puede invocarse por su nombre específico.
- NOT DETERMINISTIC o DETERMINISTIC
- Especifica si la función devuelve los mismos resultados cada vez que se invoca con los mismos argumentos de entrada.
- NOT DETERMINISTIC
- La función podría no devolver el mismo resultado cada vez que se invoque con los mismos argumentos de entrada. La función depende de algunos valores de estado que afectan a los resultados. Db2 utiliza esta información para desactivar la combinación de vistas y expresiones de tabla al procesar instrucciones de modificación de datos SELECT y SQL que hacen referencia a esta función. Un ejemplo de una función que no es determinante es la que genera números aleatorios.
NO DETERMINISTA debe especificarse explícita o implícitamente si la función accede a un registro especial o invoca otra función que no es determinista. La opción predeterminada es NO DETERMINISTA.
- DETERMINISTIC
- La función siempre devuelve el mismo resultado cada vez que se invoca la función con los mismos argumentos de entrada. Un ejemplo de función determinista es una función que calcula la raíz cuadrada de la entrada. Db2 utiliza esta información para permitir la fusión de vistas y expresiones de tabla para instrucciones de modificación de datos SELECT y SQL que hacen referencia a esta función. DETERMINISTIC no es el valor predeterminado. Si procede, especifique DETERMINISTIC para evitar que se elijan rutas de acceso no óptimas para las sentencias SQL que hacen referencia a esta función.
Db2 no verifica que el programa de funciones sea coherente con la especificación de DETERMINISTA o NO DETERMINISTA.
- EXTERNAL ACTION o NO EXTERNAL ACTION
- Especifica si la función realiza una acción que cambia el estado de un objeto que Db2 no gestiona. Un ejemplo de una acción externa es enviar un mensaje o grabar un registro en un archivo.
- EXTERNAL ACTION
- La función puede realizar una acción que cambie el estado de un objeto que Db2 no gestiona.
Algunas sentencias SQL que invocan funciones con acciones externas pueden dar resultados incorrectos si las tareas paralelas ejecutan la función. Por ejemplo, si la función envía una nota para cada llamada inicial a esa función, se enviará una nota para cada tarea paralela, en lugar de una nota para la función. Especifique la cláusula DISALLOW PARALLEL en el caso de las funciones que no funcionen bien con paralelismo.
Si especifica ACCIÓN EXTERNA, entonces Db2:
- Materializa las vistas y expresiones de tabla en instrucciones SELECT y SQL de modificación de datos que hacen referencia a la función. Esta materialización puede afectar negativamente a las rutas de acceso elegidas para las sentencias SQL que hacen referencia a esta función. No especifique ACCIÓN EXTERNA si la función no tiene una acción externa.
- No mueve la función de un bloque de control de tareas (TCB) a otro entre operaciones FETCH.
- No permite que otra función o procedimiento almacenado utilice el TCB hasta que se cierre el cursor. Esto también es aplicable a los cursores declarados CON RETENCIÓN.
Los únicos cambios en los recursos realizados fuera de Db2 que están bajo el control de las operaciones de confirmación y reversión son aquellos cambios realizados bajo el control de RRS.
EXTERNAL ACTION debe especificarse implícita o explícitamente si el cuerpo de la rutina SQL invoca una función que está definida con EXTERNAL ACTION. La ACCIÓN EXTERNA es la predeterminada.
- NO EXTERNAL ACTION
- La función no realiza ninguna acción que cambie el estado de un objeto que Db2 no gestiona. Db2 utiliza esta información para permitir la fusión de vistas y expresiones de tabla para instrucciones de modificación de datos SELECT y SQL que hacen referencia a esta función. Si procede, especifique NO EXTERNAL ACTION para evitar que se elijan rutas de acceso no óptimas para las sentencias SQL que hacen referencia a esta función.
Aunque el alcance de las variables globales está fuera del alcance de la rutina, las variables globales se pueden establecer en el cuerpo de la rutina cuando se especifica NO EXTERNAL ACTION.
Db2 no verifica que el programa de funciones sea coherente con la especificación de ACCIÓN EXTERNA o SIN ACCIÓN EXTERNA.
- MODIFIES SQL DATA, LEE DATOS SQL, o CONTAINS SQL
- Especifica la clasificación de las sentencias SQL y las rutinas anidadas que esta rutina puede ejecutar o invocar. El administrador de la base de datos verifica que las sentencias SQL emitidas por la función, y todas las rutinas invocadas localmente por la rutina, sean coherentes con esta especificación; la verificación no se realiza cuando se invocan rutinas remotas anidadas. Para la clasificación de cada instrucción, consulte Clasificación de acceso a datos de instrucciones SQL para rutinas.
- MODIFIES SQL DATA
Especifica que la función puede ejecutar cualquier instrucción SQL excepto las instrucciones que no son compatibles con las funciones. No especifique MODIFIES SQL DATA cuando ALLOW PARALLEL esté en vigor.
Si una función que se define con MODIFIES SQL DATA se invoca en cualquier lugar excepto en la cláusula select de la sentencia SELECT más externa, los resultados son impredecibles porque la función puede invocarse varias veces dependiendo del plan de acceso que se utilice.
Recomendación:
Si una sentencia SELECT invoca una función definida con la opción MODIFIES SQL DATA, asegúrese de que las sentencias anidadas dentro de la función no modifican objetos a los que se hace referencia en cualquier sentencia SQL de un nivel de anidamiento superior. De lo contrario, es probable que se produzcan resultados impredecibles.
- LEE DATOS SQL
- Especifica que la función puede ejecutar sentencias con una clasificación de acceso a datos de READS SQL DATA, CONTAINS SQL o NO SQL. La función no puede ejecutar instrucciones SQL que modifiquen datos.
LEER DATOS SQL es la opción predeterminada.
- CONTAINS SQL
- Especifica que la función solo puede ejecutar sentencias SQL con una clasificación de acceso a datos de CONTAINS SQL o NO SQL. La función no puede ejecutar instrucciones SQL que lean o modifiquen datos.
- LLAMADA A ENTRADA NULA o RETURNS NULL ON NULL INPUT
- Especifica si la función se invoca si alguno de los argumentos de entrada es nulo en el momento de la ejecución.
- LLAMADA A ENTRADA NULA
- Especifica que la función debe invocarse si alguno o todos los valores de los argumentos son nulos. Especificar CALLED ON NULL INPUT significa que el cuerpo de la función debe codificarse para comprobar los valores nulos de los argumentos.
CALLED ON NULL INPUT es el valor predeterminado.
- RETURNS NULL ON NULL INPUT
- Especifica que la función no se invoca y devuelve el valor nulo si alguno de los valores de los argumentos de entrada es nulo.
- ENVÍO ESTÁTICO
- En el momento de la resolución de la función, Db2 elige una función basada en los tipos estáticos (o declarados) de los parámetros de la función. El ENVÍO ESTÁTICO es el predeterminado.
- ALLOW PARALLEL o DISALLOW PARALLEL
- Especifica si la función puede ejecutarse en paralelo. El valor predeterminado es NO PERMITIR PARALELO, si especifica una o más de las siguientes cláusulas:
- NOT DETERMINISTIC
- EXTERNAL ACTION
- MODIFIES SQL DATA
De lo contrario, la opción predeterminada es PERMITIR PARALELO.
- ALLOW PARALLEL
- Especifica que la función se puede ejecutar en paralelo.
- DISALLOW PARALLEL
- Especifica que la función no se puede ejecutar en paralelo.
- ALLOW DEBUG MODE, DISALLOW DEBUG MODE, o DISABLE DEBUG MODE
- Especifica si esta versión de la rutina puede ejecutarse en modo de depuración. El valor predeterminado se determina utilizando el valor del registro especial CURRENT DEBUG MODE.
- ALLOW DEBUG MODE
- Especifica que esta versión de la rutina se puede ejecutar en modo de depuración. Cuando se invoque esta versión de la rutina y se intente depurar, debe estar disponible un entorno WLM.
- DISALLOW DEBUG MODE
- Especifica que esta versión de la rutina no se puede ejecutar en modo de depuración.
Puede utilizar una instrucción ALTER para cambiar esta opción a ALLOW DEBUG MODE para esta versión inicial de la rutina.
- DISABLE DEBUG MODE
- Especifica que esta versión de la rutina nunca puede ejecutarse en modo de depuración.
Esta versión de la rutina no se puede cambiar para especificar PERMITIR MODO DE DEPURACIÓN o NO PERMITIR MODO DE DEPURACIÓN después de que esta versión de la rutina se haya creado o modificado para usar DESACTIVAR MODO DE DEPURACIÓN. Para cambiar esta opción, elimine la rutina y vuelva a crearla utilizando la opción que desee. Una alternativa a eliminar y volver a crear la rutina es crear una versión de la rutina que utilice la opción que desee y convertir esa versión en la versión activa.
Cuando DISABLE DEBUG MODE está en efecto, el ENTORNO WLM PARA DEBUG MODE se ignora.
- PARAMETER CCSID
- Especifica que el esquema de codificación para los parámetros de cadena de caracteres o gráficos es ASCII, EBCDIC o UNICODE. El esquema de codificación predeterminado es el valor especificado en las cláusulas CCSID de la lista de parámetros o en la cláusula RETURNS, o en el campo DEF ENCODING SCHEME del panel de instalación DSNTIPF.
Esta cláusula proporciona una forma práctica de especificar el esquema de codificación para parámetros de cadena de caracteres o gráficos. Si se especifican cláusulas CCSID individuales para parámetros individuales además de esta cláusula CCSID PARÁMETRO, el valor que se especifique en todas las cláusulas CCSID debe ser el mismo que se especifique en esta cláusula. Esta cláusula también especifica el esquema de codificación que se utiliza para los parámetros de la rutina generados por el sistema, como los tokens de mensajes y DBINFO.
Si el tipo de datos de un parámetro es un tipo distinto definido por el usuario que se define como una cadena de tipo carácter o gráfico, el CCSID del tipo distinto debe ser el mismo que el valor especificado en esta cláusula.
Si el tipo de datos de un parámetro es un tipo de matriz definida por el usuario que se define con elementos de matriz de cadena de caracteres o gráficos, o un índice de matriz de cadena de caracteres, el CCSID de estos atributos de matriz debe ser el mismo que el valor especificado en esta cláusula.
Esta cláusula también especifica el esquema de codificación que se utilizará para los parámetros de la rutina generados por el sistema.
- QUALIFIER nombre-esquema
- Especifica el calificador implícito que se utiliza para los nombres de objetos no calificados a los que se hace referencia en el cuerpo del procedimiento. Para obtener información sobre cómo se determina el valor predeterminado de esta opción, consulte Nombres de alias, índice, archivo JAR, máscara, permiso, secuencia, tabla, desencadenador y vista no cualificados.
- PACKAGE OWNER nombre-autorización
- Especifica el propietario del paquete asociado a la versión de la rutina. El ID de autorización SQL del proceso es el valor predeterminado.
- ASUTIME
- Especifica la cantidad total de tiempo de procesador, en unidades de servicio de CPU, que puede ejecutar una sola invocación de una rutina. El valor no está relacionado con la columna ASUTIME de la tabla de especificación de límites de recursos.
Cuando se depura una rutina, establecer un límite puede ser útil en caso de que la rutina quede atrapada en un bucle. Para obtener información sobre las unidades de servicio, consulte z/OS MVS Guía de inicialización y ajuste.
- SIN LÍMITE
- Especifica que no hay límite en las unidades de servicio.
NO LIMIT es el valor predeterminado.
- LIMIT entero
- El límite en el número de unidades de servicio de CPU es un número entero positivo en el rango de 1 a 2 147 483 647. Si el procedimiento utiliza más unidades de servicio que el valor especificado, Db2 cancela el procedimiento. Los ciclos de CPU que consumen las tareas paralelas en un procedimiento no contribuyen al LÍMITE DE TIEMPO DE EJECUCIÓN especificado.
- REGISTROS ESPECIALES DE HERENCIA o DEFAULT SPECIAL REGISTERS
- Especifica cómo se establecen los registros especiales al entrar en la rutina.
- REGISTROS ESPECIALES DE HERENCIA
- Especifica que los valores de los registros especiales se heredan, de acuerdo con las reglas que se enumeran en la tabla para las características de los registros especiales en una rutina en la Tabla 1.
HEREDAR REGISTROS ESPECIALES es la opción predeterminada.
- DEFAULT SPECIAL REGISTERS
- Especifica que los registros especiales se inicializan a los valores por defecto, como se indica en las reglas de la tabla de características de los registros especiales en una rutina en la Tabla 1.
- WLM ENVIRONMENT FOR DEBUG MODE nombre
- Especifica el entorno de aplicación WLM (gestor de carga de trabajo) que utiliza Db2 al depurar la rutina. El nombre del entorno WLM es un identificador SQL.
Si no especifica WLM ENVIRONMENT FOR DEBUG MODE, Db2 utiliza el espacio de direcciones de procedimiento almacenado establecido por defecto en WLM especificado en el momento de la instalación.
Debe tener la autoridad adecuada para el entorno de aplicación WLM.
El valor WLM ENVIRONMENT FOR DEBUG MODE se ignora cuando DISABLE DEBUG MODE está en vigor.
- CURRENT DATA YES o DATOS ACTUALES NO
- Especifica si se requiere la vigencia de los datos para cursores de solo lectura y ambiguos cuando el nivel de aislamiento de la estabilidad del cursor está en vigor. CURRENT DATA también determina si se puede utilizar la obtención de bloques para cursores ambiguos distribuidos.
- CURRENT DATA YES
- Especifica que la moneda de los datos es necesaria para los cursores de solo lectura y ambiguos. Db2 bloqueos de páginas o filas adquiridos para garantizar la vigencia de los datos. El bloqueo de obtención se ignora para cursores ambiguos y distribuidos.
- DATOS ACTUALES NO
- Especifica que la moneda de los datos no es necesaria para los cursores de solo lectura y ambiguos. Se permite el bloqueo de la obtención para cursores ambiguos y distribuidos. El uso de CURRENT DATA NO no se recomienda si la rutina intenta preparar y ejecutar dinámicamente una instrucción DELETE WHERE CURRENT OF contra un cursor ambiguo después de que se abra ese cursor. Recibirá un SQLCODE negativo si su rutina intenta utilizar una instrucción DELETE WHERE CURRENT OF para cualquiera de los cursores siguientes:
- Un cursor que está utilizando la captura de bloques
- Un cursor que utilice paralelismo de consultas
- Un cursor que esté posicionado en una fila que esté modificada por este o por otro proceso de aplicaciones
DATOS ACTUALES NO es el valor predeterminado.
- DEGREE
- Especifica si se intenta ejecutar una consulta utilizando el procesamiento paralelo para maximizar el rendimiento.
- 1
- Especifica que no debe utilizarse el procesamiento paralelo.
1 es el valor predeterminado.
- ANY
- Especifica que se puede utilizar el procesamiento en paralelo.
- CONCURRENT ACCESS RESOLUTION
- Especifica si el procesamiento utiliza solo datos confirmados o si esperará a la confirmación o reversión de los datos que están en proceso de actualización.
- WAIT FOR OUTCOME
- Especifica que el procesamiento esperará la confirmación o reversión de los datos que se están actualizando.
- USE CURRENTLY COMMITTED
- Especifica que el procesamiento utilice la versión de los datos actualmente confirmada cuando se encuentren datos que estén en proceso de actualización. USE
CURRENTLY COMMITTED se aplica a los escaneos que acceden a tablas definidas en espacios de tablas universales con tamaño de bloqueo a nivel de fila o página.
Cuando hay contención de bloqueo entre una transacción de lectura y una transacción de inserción, USE CURRENTLY COMMITTED se aplica a los escaneos con nivel de aislamiento CS o RS. Los escaneos aplicables incluyen escaneos de lectura intencionada para consultas de solo lectura y ambiguas y para cursores actualizables. USE CURRENTLY COMMITTED también es aplicable a los escaneos iniciados desde predicados WHERE de sentencias UPDATE o DELETE y la subselección de sentencias INSERT.
Cuando hay un conflicto de bloqueo entre una transacción de lectura y una transacción de eliminación, USE CURRENTLY COMMITTED se aplica a los escaneos con nivel de aislamiento CS y cuando se especifica CURRENT DATA NO.
- DYNAMICRULES
- Especifica los valores que se aplican, en tiempo de ejecución, para los siguientes atributos dinámicos de SQL:
- El ID de autorización que se utiliza para comprobar la autorización
- El calificador que se utiliza para objetos no calificados
- La fuente de las opciones de programación de aplicaciones que utiliza Db2 para analizar y verificar semánticamente las sentencias SQL dinámicas
DYNAMICRULES también especifica si las sentencias SQL dinámicas pueden incluir sentencias GRANT, REVOKE, ALTER, CREATE, DROP y RENAME.
Además del valor de la cláusula DYNAMICRULES, el entorno de tiempo de ejecución de una rutina controla el comportamiento de las sentencias SQL dinámicas en tiempo de ejecución. La combinación del valor DYNAMICRULES y el entorno de tiempo de ejecución determina el valor de los atributos SQL dinámicos. Ese conjunto de valores de atributos se denomina comportamiento de la instrucción SQL dinámica. Se pueden especificar los siguientes valores:- CORRER
- Especifica que las sentencias SQL dinámicas deben procesarse utilizando el comportamiento de ejecución.
RUN es el valor predeterminado.
- BIND
- Especifica que las sentencias SQL dinámicas deben procesarse utilizando el comportamiento de enlace.
- DEFINEBIND
- Especifica que las sentencias SQL dinámicas deben procesarse utilizando el comportamiento define o el comportamiento bind.
- DEFINERUN
- Especifica que las sentencias SQL dinámicas deben procesarse utilizando el comportamiento de definición o el comportamiento de ejecución.
- INVOKEBIND
- Especifica que las sentencias SQL dinámicas deben procesarse utilizando el comportamiento de invocación o el comportamiento de enlace.
- INVOKERUN
- Especifica que las sentencias SQL dinámicas deben procesarse utilizando el comportamiento de invocación o el comportamiento de ejecución.
- APPLICATION ENCODING SCHEME
- Especifica el esquema de codificación predeterminado para variables SQL en sentencias SQL estáticas en el cuerpo de la rutina. El valor se utiliza para definir una variable SQL en una instrucción compuesta si la cláusula CCSID no se especifica como parte del tipo de datos y no se especifica la opción de rutina PARAMETER CCSID.
- ASCII
- Especifica que los datos se codifican utilizando los CCSID ASCII del servidor.
- EBCDIC
- Especifica que los datos se codifican utilizando los CCSID EBCDIC del servidor.
- UNICODE
- Especifica que los datos se codifican utilizando los CCSID Unicode del servidor.
Consulte la opción ENCODING bind (Encodificar enlace) en Opción ENCODING bind (Encodificar enlace) para obtener información sobre cómo se determina el valor predeterminado de esta opción.
- WITH EXPLAIN o SIN EXPLICAR
- Especifica si se proporcionará información sobre cómo se ejecutarán las sentencias SQL en la rutina.
- SIN EXPLICAR
- Especifica que no se proporcionará información sobre cómo se ejecutarán las sentencias SQL en la rutina.
Puede obtener el resultado EXPLAIN para una instrucción que esté incrustada en una rutina que se especifique utilizando WITHOUT EXPLAIN incrustando la instrucción SQL EXPLAIN en el cuerpo de la rutina. De lo contrario, el valor de la opción EXPLAIN se aplica a todas las sentencias SQL explicables en el cuerpo de la rutina y a la parte fullselect de cualquier sentencia DECLARE CURSOR.
SIN EXPLICACIÓN es la opción predeterminada.
- WITH EXPLAIN
- Especifica que se proporcionará información sobre cómo se ejecutarán las sentencias SQL en la rutina. Se inserta información en la tabla owner.PLAN_TABLE. propietario es el ID de autorización del propietario de la rutina. Alternativamente, el ID de autorización del propietario de la rutina puede tener un alias como owner.PLAN_TABLE que apunte a la tabla base, PLAN_TABLE. el propietario también debe tener los privilegios apropiados de SELECCIÓN e INSERCIÓN en esa tabla. WITH EXPLAIN no obtiene información para sentencias que acceden a objetos remotos. PLAN_TABLE debe tener una tabla base y puede tener varios alias con el mismo nombre de tabla, PLAN_TABLE, pero con diferentes calificadores de esquema.
No puede ser una vista o un sinónimo y debe existir antes de que se procese la sentencia CREATE.
En todas las inserciones en owner.PLAN_TABLE, el valor de QUERYNO es el número de sentencia asignado por Db2.La opción WITH EXPLAIN también rellena dos tablas opcionales, si existen: DSN_STATEMNT_TABLE y DSN_FUNCTION_TABLE. DSN_STATEMNT_TABLE contiene una estimación del coste de procesamiento de una instrucción SQL y DSN_FUNCTION_TABLE contiene información sobre la resolución de funciones. Para más información, consulte las tablas EXPLICAR.
Para obtener más información sobre la sentencia EXPLAIN, incluida una descripción de las tablas que se rellenan con la opción WITH EXPLAIN, consulte la sentencia EXPLAIN.
- WITH IMMEDIATE WRITE o SIN ESCRITURA INMEDIATA
- Especifica si se deben realizar escrituras inmediatas para las actualizaciones que se realizan en conjuntos de páginas o particiones dependientes del grupo de búferes. Esta opción solo es aplicable a entornos de intercambio de datos. El parámetro del subsistema IMMEDWRITE no afecta a esta opción. La opción de enlace IMMEDWRITE muestra la jerarquía implícita de la opción de enlace IMMEDWRITE (que es similar a esta opción de rutina) ya que afecta al tiempo de ejecución.
- SIN ESCRITURA INMEDIATA
- Especifica que se realiza una actividad de escritura normal. Las páginas actualizadas que dependen del grupo de búferes se escriben en la primera fase de confirmación o antes, o al final de la anulación para las transacciones que se han revertido.
SIN ESCRITURA INMEDIATA es la opción predeterminada.
- WITH IMMEDIATE WRITE
- Especifica que las páginas actualizadas que dependen del grupo de búferes se escriben inmediatamente en cuanto se completa la actualización del búfer. Las páginas actualizadas se escriben inmediatamente, incluso si el búfer se actualiza durante el progreso de reenvío o durante la reversión de una transacción. WITH IMMEDIATE WRITE puede afectar al rendimiento.
- ISOLATION LEVEL RR, RS, CS, o UR
- Especifica hasta qué punto aislar la rutina de los efectos de otras aplicaciones en ejecución. Para obtener información sobre los niveles de aislamiento, consulte Elegir una opción de AISLAMIENTO.
- RR
- Especifica la lectura repetible.
- RS
- Especifica la estabilidad de lectura.
- CS
- Especifica la estabilidad del cursor. CS es el valor predeterminado.
- UR
- Especifica lectura no comprometida.
- OPTHINT 'hint-id '
- Especifica si se utilizan sugerencias de optimización de consultas para sentencias SQL estáticas que están contenidas en el cuerpo de la rutina.
hint-id es una cadena de caracteres de hasta 128 bytes de longitud, que utiliza el subsistema Db2 al buscar en la PLAN_TABLE filas para utilizar como entrada. El valor predeterminado es una cadena vacía (''), lo que indica que el subsistema Db2 no utiliza sugerencias de optimización para sentencias SQL estáticas.
Las sugerencias de optimización solo se utilizan si están habilitadas para su sistema. Para más información, consulte el campo SUGERENCIAS DE OPTIMIZACIÓN (parámetro del subsistema OPTHINTS ).
SQL PATH
Especifica la ruta SQL que el subsistema Db2 utiliza para resolver tipos de datos, funciones y nombres de procedimientos no cualificados definidos por el usuario (en sentencias CALL) en el cuerpo de la rutina. El valor predeterminado es «SYSIBM», «SYSFUN», «SYSPROC», «SYSIBMADM » y el valor de la opción QUALIFIER, que es el calificador para el desencadenador que es el objetivo de la instrucción. La longitud máxima de la ruta SQL es de 2048 bytes. Db2 calcula la longitud tomando cada nombre de esquema que se especifica y eliminando los espacios en blanco finales, añadiendo un delimitador en los lados izquierdo y derecho, y añadiendo una coma después de cada nombre de esquema, excepto el último. La longitud de la cadena resultante no puede exceder los 2048 bytes.- nombre-esquema
- Identifica un esquema. Db2 no verifica que el esquema exista cuando se procesa la instrucción CREATE. El mismo nombre de esquema no debe aparecer más de una vez en la lista de nombres de esquemas.
SYSPUBLIC no debe especificarse para la ruta de SQL.
- SYSTEM PATH
- Especifica los nombres de esquema «SYSIBM», «SYSFUN», «SYSPROC», «SYSIBMADM ».
- SESSION_USER o USER
- Especifica el valor del registro especial SESSION_USER (o USER). En el momento en que se procesa la instrucción CREATE, la longitud real se incluye en la longitud total de la lista de nombres de esquemas que se especifica para la opción SQL PATH.

- REOPT
- Especifica si Db2 determinará la ruta de acceso en tiempo de ejecución utilizando los valores de variables SQL o parámetros SQL, marcadores de parámetros y registros especiales.
- None
- Especifica que Db2 no determina la ruta de acceso en tiempo de ejecución utilizando los valores de variables SQL o parámetros SQL, marcadores de parámetros y registros especiales.
NONE es el valor predeterminado.
- ALWAYS
- Especifica que Db2 siempre determina la ruta de acceso en tiempo de ejecución cada vez que se ejecuta una instrucción SQL. No especifique REOPT ALWAYS con las cláusulas WITH KEEP DYNAMIC o NODEFER PREPARE.
- ONCE
- Especifica que las instrucciones SQL dinámicas ( Db2 ) determinan la ruta de acceso solo una vez, la primera vez que se abre la instrucción. Esta ruta de acceso se utiliza hasta que la instrucción preparada se invalida o se elimina de la caché de instrucciones dinámicas y es necesario volver a prepararla.
- Aceleración de consulta
- Especifica si una consulta SQL estática está vinculada para aceleración y, de ser así, con qué comportamiento.
- NONE
- Especifica que ninguna consulta SQL estática de la aplicación está vinculada para aceleración o se acelerará cuando se ejecute la aplicación.
- HABILITAR
- Especifica que una consulta SQL estática está destinada a la aceleración si cumple los criterios de aceleración, incluidos los criterios de coste y heurísticos. La consulta se dirige a un acelerador cuando se ejecuta la aplicación. De lo contrario, si la consulta estática no satisface los criterios de aceleración, la consulta se ejecutará en Db2.
Si se produce una condición de error, como uno de los siguientes ejemplos, mientras se ejecuta la consulta estática acelerada cuando se ejecuta la aplicación, Db2 falla la consulta estática y devuelve un código SQL negativo a la aplicación:
- Se produce un error al ejecutar la consulta estática en el acelerador.
- El acelerador devuelve un error para la consulta.
- El acelerador no se ha iniciado y Db2 no puede enrutar la consulta estática al acelerador para su ejecución.
- ENABLE WITH FAILBACK
- Da lugar al mismo comportamiento que ENABLE, excepto si se produce una de las condiciones de error en la primera apertura de la consulta estática acelerada cuando se ejecuta la aplicación. En este caso, en lugar de fallar la consulta estática y devolver un código SQL negativo a la aplicación, Db2 realiza un enlace incremental temporal a nivel de sentencia de la consulta y ejecuta la consulta en Db2. La aplicación no detecta el fallo de aceleración. No es posible volver a Db2 después de que la aplicación realice un OPEN correcto para la consulta en el acelerador.
- ELIGIBLE
- Especifica que una consulta SQL estática está destinada a la aceleración si la consulta cumple los criterios básicos de aceleración, independientemente de los criterios de coste o heurísticos. La consulta se dirige al acelerador cuando se ejecuta la aplicación.
Al igual que el comportamiento de ENABLE, si se produce una condición de error al ejecutar la consulta estática acelerada cuando se ejecuta la aplicación, Db2 falla la consulta estática y devuelve un código SQL negativo a la aplicación.
- ALL
- Especifica que todas las consultas SQL estáticas de la aplicación deben vincularse para su aceleración y enrutarse al acelerador cuando se ejecute la aplicación. Si Db2 determina que una consulta estática no puede ejecutarse en el acelerador y la consulta hace referencia a una tabla o vista base de usuario, la operación BIND o REBIND PACKAGE falla con un mensaje de error para esa consulta. (Se hace una excepción de fallo para las tablas temporales globales declaradas (DGTT) y las tablas temporales globales creadas (CGTT) porque estas tablas no pueden acelerarse)
Al igual que el comportamiento de ENABLE, si se produce una condición de error al ejecutar la consulta estática acelerada cuando se ejecuta la aplicación, Db2 falla la consulta estática y devuelve un código SQL negativo a la aplicación.
Esta opción de enlace no se aplica a un fullselect o WITH common-table-expression que se especifique en una sentencia RETURN para la rutina, o en una asignación de variable de host SET que se utilice en la rutina. Las consultas que se especifican en estos casos no pueden acelerarse.
- GET_ACCEL_ARCHIVE
- Especifica si una consulta SQL estática que está destinada a la aceleración recupera datos archivados en el acelerador, en lugar de datos activos.
- NEE
- Especifica que no hay ninguna consulta SQL estática vinculada para recuperar datos archivados del acelerador. Si la consulta estática tampoco está vinculada para aceleración, la consulta se ejecutará en Db2.
Si la consulta estática está destinada a la aceleración porque se especificó la opción de enlace QUERYACCELERATION, la consulta se enruta al acelerador cuando se ejecuta la aplicación; sin embargo, la consulta no recupera ningún dato archivado.
- YES
- Especifica que si se cumplen todos los criterios siguientes, la consulta está destinada a la aceleración y recupera los datos archivados en el acelerador cuando se ejecuta la aplicación:
- También se especifica la opción de enlace QUERYACCELERATION.
- La consulta SQL estática hace referencia a una tabla acelerada que tiene datos particionados archivados en un acelerador.
- La consulta estática cumple los criterios de aceleración especificados por la opción de enlace QUERYACCELERATION.
Si la consulta estática no satisface los criterios de aceleración especificados por la opción de enlace QUERYACCELERATION, la operación BIND o REBIND PACKAGE falla con un mensaje de error para esa consulta.
Esta opción de enlace no se aplica a un fullselect o WITH common-table-expression que se especifique en una sentencia RETURN para la rutina, o en una asignación de variable de host SET que se utilice en la rutina. Las consultas que se especifican en estos casos no pueden acelerarse.
ACELERACIÓN WAITFORDATA
Especifica la cantidad máxima de tiempo, si la hubiera, que un acelerador retrasará una consulta mientras el acelerador espera la replicación de los cambios de datos comprometidos de Db2 que se produjeron antes de que Db2 ejecutara la consulta.Para consultas estáticas aceleradas, también debe establecer la opción de enlace QUERYACCELERATION para esta función o procedimiento en un valor válido distinto de NONE para solicitar que se aceleren las consultas estáticas. Si el valor de la opción de enlace QUERYACCELERATION se establece en NONE, se acepta la opción de enlace ACCELERATIONWAITFORDATA y el paquete se vincula con el valor de la opción; sin embargo, la opción no se aplicará a las consultas SQL estáticas porque no se acelerarán las consultas estáticas.
Para consultas dinámicas aceleradas, especificar la opción de enlace ACCELERATION WAITFORDATA también inicializa el registro especial CURRENT QUERY ACCELERATION WAITFORDATA, que se utiliza para las consultas dinámicas en la función o procedimiento Db2 si también se utiliza la opción de función o procedimiento DEFAULT SPECIAL REGISTERS. Inicializar CURRENT QUERY ACCELERATION WAITFORDATA a un valor mayor que 0 especifica que Db2 y el acelerador aplicarán el comportamiento de retardo WAITFORDATA y las restricciones a todas las consultas SQL dinámicas que se acelerarán desde la función o procedimiento Db2 . El registro especial CURRENT QUERY ACCELERATION también debe tener un valor válido distinto de NONE para solicitar que se aceleren las consultas dinámicas.
- nnnn.m
- Especifica un valor de constante numérica DECIMAL(5,1) que especifica el número máximo de segundos que el acelerador retrasará una consulta mientras el acelerador espera la replicación de los cambios de datos de Db2 confirmados que se produjeron antes de que Db2 ejecutara la consulta.
Puede especificar un valor en el rango de 0.0 a 3600.0 segundos. Por ejemplo, un valor de 20.0 representa 20.0 segundos (o 20000 milisegundos), y un valor de 30.5 representa 30.5 segundos (o 30500 milisegundos). El valor máximo de 3600.0 significa que la consulta se retrasa 3600 segundos.
También puede especificar el valor como un valor de constante numérica INTEGER que oscile entre 0 y 3600 segundos, que Db2 convertirá en un valor DECIMAL(5,1).
Importante : Cuando se especifica un valor distinto de cero para la opción de enlace ACCELERATIONWAITFORDATA, Db2 y el acelerador aplicarán otros comportamientos, restricciones y requisitos de retardo WAITFORDATA a todas las consultas que se acelerarán desde el paquete de la aplicación. Estos comportamientos, restricciones y requisitos pueden hacer que consultas que antes se aceleraban con éxito ya no se aceleren o fallen. Consulte la declaración SET CURRENT QUERY ACCELERATION WAITFORDATA para obtener más información sobre los comportamientos, restricciones y requisitos de WAITFORDATA.
ACELERADOR
Especifica un servidor acelerador que, si está activado y disponible, Db2 considerará como el acelerador preferido para las consultas SQL elegibles antes de enviar las consultas a otros servidores aceleradores. Si el servidor acelerador especificado no está activado o disponible, Db2 enviará las consultas a otros servidores aceleradores disponibles.
- VALIDAR EJECUCIÓN o VALIDATE BIND
- Especifica si se deben volver a comprobar, en tiempo de ejecución, los errores del tipo «OBJETO NO ENCONTRADO» y «NO AUTORIZADO» que se encuentran durante el enlace o el reenlace. La opción no tiene efecto si todos los objetos y privilegios necesarios existen.
- VALIDAR EJECUCIÓN
- Especifica que si no existen los objetos o privilegios necesarios cuando se procesa la sentencia CREATE, se devuelven mensajes de advertencia, pero la sentencia CREATE se ejecuta correctamente. El subsistema Db2 vuelve a comprobar los objetos y privilegios en tiempo de ejecución para aquellas sentencias SQL que no pasaron las comprobaciones durante el procesamiento de la sentencia CREATE. La autorización comprueba el uso del ID de autorización del propietario de la rutina.
VALIDATE RUN (Validar ejecución ) es la opción predeterminada.
- VALIDATE BIND
- Especifica que si los objetos o privilegios necesarios no existen en el momento en que se procesa la instrucción CREATE, se emite un error y la instrucción CREATE falla.
- ROUNDING
- Especifica el modo de redondeo para la manipulación de datos DECFLOAT. El valor predeterminado se toma del MODO DE REDONDO DE PUNTO FLOTANTE DECIMAL PREDETERMINADO en DECP.
- DEC_ROUND_CEILING
- Especifica que los números se redondean hacia el infinito positivo.
- DEC_ROUND_DOWN
- Especifica que los números se redondean hacia 0 (truncamiento).
- DEC_ROUND_FLOOR
- Especifica que los números se redondean hacia el infinito negativo.
- DEC_ROUND_HALF_DOWN
- Especifica que los números se redondean al más cercano; si son equidistantes, se redondean hacia abajo.
- DEC_ROUND_HALF_EVEN
- Especifica que los números se redondean al más cercano; si son equidistantes, se redondean de modo que el dígito final sea par.
- DEC_ROUND_HALF_UP
- Especifica que los números se redondean al más cercano; si son equidistantes, se redondean hacia arriba.
- DEC_ROUND_UP
- Especifica que los números se redondean a partir de 0.
- DATE FORMAT ISO, EUR, USA, JIS, o LOCAL
- Especifica el formato de fecha para los valores de resultado que son representaciones de cadena de valores de fecha u hora. Para más información, consulte Representaciones de cadenas de valores de fecha y hora.
El formato predeterminado se especifica en el campo DATE FORMAT (FORMATO DE FECHA) del panel de instalación DSNTIP4 del sistema donde se define la rutina. No puede utilizar la opción LOCAL a menos que tenga una rutina de salida de fecha.
- DECIMAL(15 ), DECIMAL(31 ), DECIMAL(15 , s ), o DECIMAL(31 , s )
- Especifica la precisión máxima que se debe utilizar para las operaciones aritméticas decimales. Para más información, consulte Aritmética con dos operandos decimales. El formato predeterminado se especifica en el campo ARITMÉTICA DECIMAL del panel de instalación DSNTIPF del sistema donde se define la rutina. Si se especifica la forma pp. s, s debe ser un número en el rango 1–9. s representa la escala mínima que se utilizará para la división.
- FOR UPDATE CLAUSE OPTIONAL o PARA ACTUALIZAR SE REQUIERE CLÁUSULA
- Especifica si la cláusula FOR UPDATE es necesaria para una instrucción DECLARE CURSOR si el cursor se va a utilizar para realizar actualizaciones posicionadas.
- PARA ACTUALIZAR SE REQUIERE CLÁUSULA
- Especifica que debe indicarse una cláusula FOR UPDATE como parte de la definición del cursor si este se va a utilizar para realizar actualizaciones posicionadas.
POR ACTUALIZACIÓN CLAUSULA REQUERIDA es la opción predeterminada.
- FOR UPDATE CLAUSE OPTIONAL
- Especifica que la cláusula FOR UPDATE no necesita ser especificada para que un cursor sea utilizado para actualizaciones posicionadas. El cuerpo de rutina puede incluir sentencias UPDATE posicionadas que actualizan columnas que el usuario está autorizado a actualizar.
- TIME FORMAT ISO, EUR, USA, JIS, o LOCAL
- Especifica el formato de hora para los valores de resultado que son representaciones de cadena de valores de fecha u hora. Para más información, consulte Representaciones de cadenas de valores de fecha y hora.
El formato predeterminado se especifica en el campo FORMATO DE HORA del panel de instalación DSNTIP4 del sistema donde se define la rutina. No puede utilizar la opción LOCAL a menos que tenga una rutina de salida de fecha.
- NOT SECURED o SECURED
- Especifica si la función se considera segura para el control de acceso de filas y el control de acceso de columnas. La opción SEGURO o NO SEGURO se aplica a todas las versiones futuras de la función.
- NOT SECURED
- Especifica que la función no se considera segura para el control de acceso de filas y el control de acceso de columnas.
NOT SECURED es el valor predeterminado.
Cuando se invoca la función, los argumentos de la función no deben hacer referencia a una columna para la que esté habilitada una máscara de columna cuando la tabla esté utilizando un control de acceso a columnas activo.
- SECURED
- Especifica que la función se considera segura para el control de acceso de filas y el control de acceso de columnas.
La función debe ser segura cuando se hace referencia a ella en un permiso de fila o una máscara de columna.
- BUSINESS_TIME SENSITIVE
- Determina si las referencias a tablas temporales del período de aplicación en sentencias SQL tanto estáticas como dinámicas se ven afectadas por el valor del registro especial CURRENT TEMPORAL BUSINESS_TIME.
- YES
- Las referencias a tablas temporales de período de aplicación se ven afectadas por el valor del registro especial CURRENT TEMPORAL BUSINESS_TIME. SÍ es el valor predeterminado.
- NO
- Las referencias a tablas temporales de período de aplicación no se ven afectadas por el valor del registro especial CURRENT TEMPORAL BUSINESS_TIME.
Para más información, consulte el registro especial CURRENT TEMPORAL BUSINESS_TIME.
- SYSTEM_TIME SENSITIVE
- Determina si las referencias a tablas temporales del período del sistema en sentencias SQL tanto estáticas como dinámicas se ven afectadas por el valor del registro especial CURRENT TEMPORAL SYSTEM_TIME.
- YES
- Las referencias a tablas temporales de período de sistema se ven afectadas por el valor del registro especial CURRENT TEMPORAL SYSTEM_TIME. SÍ es el valor predeterminado.
- NO
- Las referencias a tablas temporales de período de sistema no se ven afectadas por el valor del registro especial CURRENT TEMPORAL SYSTEM_TIME.
Para más información, consulte el registro especial CURRENT TEMPORAL SYSTEM_TIME.
- ARCHIVE SENSITIVE
- Determina si las referencias a tablas habilitadas para archivo en sentencias SQL se ven afectadas por el valor de la variable global incorporada SYSIBMADM.GET_ARCHIVE.
- YES
- Las referencias a tablas habilitadas para archivo se ven afectadas por el valor de la variable global incorporada SYSIBMADM.GET_ARCHIVE. SÍ es el valor predeterminado.
- NO
- Las referencias a tablas habilitadas para archivo no se ven afectadas por el valor de la variable global incorporada SYSIBMADM.GET_ARCHIVE.
Para obtener información relacionada, consulte la variable global incorporada GET_ARCHIVE
APPLCOMPAT nivel de compatibilidad de APPLCOMPAT
Especifica el comportamiento del nivel de compatibilidad de la aplicación para las sentencias SQL estáticas del paquete. Si no se especifica esta opción, el comportamiento viene determinado por el parámetro del subsistema APPLCOMPAT. Se pueden especificar los siguientes valores de nivel de compatibilidad de aplicaciones :
V12R1M5nn

Compatibilidad con el comportamiento del nivel de función Db2 12 identificado. Por ejemplo,
V12R1M510especifica la compatibilidad con el nivel de función Db2 12 más alto disponible. Debe activarse el nivel de función equivalente o superior.
Para obtener información sobre las nuevas capacidades que estarán disponibles en cada nivel de compatibilidad de aplicaciones, consulte los niveles de compatibilidad de aplicaciones V12R1Mnnn.
Sugerencia:
Es posible que se requieran pasos adicionales de preparación del programa para aumentar el nivel de compatibilidad de las aplicaciones que utilizan clientes o controladores de servidor de datos para acceder a Db2 for z/OS®. Para obtener más información, consulte Configuración de niveles de compatibilidad de aplicaciones para clientes y controladores de servidores de datos.

V12R1
Compatibilidad con el comportamiento de Db2 12 nivel de función 500. Este valor tiene el mismo resultado que especificar V12R1M500.
- V11R1
- Compatibilidad con el comportamiento de la modalidad de nueva función de Db2 11. Después de la migración a Db2 12, este valor tiene el mismo resultado que especificar
V12R1M100. Para más información, consulte V11R1 nivel de compatibilidad de la aplicación - V10R1
- Compatibilidad con el comportamiento de la modalidad de nueva función de DB2® 10. Para más información, consulte V10R1 nivel de compatibilidad de la aplicación.

CONCENTRAR DECLARACIONES OFF o CONCENTRAR DECLARACIONES CON LITERALES
FL 500 Especifica si cada sentencia SQL dinámica de la rutina que especifica constantes literales se almacenará en caché como una entrada de sentencia única e independiente en la caché de sentencias dinámicas, en lugar de compartir una sentencia existente en la caché. Las sentencias SQL dinámicas pueden compartir una sentencia existente en la caché si la nueva sentencia cumple todas las condiciones para compartir una versión en caché de la misma sentencia dinámica, excepto que la nueva sentencia especifique una o más constantes literales que sean diferentes a la sentencia en caché.- CONCENTRAR DECLARACIONES OFF
Especifica que cada sentencia SQL dinámica que especifique constantes literales se almacenará en caché como una entrada de sentencia única si especifica una o más constantes que sean diferentes a la versión almacenada en caché de la misma sentencia dinámica. CONCENTRATE STATEMENTS OFF es el comportamiento predeterminado de almacenamiento en caché de sentencias dinámicas.
- CONCENTRATE STATEMENTS WITH LITERALS
Especifica que cada sentencia SQL dinámica que especifique constantes literales compartirá una versión en caché de la misma sentencia dinámica que también se prepara utilizando la opción CONCENTRATE STATEMENTS WITH LITERALS, si la nueva sentencia dinámica cumple todas las condiciones para compartir la sentencia en caché, y las constantes que se especifican pueden reutilizarse en lugar de las constantes de la sentencia en caché.

- SQL-cuerpo-de-rutina
- Especifica una sola instrucción de control SQL, incluida una instrucción compuesta. Consulte el lenguaje de procedimientos SQL (SQL PL ) para obtener más información sobre la definición de funciones SQL.
Se emite un error si una función SQL llama a un procedimiento y el procedimiento emite una instrucción COMMIT, ROLLBACK, CONNECT, RELEASE o SET CONNECTION.
Si el cuerpo de la rutina SQL es una instrucción compuesta, debe contener al menos una instrucción RETURN y debe ejecutarse una instrucción RETURN cuando se invoque la función.
El cuerpo de la rutina SQL no debe contener una especificación de punto ni una cláusula de punto.
No se permite una instrucción ALTER FUNCTION (escalar SQL compilado) o una instrucción ALTER PROCEDURE (SQL nativo) con una cláusula ADD VERSION o una cláusula REPLACE en un cuerpo de rutina SQL.
WRAPPED texto-declarado-ofuscado
FL 500Especifica la definición codificada de la función. Una declaración CREATE FUNCTION puede codificarse utilizando la función escalar WRAP.WRAPPED no debe especificarse en una instrucción CREATE estática.

Notas para CREATE FUNCTION (escala SQL compilada)
- Consideraciones para todos los tipos de funciones definidas por el usuario:
- Para las consideraciones que se aplican a todos los tipos de funciones definidas por el usuario, consulte la declaración CREAR FUNCIÓN (resumen ).
Tipos de funciones escalares SQL:
Si la sintaxis de la sentencia CREATE FUNCTION se ajusta a los diagramas de sintaxis y descripciones para CREATE FUNCTION (inlined SQL scalar), Db2 define una función inlined, y no se crea un paquete. Cuando se invoca una función escalar SQL en línea, la expresión de la instrucción RETURN de la función se copia (en línea) en la propia consulta; la función no se invoca. Los atributos de una función escalar SQL en línea se describen en la instrucción CREATE FUNCTION (función escalar SQL en línea).De lo contrario, Db2 intenta definir una función compilada con un paquete asociado. Por ejemplo, si la sentencia RETURN contiene un fullselect escalar, Db2 intenta definir una función compilada. Los atributos de una función escalar SQL compilada se describen en la instrucción CREATE FUNCTION (función escalar SQL compilada ).
Para determinar qué tipo de función escalar SQL se crea, consulte la columna INLINE de la tabla de catálogo de SYSIBM.SYSROUTINES. En la columna INLINE, un valor de Y indica que la función es una función en línea, y un valor de N indica que la función es una función compilada.

Consideraciones para funciones definidas con MODIFIES SQL DATA:
Si se especifica una función en una subselección, y la función se define como MODIFIES SQL DATAel número de veces que se invoque la función variará en función del plan de acceso utilizado.
- Función de autorreferencia:
- El cuerpo de una función SQL (es decir, la expresión o NULL en la sentencia RETURN en el cuerpo de la sentencia CREATE FUNCTION) no puede contener una invocación recursiva de sí misma o a otra función que la invoque, porque tal función no existiría para ser referenciada.
- Objetos dependientes:
- Una rutina SQL depende de los objetos a los que se hace referencia en el cuerpo de la rutina.
Declaraciones ofuscadas:
Una sentencia CREATE FUNCTION puede ejecutarse de forma ofuscada. En una declaración ofuscada, solo se pueden leer el nombre de la función, los parámetros y la palabra clave WRAPPED. El resto de la sentencia está codificado de tal modo que no se puede leer pero se puede decodificar mediante un servidor de base de datos que dé soporte a sentencias enmascaradas. La función escalar WRAP produce sentencias ofuscadas. Cualquier opción de depuración que se especifique cuando la función se crea a partir de una sentencia ofuscada se ignora.
- Resolución del identificador:
- Consulte el lenguaje de procedimientos SQL (SQL PL ) para obtener información sobre cómo se resuelven los nombres en columnas, variables o parámetros SQL dentro de una rutina SQL.
Si se utilizan nombres duplicados para columnas, variables y parámetros, califique los nombres duplicados utilizando el designador de tabla para las columnas, el nombre de rutina para los parámetros, el nombre de etiqueta para las variables SQL y el nombre de esquema para las variables globales.
- Manejo de errores en funciones SQL:
- Debe tener en cuenta las posibles excepciones que pueden ocurrir para cada instrucción SQL en el cuerpo de una función SQL compilada. Cualquier excepción SQLSTATE que no se gestione dentro de la función (utilizando un controlador), da como resultado la devolución de la excepción SQLSTATE para la instrucción SQL que provocó la invocación de la función.
- Líneas dentro de la definición de la función SQL:
- Cuando se crea una función SQL compilada, la información se conserva en las líneas de la instrucción CREATE. Las líneas se determinan por la presencia del nuevo carácter de control de línea.
En una función escalar SQL compilada, un carácter de control de nueva línea es un carácter especial que se utiliza para una nueva línea. Los nuevos caracteres de control de línea para una función escalar SQL compilada incluyen:- Salto de línea
- Línea nueva
- Retorno de carro
- Retorno de carro, seguido de un salto de línea
- Retorno de carro, seguido de una nueva línea

- Consideraciones para los programas de procesador SQL:
- Los programas de procesador SQL, como SPUFI, el " Db2 command line processor" y el " DSNTEP2 ", podrían no analizar correctamente las sentencias SQL en el cuerpo de la rutina que terminan con punto y coma. Estos programas de procesador aceptan múltiples sentencias SQL como entrada, con cada sentencia separada por un carácter de terminación. Los programas de procesamiento que utilizan un punto y coma como terminador de instrucciones SQL pueden truncar una instrucción CREATE FUNCTION con puntos y comas incrustados y pasar solo una parte de ella a Db2. Por lo tanto, es posible que tenga que cambiar el carácter terminador SQL para estos programas de procesador. Para obtener información sobre cómo cambiar el carácter terminador para SPUFI y DSNTEP2, consulte Configuración del carácter terminador SQL en un conjunto de datos de entrada SPUFI.
- Consideraciones para paquetes:
- Se genera un paquete para las funciones escalares SQL compiladas. El paquete asociado a la primera versión de una función se denomina de la siguiente manera:
- la ubicación se establece en el valor del registro especial CURRENT SERVER.
- collection-id (esquema) para el paquete es el mismo que el calificador de esquema de la función.
- package-id es el mismo que el nombre específico de la función.
- version-id es el mismo que el identificador de versión para la versión inicial de la función.
El paquete se genera utilizando las opciones de enlace que corresponden a las opciones de función especificadas implícita o explícitamente. Además de las opciones de encuadernación correspondientes, el paquete se genera utilizando las siguientes opciones de encuadernación:
- BANDERA(I)
- SQLERROR(SINPAQUETE)
- ACTIVAR (*)
- Correspondencia de las opciones de función para vincular las opciones de comando:
- La siguiente tabla enumera las opciones para CREAR FUNCIÓN y MODIFICAR FUNCIÓN y la opción de comando de enlace correspondiente. Consulte las opciones BIND y REBIND para paquetes, planes y servicios para obtener información sobre las opciones del comando BIND.
Tabla 1. Correspondencia de opciones de función con opciones de enlace Opción CREATE FUNCTION o ALTER FUNCTION opción de comando bind
ACELERACIÓN WAITFORDATA nnnn.m
ACELERACIÓNWAITFORDATA( nnnn.m )
ACELERADOR nombre-acelerador
ACELERADOR (nombre-del-acelerador )
ESQUEMA DE CODIFICACIÓN DE APLICACIONES ASCII CODIFICACIÓN (ASCII) ESQUEMA DE CODIFICACIÓN DE APLICACIONES EBCDIC ENCODING(EBCDIC) ESQUEMA DE CODIFICACIÓN DE APLICACIONES UNICODE CODIFICACIÓN (UNICODE) ARCHIVO CONFIDENCIAL NO CONFIDENCIAL (NO) ARCHIVO CONFIDENCIAL SÍ CONFIDENCIAL (SÍ) HORARIO DE OFICINA SENSIBLE NO SENSIBLE AL VENTILADOR(NO) SENSIBLE AL HORARIO DE TRABAJO SÍ SENSIBLE AL VENTILADOR(SÍ) DATOS ACTUALES NO CURRENTDATA(NO) DATOS ACTUALES SÍ CURRENTDATA(YES) EJECUCIÓN DE REGLAS DINÁMICAS DYNAMICRULES(RUN) DYNAMICRULES BIND DYNAMICRULES(BIND) REGLAS DINÁMICAS DEFINEBIND REGLAS DINÁMICAS(DEFINEBIND) REGLAS DINÁMICAS DEFINERUN REGLAS DINÁMICAS(DEFINERUN) DINÁMICO REGLAS INVOCAR VINCULAR DYNAMICRULES(INVOKEBIND) REGLAS DINÁMICAS INVOKERUN REGLAS DINÁMICAS(INVOKERUN)
GET_ACCEL_ARCHIVE NO
OBTENERARCHIVOACELERADO(NO) 
GET_ACCEL_ARCHIVE SÍ GETACCELARCHIVE(SÍ) NIVEL DE AISLAMIENTO CS ISOLATION(CS) NIVEL DE AISLAMIENTO RS ISOLATION(RS) NIVEL DE AISLAMIENTO RR ISOLATION(RR) NIVEL DE AISLAMIENTO UR ISOLATION (UR) OPTHINT cadena-constante OPTHINT (hint-id ) PROPIETARIO DEL PAQUETE nombre-autorización PROPIETARIO (identificación de autorización ) CALIFICADOR nombre-esquema CALIFICADOR (nombre del calificador )
ACELERACIÓN DE CONSULTA NINGUNA
ACELERACIÓN DE CONSULTAS (NINGUNA)
ACTIVAR ACELERACIÓN DE CONSULTAS ACELERACIÓN DE CONSULTAS (ACTIVAR) ACTIVAR LA ACELERACIÓN DE CONSULTAS CON RECUPERACIÓN ACELERACIÓN DE CONSULTAS (ACTIVAR CON RECUPERACIÓN) ACELERACIÓN DE CONSULTAS ELEGIBLE ACELERACIÓN DE CONSULTAS (ELEGIBLE) ACELERACIÓN DE CONSULTAS TODO ACELERACIÓN DE CONSULTAS (TODAS) REOPTAR SIEMPRE REOPT(ALWAYS) REOPTAR NINGUNO REOPT(NONE) REINTENTAR UNA VEZ REOPT(ONCE) REDONDEAR DEC_ROUND_CEILING REDONDEO (TETO) REDONDEAR DEC_ROUND_DOWN REDONDEO (REDUCIR) REDONDEAR DEC_ROUND_FLOOR REDONDEO (PISO) REDONDEAR DEC_ROUND_HALF_DOWN REDONDEO (MEDIO PUNTO) REDONDEAR DEC_ROUND_HALF_EVEN REDONDEO (MEDIO PUNTO) REDONDEAR DEC_ROUND_HALF_UP REDONDEO (MEDIO UP) REDONDEAR DEC_ROUND_UP REDONDEO (AL ALZA) SQL PATH especificación de ruta PATH(especificación de ruta ) SENSIBLE AL TIEMPO DEL SISTEMA NO SENSIBLE A SISTEMAS (NO) SENSIBLE AL TIEMPO DEL SISTEMA SÍ SENSIBLE A SISTEMAS (SÍ) VALIDAR VINCULACIÓN VALIDATE(BIND) VALIDAR EJECUCIÓN VALIDAR (INICIAR) CON EXPLICACIÓN EXPLICAR (SÍ) SIN EXPLICAR EXPLICAR (NO) POR ESCRITO INMEDIATO ESCRIBIR INMEDIATAMENTE (SÍ) SIN ESCRITURA INMEDIATA IMMEDWRITE(NO) - Consideraciones sobre el nivel de compatibilidad de la aplicación para objetos de función
- El nivel de compatibilidad de la aplicación controla la adopción y el uso de nuevas funciones y mejoras. Cuando se crea o altera un objeto, se utilizan dos niveles de compatibilidad de aplicación distintos: uno para procesar la definición del objeto y el otro para procesar las sentencias SQL en el cuerpo del objeto:
Definición de objeto El valor de registro especial CURRENT APPLICATION COMPATIBILITY se utiliza para procesar la definición de objeto, excepto para las sentencias del cuerpo del objeto
Este nivel de compatibilidad de aplicación se almacena en la columna SYSENVIRONMENT.APPLCOMPAT. Puede utilizar el valor de ID de entorno en la definición de catálogo del objeto para localizar la fila SYSENVIRONMENT con el valor de ENVID coincidente.
Este nivel de compatibilidad de aplicación se puede cambiar cuando se vuelve a generar el objeto.
Sentencias en el cuerpo del objeto El nivel de compatibilidad de aplicación que se especifica implícita o explícitamente con la opción APPLCOMPAT de la sentencia CREATE o ALTER se utiliza para procesar sentencias en el cuerpo del objeto.
Este nivel de compatibilidad de aplicación se almacena en la columna SYSPACKAGE.APPLCOMPAT para el paquete asociado a la definición de objeto.
- Implementación de una función escalar SQL compilada:
- Cuando se emite un comando BIND DEPLOY para implementar una función escalar SQL compilada en una ubicación de destino, las opciones SECURED y NOT SECURED se incluyen en el proceso de implementación.
Al implementar una función escalar SQL compilada, si no existe una función con el mismo nombre de destino en la ubicación de destino, la función implementada se crea como una nueva función en la ubicación de destino con la misma opción SECURED o NOT SECURED que se especifica (o se utiliza el valor predeterminado NOT SECURED) en el origen de la implementación.
Al implementar una función escalar SQL compilada, si ya existe una función con el mismo nombre de destino en la ubicación de destino, la función implementada se añade como una nueva versión de la función o se utiliza para reemplazar una versión existente de la función. La opción SEGURA o NO SEGURA de la función implementada debe ser la misma que la de la función existente en la ubicación de destino.
- Versiones de una función:
- La instrucción CREATE FUNCTION para una función SQL define la versión inicial de la función. Puede definir versiones adicionales utilizando la cláusula ADD VERSION de la instrucción ALTER FUNCTION. Todas las versiones de una función comparten la misma firma de función y el mismo nombre específico. Sin embargo, los nombres de los parámetros pueden diferir entre las versiones de una función. Solo una versión de la función puede considerarse la versión activa de la función.
- Sintaxis alternativa y sinónimos:
- Para proporcionar compatibilidad con versiones anteriores de Db2 u otros productos de la familia Db2 , Db2 admite la siguiente sintaxis alternativa:
- VARIANT como sinónimo de NO DETERMINISTA
- NO VARIANTE como sinónimo de DETERMINISTA
- NOT NULL CALL como sinónimo de RETURNS NULL ON NULL INPUT
- LLAMADA NULA como sinónimo de LLAMADA NULA EN ENTRADA
- Se puede especificar ZONA HORARIA como alternativa a ZONA HORARIA.
Ejemplo para CREATE FUNCTION (escalar SQL compilado)
CREATE FUNCTION REVERSE(INSTR VARCHAR(4000))
RETURNS VARCHAR(4000)
DETERMINISTIC NO EXTERNAL ACTION CONTAINS SQL
BEGIN
DECLARE REVSTR, RESTSTR VARCHAR(4000) DEFAULT '';
DECLARE LEN INT;
IF INSTR IS NULL THEN
RETURN NULL;
END IF;
SET (RESTSTR, LEN) = (INSTR, LENGTH(INSTR));
WHILE LEN > 0 DO
SET (REVSTR, RESTSTR, LEN)
= (SUBSTR(RESTSTR, 1, 1) CONCAT REVSTR,
SUBSTR(RESTSTR, 2, LEN - 1),
LEN - 1);
END WHILE;
RETURN REVSTR;
END#