Selección de función

Para las referencias de funciones calificadas y no calificadas, el algoritmo de selección de funciones examina todas las funciones aplicables, tanto incorporadas como definidas por el usuario, que tienen: el nombre especificado; el mismo número de parámetros definidos que los argumentos en la referencia de función; y cada parámetro idéntico a o promocionable desde el tipo del argumento correspondiente.

Las funciones aplicables son funciones en el esquema con nombre para una referencia calificada, o funciones en los esquemas de la vía de acceso de SQL para una referencia no calificada. El algoritmo busca una coincidencia exacta, o en su defecto, una mejor coincidencia entre estas funciones. La vía de acceso de SQL se utiliza, en el caso de una referencia no calificada, como factor decisivo si se encuentran dos coincidencias idénticas en distintos esquemas.

Excepción: Si hay una referencia no calificada a una función denominada RID, y la función se invoca con un único argumento que coincide con una referencia de tabla en la cláusula FROM de la subselección, el esquema es SYSIBM y se invoca la función RID incorporada.

Puede anidar referencias de función, incluso referencias a la misma función. Esto es generalmente cierto para las funciones incorporadas, así como para las UDF; sin embargo, hay algunas limitaciones cuando las funciones de columna están involucradas.

Por ejemplo:
     CREATE FUNCTION BLOOP (INTEGER) RETURNS INTEGER ... 
     CREATE FUNCTION BLOOP (DOUBLE) RETURNS INTEGER ...
Ahora tenga en cuenta la siguiente sentencia DML:
     SELECT BLOOP( BLOOP(COLUMN1)) FROM T

En esta sentencia, si column1 es una columna DECIMAL o DOUBLE, la referencia de BLOB interna se resuelve en el segundo BLOB. Debido a que este BLOOP devuelve un INTEGER, el BLOOP externo se resuelve en el primer BLOOP.

De forma alternativa, en esta sentencia DML, si column1 es una columna SMALLINT o INTEGER, la referencia de bloop interna se resuelve en el primer BLOOP. Debido a que este BLOOP devuelve un INTEGER, el BLOOP externo también se resuelve en el primer BLOOP. En este caso, está viendo referencias anidadas a la misma función.

Al definir una función con el nombre de uno de los operadores de SQL, puede invocar una UDF utilizando notación infija. Por ejemplo, suponga que puede atribuir algún significado al operador "+" para valores que tengan un tipo distinto BOAT. Puede definir la siguiente UDF:
     CREATE FUNCTION "+" (BOAT, BOAT) RETURNS ...
A continuación, puede escribir la siguiente sentencia SQL válida:
     SELECT BOAT_COL1 + BOAT_COL2 
     FROM BIG_BOATS 
     WHERE BOAT_OWNER = 'Nelson Mattos'
Pero también puede escribir la sentencia igualmente válida:
     SELECT "+"(BOAT_COL1, BOAT_COL2) 
     FROM BIG_BOATS 
     WHERE BOAT_OWNER = 'Nelson Mattos' 

Tenga en cuenta que no tiene permiso para sobrecargar los operadores condicionales incorporados como, por ejemplo, >, =, LIKE, IN, etc., de esta forma.

Para obtener una descripción más detallada de la selección de funciones, consulte la sección Referencias de función en el tema Funciones listadas en los enlaces relacionados.