无法在 HSQLDB 中设置 md5 密码:找不到例程签名
Posted
技术标签:
【中文标题】无法在 HSQLDB 中设置 md5 密码:找不到例程签名【英文标题】:Can't set md5 password in HSQLDB: routine signature not found 【发布时间】:2012-05-27 19:53:42 【问题描述】:HSQLDB 中有关 MD5 的文档有些稀缺,但我已按照以下说明启用 md5-ing 我的密码:
CREATE FUNCTION md5(VARBINARY(128))
RETURNS VARBINARY(226)
LANGUAGE JAVA
DETERMINISTIC
NO SQL
EXTERNAL NAME 'CLASSPATH:org.hsqldb.lib.MD5.digest'
现在当我尝试更新密码时:
UPDATE worker SET password = md5('pass123') WHERE wid=1
我收到以下错误:
java.sql.SQLException: routine signature not found for: PUBLIC.MD5(CHARACTER)
我对sql不太熟悉,所以我不确定我在哪里犯了错误。
【问题讨论】:
【参考方案1】:您需要一个带有字符串而不是二进制的函数签名。
CREATE FUNCTION md5(VARCHAR(128), VARCHAR(10))
RETURNS VARCHAR(256)
LANGUAGE JAVA
DETERMINISTIC
NO SQL
EXTERNAL NAME 'CLASSPATH:org.hsqldb.lib.MD5.encode'
并使用固定的编码参数调用函数:
UPDATE worker SET password = md5('pass123', 'ISO-8859-1') WHERE wid=1
【讨论】:
@fredt:有没有一种通用的方法可以通过 SQL 语句的约定来访问那些org.hsqldb.lib.**
方法?
无论类路径如何,都需要先创建一个函数才能调用静态方法。所有支持参数类型的公共静态函数都可以做成一个函数。以上是关于无法在 HSQLDB 中设置 md5 密码:找不到例程签名的主要内容,如果未能解决你的问题,请参考以下文章
无法在 ocamldebug 中设置断点:“在那里找不到任何事件。”