首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DB2存储过程,什么是psm_pipe

DB2存储过程,什么是psm_pipe
EN

Stack Overflow用户
提问于 2018-10-30 14:03:18
回答 1查看 386关注 0票数 0

为什么在线DB2文档的一致性这么低?

我正在尝试创建一个返回4个值的SP,它最初是一个带有'JOIN's和'UNIONS‘等的时髦SQL语句,但最终可能是一个非常低效的SP。它仍然无法编译..!

守则如下:

代码语言:javascript
复制
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。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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。

代码语言:javascript
复制
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 @
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53066083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档