【发布时间】:2018-10-30 14:03:18
【问题描述】:
为什么在线 DB2 文档的一致性如此之低?
我正在尝试创建一个返回 4 个值的 SP,它最初是一个带有“JOIN”和“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;
我有一个又一个错误,这就是为什么我把它分解成这个疯狂的简单的东西,在我尝试 CASE 之前,我尝试了 IF(...)、IF(...)THEN 和 IF .. . 那么...
所有导致相同的错误:-> 应该是“psm_pipe”而不是“CASE......
问题 1:我在 SP 中做错了什么?
问题 2:什么是 psm_pipe,为什么 google db2 "psm_pipe" 没有出现?
各位有什么想法吗?
谢谢, 鲍勃 B.
【问题讨论】:
-
Granted = TRUE; --> SET Granted = TRUE; -
END CASE --> END CASE; -
LEAVE 语句只能在 FOR、LOOP、REPEAT 或 WHILE 循环中使用。
标签: stored-procedures db2