【问题标题】:DB2 stored proc if statement string comparisonDB2 存储过程 if 语句字符串比较
【发布时间】:2018-05-23 18:06:57
【问题描述】:

我正在处理一个 DB2 存储过程,我想在其中执行以下操作:

 CREATE PROCEDURE TestProc ( IN IN_NBR CHAR(20))
 ISOLATION LEVEL CS
 VALIDATE BIND
 RESULT SETS 1

P1: BEGIN

IF ((SUBSTR(IN_NBR,1,2) != 'IO') 
    OR (SUBSTR(IN_NBR,1,2) != 'DO'))
THEN 
    SELECT *
    FROM AB.WC_TEM WC
    WHERE WC.CAT_NBR = IN_NBR
    WITH UR; 
END IF;

END P1

这甚至无法部署。

【问题讨论】:

  • 您得到的确切错误代码(sqlcode、sqlstate、message)是什么?
  • PT.TESTPROC:9:非法符号“来自”。一些可能是合法的符号是: INTO。 SQLCODE=-104, SQLSTATE
  • 我想我不能将 IF 语句与 SUBSTR 一起使用。但是,我不知道最好的方法 IF ((SUBSTR(IN_NBR,1,2) != 'IO')
  • 您的 Db2 服务器操作系统是什么(z/os、i 系列、linux/unix/windows)?
  • Db2 服务器操作系统是 z/os 。问题出在我的查询上。

标签: stored-procedures db2


【解决方案1】:

为了节省时间,请务必在寻求帮助时编写您的 Db2 服务器操作系统和 Db2 版本。答案可能取决于这些事实。

确保您的语句终止符不是默认的(在下面的示例中,我使用 @ 作为终止符),并遵循在 SQL 过程中使用游标将结果集返回给客户端或调用者的规则:

例子:

CREATE or replace PROCEDURE TestProc ( IN IN_NBR CHAR(20) )
 ISOLATION LEVEL CS
 VALIDATE BIND
 language sql
 specific TestProc
 dynamic RESULT SETS 1

BEGIN
    declare c1 cursor for SELECT * FROM AB.WC_TEM WHERE CAT_NBR = IN_NBR  with ur;

    IF ((SUBSTR(IN_NBR,1,2) != 'IO') OR (SUBSTR(IN_NBR,1,2) != 'DO'))
    THEN
        open c1;
    END IF;

END
@

【讨论】:

    猜你喜欢
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多