带变量的 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 文档它应该可以工作:
应该可以正常工作...没有您的代码我无法准确判断您做错了什么...
请注意,您必须将游标显式声明为 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'));
我是 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 文档它应该可以工作:
应该可以正常工作...没有您的代码我无法准确判断您做错了什么...
请注意,您必须将游标显式声明为 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'));