module db2 user-defined-functions db2-luw

module - ¿Cómo crear una función definida por el usuario que devuelve una tabla en un módulo DB2?



user-defined-functions db2-luw (0)

Estoy intentando crear una función definida por el usuario que devuelva una tabla en DB2. Esto es lo que tengo hasta ahora.

Esta es una tabla que uso:

CREATE TABLE "CORPDATA"."EMPLOYEE" ( "EMPNO" CHAR(6) NOT NULL, "FIRSTNME" VARCHAR(12) NOT NULL, "MIDINIT" CHAR(1) NOT NULL, "LASTNAME" VARCHAR(15) NOT NULL, "WORKDEPT" CHAR(3), "PHONENO" CHAR(4), "HIREDATE" DATE, "JOB" CHAR(8), "EDLEVEL" SMALLINT NOT NULL, "SEX" CHAR(1), "BIRTHDATE" DATE, "SALARY" DECIMAL(9 , 2), "BONUS" DECIMAL(9 , 2), "COMM" DECIMAL(9 , 2) ); ALTER TABLE "CORPDATA"."EMPLOYEE" ADD CONSTRAINT "PK_EMPLOYEE" PRIMARY KEY ("EMPNO");

Esta es una función definida por el usuario que devuelve una tabla (que funciona bien):

CREATE OR REPLACE FUNCTION "CORPDATA"."DEPTEMPLOYEES" (DEPTNO CHAR(3)) RETURNS TABLE (EMPNO CHAR(6), LASTNAME VARCHAR(15), FIRSTNAME VARCHAR(12)) LANGUAGE SQL READS SQL DATA NO EXTERNAL ACTION DETERMINISTIC BEGIN ATOMIC RETURN SELECT EMPNO, LASTNAME, FIRSTNME FROM CORPDATA.EMPLOYEE WHERE WORKDEPT = "DEPTEMPLOYEES".DEPTNO; END

Este es un cuánto pude obtener con el módulo:

CREATE MODULE CORPDATA.MODULE1 ALTER MODULE CORPDATA.MODULE1 PUBLISH FUNCTION DEPTEMPLOYEES2 (DEPTNO CHAR(3)) RETURNS TABLE (EMPNO CHAR(6), LASTNAME VARCHAR(15), FIRSTNAME VARCHAR(12))

Cualquier intento de agregar una función a un módulo falló con varios errores. Aquí está la información de mi versión de DB2: Servidor de base de datos = DB2 / LINUXX8664 11.1.2.2 Esta es una instalación de Express-C en Redhat.

Cuando intento esto, obtengo SQL0628N Están presentes palabras clave múltiples o conflictivas que involucran la cláusula "DEVOLUCIONES". NÚMERO DE LÍNEA = 16. SQLSTATE = 42613

ALTER MODULE corpdata.module1 ADD FUNCTION DEPTEMPLOYEES (DEPTNO CHAR(3)) RETURNS TABLE (EMPNO CHAR(6), LASTNAME VARCHAR(15), FIRSTNAME VARCHAR(12)) LANGUAGE SQL READS SQL DATA NO EXTERNAL ACTION DETERMINISTIC BEGIN ATOMIC RETURN SELECT EMPNO, LASTNAME, FIRSTNME FROM CORPDATA.EMPLOYEE WHERE WORKDEPT = "DEPTEMPLOYEES".DEPTNO; END

Cuando intento esto (cláusula RETURNS eliminada), obtengo SQL0491N La sentencia CREATE FUNCTION o ALTER MODULE utilizada para definir "CORPDATA.MODULE1.DEPTEMPLOYEES" debe tener una cláusula RETURNS, y una de: la cláusula EXTERNAL (con otras palabras clave requeridas); un cuerpo de función SQL; o la cláusula SOURCE. LINE NUMBER = 8. SQLSTATE = 42601

ALTER MODULE corpdata.module1 ADD FUNCTION DEPTEMPLOYEES (DEPTNO CHAR(3)) LANGUAGE SQL READS SQL DATA NO EXTERNAL ACTION DETERMINISTIC BEGIN ATOMIC RETURN SELECT EMPNO, LASTNAME, FIRSTNME FROM CORPDATA.EMPLOYEE WHERE WORKDEPT = "DEPTEMPLOYEES".DEPTNO; END

Cuando pruebo esto (eliminado BEGIN ATOMIC), obtengo SQL0104N Se encontró un token inesperado "SELECT" después de "INISTIC RETURN". Los tokens esperados pueden incluir: "(". LINE NUMBER = 9. SQLSTATE = 42601 :) Sí, dice "INISTIC".

ALTER MODULE corpdata.module1 ADD FUNCTION DEPTEMPLOYEES (DEPTNO CHAR(3)) LANGUAGE SQL READS SQL DATA NO EXTERNAL ACTION DETERMINISTIC RETURN SELECT EMPNO, LASTNAME, FIRSTNME FROM CORPDATA.EMPLOYEE WHERE WORKDEPT = "DEPTEMPLOYEES".DEPTNO