带变量的 DB2 LIKE 运算符

DB2 LIKE Operator with a Variable

我是 DB2 的新手,DB2 运行正在几个 IBM iSeries 机器上运行。我在编写一个存储过程时遇到了一些困难,该存储过程将 select 来自 table 的值,其中关键字段以参数的值开头。

现在在 MS SQL 服务器中我会这样写:

SELECT field FROM table WHERE fieldB like parm + '%'

所以对于我的 DB2 proc,我有:

SELECT field FROM table WHERE fieldB like parm || '%'

我不仅在 IBM 文档中发现了这种语法,而且在几个 SO 问题和答案中也发现了这种语法。所以我明白了如何将通配符连接到参数值。

不幸的是,当我 运行 我的 CREATE PROCEDURE 语句时,我收到以下错误:

[SQL0104] Token PARM was not valid. Valid tokens: FOR NOT CCSID NORMALIZED.

我什至还尝试过以下操作:

SET [*some declare variable*] = parm|| '%'

SET srch = CONCAT(parm, '%');

以及在 WHERE 子句中使用 CONCAT 函数:

WHERE fieldB like CONCAT(parm, '%');

每个都返回相同的错误。

那么我可能做错了什么?

试试 SELECT field FROM table WHERE fieldB 之类的? || '%'

我已经在我的 iSeries 上使用过它,根据 IBM 文档它应该可以工作:

https://www.ibm.com/support/knowledgecenter/SSEPGG_9.8.0/com.ibm.db2.luw.apdv.sqlpl.doc/doc/c0020295.html

应该可以正常工作...没有您的代码我无法准确判断您做错了什么...

请注意,您必须将游标显式声明为 Db2 中的 return 结果集。由于您没有使用 SELECT INTO,我假设您的 select return 有多行。

CREATE OR REPLACE PROCEDURE cwilt.myproc(IN parm char(128))
    LANGUAGE SQL
    BEGIN
        DECLARE myRS cursor with return to client for
          select table_name
          from systables
          where table_name like trim(parm) concat '%';

        open myRS;

    END;

call cwilt.myproc(char('SYP'));