为什么在线DB2文档的一致性这么低?
我正在尝试创建一个返回4个值的SP,它最初是一个带有'JOIN's和'UNIONS‘等的时髦SQL语句,但最终可能是一个非常低效的SP。它仍然无法编译..!
守则如下:
CREATE PROCEDURE Lex.LV_LogIn (
-- Optional: input and output parameters
-- { parameter-name } [IN | OUT | IN OUT] { data-type },
IN LogIn VARCHAR(45),
OUT RoleType BIGINT,
OUT RoleDescription VARCHAR(45),
OUT EmpName VARCHAR(45),
OUT Granted BOOL
)
LANGUAGE SQL
BEGIN
DECLARE empid BIGINT DEFAULT 0;
DECLARE usrid BIGINT DEFAULT 0;
SET RoleType = 0;
SET RoleDescription = '';
SET Granted = FALSE;
SELECT "idCustEmployees", "idCustUserIds" INTO empid, usrid FROM LEX.CUSTUSERIDS WHERE "SourceType" = 'LexView' AND "LogIn" = LogIn;
SELECT "idRoles" INTO RoleType FROM LEX.IDS2ROLES WHERE "idCustUserIds" = usrid;
CASE
WHEN RoleType > 0 THEN
Granted = TRUE;
SELECT "Description" INTO RoleDescription FROM LEX.ROLES WHERE "idRoles" = RoleType;
SELECT "FullName_C" INTO EmpName FROM LEX.CUSTEMPLOYEES WHERE "idCustEmployees" = empid;
ELSE
LEAVE;
END CASE
END @
GRANT EXECUTE ON PROCEDURE TO USER xxxxxxxxxx;我有一个又一个错误,这就是为什么我把它分解成这个疯狂的简单的事情,在我尝试之前,我尝试了IF (.),IF(.)然后,如果.然后..。
所有结果都会导致相同的错误:-> "psm_pipe“而不是”CASE“.
问题1:我在SP中做错了什么?
问题2: psm_pipe是什么,如果你搜索db2的"psm_pipe“,为什么没有出现?
伙计们有什么想法吗?
谢谢你鲍勃·B。
发布于 2018-10-30 14:23:47
您的代码片段有语法错误。下面的代码将在版本11.1或更高的Db2 Linux/Unix/Windows上编译。缩写PSM的意思是持久存储模块。
在请求帮助时,始终编写DB2-服务器版本和DB2-服务器操作系统(z/os、i系列、linux/unix/windows),因为每个平台和版本的答案各不相同。
当您有语法错误时,始终要写出确切的错误号( SQLCODE和/或SQLSTATE)和消息,对于搜索来说,有意义的是sqlcode/sqlstate。
CREATE PROCEDURE Lex.LV_LogIn (
IN LogIn VARCHAR(45),
OUT RoleType BIGINT,
OUT RoleDescription VARCHAR(45),
OUT EmpName VARCHAR(45),
OUT Granted BOOLEAN
)
LANGUAGE SQL
specific lv_login
BEGIN
DECLARE empid BIGINT DEFAULT 0;
DECLARE usrid BIGINT DEFAULT 0;
SET RoleType = 0;
SET RoleDescription = '';
SET Granted = FALSE;
SELECT "idCustEmployees", "idCustUserIds"
INTO empid, usrid
FROM LEX.CUSTUSERIDS
WHERE "SourceType" = 'LexView'
AND "LogIn" = LogIn;
SELECT "idRoles" INTO RoleType
FROM LEX.IDS2ROLES
WHERE "idCustUserIds" = usrid;
IF RoleType > 0 THEN
set Granted = TRUE;
SELECT "Description"
INTO RoleDescription
FROM LEX.ROLES
WHERE "idRoles" = RoleType;
SELECT "FullName_C"
INTO EmpName
FROM LEX.CUSTEMPLOYEES
WHERE "idCustEmployees" = empid;
END IF;
END @https://stackoverflow.com/questions/53066083
复制相似问题