在 DB2 中为 table 生成散列值时出错

Error in generating a hashed value for a table in DB2

我使用以下语句生成 table 的散列值。

select ACTNO,HASH_SHA1(concat(ACTNO,ACTKWD,ACTDESC)) from ACT order by ACTNO

其中 ACTNO(主键)- SMALLINT,ACTKWD - CHAR,ACTDESC - VARCHAR

但是当我尝试执行此语句时出现错误。

Error:ibm_db_dbi::ProgrammingError: SQLNumResultCols failed: [IBM][CLI Driver][DB2/NT64] SQL0440N  No authorized routine named "CONCAT" of type "FUNCTION" having compatible arguments was found.  SQLSTATE=42884\r SQLCODE=-440

谁能帮我解决这个错误

当前版本的 Db2-LUW 提供了一个名为 HASH 的函数。 要使用 SHA1 算法,请为算法参数指定参数 1。你应该考虑更强的算法。

CONCAT() 函数只接受两个参数,但您给它三个,所以 Db2 会抛出异常(没有这样的函数)。在将非字符列转换为 varchar.

后,使用连接运算符 ||

如果您的 ACTKWD 和 ACTDESC 列允许 NULL,请使用 COALESCE()。

Db2-LUW 示例:

select actno, hash(varchar(actno)||coalesce(actkwd,'')||coalesce(actdesc,''),1) from act