oracle - 需要一个oracle函数将字符串转换为字节数组

标签 oracle oracle10g

我有一个专栏:

LOGIN_PWD  ->  RAW(256 BYTE) 

我必须使用插入查询将散列密码字符串插入此列。那么是否有任何 oracle 函数可以将字符串转换为字节,例如
INSERT INTO TABLE_NAME (LOGIN_PWD) VALUES (convert.toBytes('hashed password'));

我通过在本地机器上使用 string.getBytes() 方法使用 java 程序做到了这一点,但对于其他环境,我不能使用相同的程序需要使用查询来完成

最佳答案

如果您的要求像您所说的一样简单,那么您可以使用 UTL_RAW.CAST_TO_RAW function :

INSERT INTO TABLE_NAME (LOGIN_PWD)
VALUES (UTL_RAW.CAST_TO_RAW('hashed password'));

SQL Fiddle demo .

例如,使用 Md5 散列的纯字符串“散列密码”,即 6a25a2b265d917ea91447daa81b2506d ,表中存储的原始值是:
SELECT DUMP(LOGIN_PWD) FROM TABLE_NAME;

DUMP(LOGIN_PWD)
------------------------------------------------------------------------------------------------------------------
Typ=23 Len=32: 54,97,50,53,97,50,98,50,54,53,100,57,49,55,101,97,57,49,52,52,55,100,97,97,56,49,98,50,53,48,54,100

这与我从 getBytes() 得到的相匹配在 Java 中使用相同的散列值。

如果您出于某种原因想将其恢复为文本,您可以使用 UTL_RAW.CAST_TO_VARCHAR2 :

从 TABLE_NAME 中选择 UTL_RAW.CAST_TO_VARCHAR2(LOGIN_PWD);
UTL_RAW.CAST_TO_VARCHAR2(LOGIN_PWD)
-----------------------------------
6a25a2b265d917ea91447daa81b2506d   

关于oracle - 需要一个oracle函数将字符串转换为字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16829681/

相关文章:

sql - BETWEEN 子句与 <= AND >=

java - 使用 ojdbc6 jar 将 int 获取为十进制(22,0)

sql - 如何使用pl/sql查找连续序列

SQL生成从1到100的数字列表

sql - 删除 PL/SQL 中特定字符后的所有字符

mysql - 如何在 SQL 中计算斜率

sql - Oracle 10 中的 GRANT 问题

c# - 无法加载 DLL "OraOps10.dll"

c# - 表数据对比-Oracle

oracle - 如何安排每月 15 日后 5 个工作日的 Oracle 作业?