我是一个有用的助手,可以为您进行文本翻译。以下是您需要翻译的内容:
任何尝试将函数添加到模块中的操作都会失败,并出现各种错误。以下是我的DB2版本信息: 数据库服务器 = DB2/LINUXX8664 11.1.2.2 这是在Redhat下进行的Express-C安装。
尝试这样做时,我得到了以下错误: SQL0628N 存在涉及“RETURNS”子句的多个或冲突的关键字。行号=16。 SQLSTATE=42613
我想创建一个在DB2中返回表格的用户定义函数。这是我目前所拥有的:
这是我使用的表格:
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");
这是一个用户定义的函数,它返回一个表格(目前正常工作):
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
这是我使用该模块时能够达到的最远进展:
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))
任何尝试将函数添加到模块中的操作都会失败,并出现各种错误。以下是我的DB2版本信息: 数据库服务器 = DB2/LINUXX8664 11.1.2.2 这是在Redhat下进行的Express-C安装。
尝试这样做时,我得到了以下错误: SQL0628N 存在涉及“RETURNS”子句的多个或冲突的关键字。行号=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
当我尝试这样做(删除RETURNS子句),我会得到SQL0491N错误,即定义"CORPDATA.MODULE1.DEPTEMPLOYEES"的CREATE FUNCTION或ALTER MODULE语句必须有一个RETURNS子句,并且其中之一是:EXTERNAL子句(带有其他必需关键字);一个SQL函数体;或SOURCE子句。行号=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
当我尝试这样做(删除BEGIN ATOMIC),我遇到了SQL0104N错误,提示意外的标记“SELECT”在“INISTIC RETURN”之后。 期望的标记可能包括: “(”。行号为9。SQLSTATE=42601。:) 是的,它确实是写成了“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
begin atomic
);最后一次失败是因为缺少returns
子句。 - mustaccio