我是DB2的新手,DB2在几个IBM iSeries机器上运行。我在编写一个存储过程时遇到一些困难,该过程将从键字段以参数值开头的表中选择值。
现在在MS SQL Server中,我会把它写成:
SELECT field FROM table WHERE fieldB like parm + '%'
因此,对于我的 DB2 进程,我有:
SELECT field FROM table WHERE fieldB like parm || '%'
我不仅在 IBM 文档中找到了这种语法,而且在几个 SO 问题和答案中也发现了这种语法。所以我了解如何将通配符连接到参数值。
不幸的是,当我运行我的创建过程语句时,我收到以下错误:
[SQL0104] 令牌 PARM 无效。有效令牌:用于未规范化 CCSID。
我什至也尝试过执行以下操作:
SET [*some declare variable*] = parm|| '%'
和
SET srch = CONCAT(parm, '%');
以及在 WHERE 子句中使用 CONCAT 函数:
WHERE fieldB like CONCAT(parm, '%');
每个都返回相同的错误。
那么我可能做错了什么?
应该工作正常...没有你的代码,我无法确切地说出你做错了什么......
请注意,您必须显式声明游标才能返回 Db2 中设置的结果。 由于您没有使用 SELECT INTO,因此我假设您的选择返回多行。
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'));
尝试从表中选择字段 其中字段 B 喜欢 ? ||'%'
我已经在我的iSeries上使用了它,它应该根据IBM文档工作:
https://www.ibm.com/support/knowledgecenter/SSEPGG_9.8.0/com.ibm.db2.luw.apdv.sqlpl.doc/doc/c0020295.html