DB2存储过程,什么是psm_pipe



为什么在线DB2文档中的一致性如此之低?

我正在尝试创建一个返回4个值的SP,它最初是一个带有"JOIN"one_answers"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?如果你在谷歌上搜索db2"psm_pipe",为什么不出现?

有什么想法吗?

谢谢,Bob B.

您的代码片段存在语法错误。下面的代码将在Db2Linux/Unix/Windows 11.1或更高版本上编译。缩写PSM的意思是持久存储模块。

在寻求帮助时,请务必编写您的Db2服务器版本和Db2服务器操作系统(z/os、i-series、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 @

最新更新