Creación de funciones de tabla SQL

La tarea de crear funciones de tabla SQL se puede realizar en cualquier momento.

Antes de empezar

Antes de crear una función de tabla SQL, asegúrese de que tiene los privilegios necesarios para ejecutar la sentencia CREATE FUNCTION (tabla).


Restricciones

Consulte: Restricciones sobre funciones SQL

Procedimiento

  1. Defina la sentencia CREATE FUNCTION (tabla):
    1. Especifique un nombre para la función.
    2. Especifique un nombre y un tipo de datos para cada parámetro de entrada.
    3. Especifique los atributos de rutina.
    4. Especifique la palabra clave RETURNS TABLE.
    5. Especifique la palabra clave BEGIN ATOMIC para introducir el cuerpo de la función.
    6. Especifique el cuerpo de la función.
    7. Especifique la cláusula RETURN con corchetes en los que se especifica una consulta que define el conjunto de resultados que se va a devolver.
    8. Especifique la palabra clave END.
  2. Ejecute la sentencia CREATE FUNCTION (tabla) desde una interfaz soportada.

Resultados

La sentencia CREATE FUNCTION (tabla) debe ejecutarse correctamente y debe crearse la función de tabla.

Ejemplo

Ejemplo 1
A continuación se muestra un ejemplo de una función de tabla SQL que se utiliza para realizar un seguimiento y auditar las actualizaciones realizadas en los datos salariales de los empleados:
CREATE FUNCTION update_salary  (updEmpNum CHAR(4), amount INTEGER) 
RETURNS TABLE (emp_lastname VARCHAR(10), 
			   emp_firstname VARCHAR(10), 
			   newSalary INTEGER) 
LANGUAGE SQL
MODIFIES SQL DATA
NO EXTERNAL ACTION
NOT DETERMINISTIC
BEGIN ATOMIC

  INSERT INTO audit_table(user, table, action, time)
    VALUES (USER, 'EMPLOYEE',
    'Salary update. Values: ' || updEmpNum || ' ' || char(amount), CURRENT_TIMESTAMP);

  RETURN (SELECT lastname, firstname, salary
    FROM FINAL TABLE(UPDATE employee SET salary = salary + amount WHERE employee.empnum = updEmpNum));

END
Esta función actualiza el salario de un empleado especificado por updEmpNum, por la cantidad especificada por cantidad, y también registra en una tabla de auditoría denominada audit_table, el usuario que ha invocado la rutina, el nombre de la tabla que se ha modificado y el tipo de modificación realizada por el usuario. Una sentencia SELECT que hace referencia a una sentencia de cambio de datos en la cláusula FROM se utiliza para recuperar los valores de fila actualizados.
Ejemplo 2
A continuación se muestra un ejemplo de una función de tabla SQL:
CREATE TABLE t1(pk INT, c1 INT, date DATE)

CREATE TABLE t1_archive LIKE T1%

CREATE FUNCTION archive_tbl_t1(ppk INT) 
  RETURNS TABLE(pk INT, c1 INT, date DATE)
LANGUAGE SQL 
MODIFIES SQL DATA 
BEGIN ATOMIC

  DECLARE c1 INT;

  DECLARE date DATE;

  SET (c1, date) = (SELECT c1, date FROM OLD TABLE(DELETE FROM t1 WHERE t1.pk = ppk));

  INSERT INTO T1_ARCHIVE VALUES (ppk, c1, date);

  RETURN VALUES (ppk, c1, date);
END%

Qué hacer a continuación

Después de crear la función de tabla, es posible que desee invocar la función para probarla.