我的代码中有一段查询:
SELECT RAWTOHEX (DBMS_OBFUSCATION_TOOLKIT.MD5 ( input_string => 'a_text')) FROM dual;
值'a_text'被硬编码为输入字符串。 如果我需要从包含文本字段列表的表中获取此文本怎么办?
我尝试过以下方法:
SELECT Rawtohex (dbms_obfuscation_toolkit.Md5 (input_string in (SELECT textValue FROM table WHERE table_id = id))) AS HEX FROM dual;
显然会抛出:
ORA-01427:单行子查询返回多个行
希望该解决方案可以帮助某人。
答案 0 :(得分:2)
直接从表格中选择,而不从dual
中选择:
SELECT Rawtohex (dbms_obfuscation_toolkit.Md5 (input_string => t.textValue)) AS HEX
FROM your_table t
WHERE t.table_id = some_id;
您的版本获得ORA-01427的事实表明,您将获得多个值,因为table_id
不是唯一的。好吧,除了您的代码实际上抛出“ ORA-00907:缺少右括号”之外;但是如果您使用的是=>
而不是in
,则可能会得到ORA-01427 ...
在CTE中使用示例数据进行快速演示:
with your_table (table_id, textvalue) as (
select 42, 'a_text' from dual
union all select 42, 'b_text' from dual
union all select 43, 'c_text' from dual
)
SELECT Rawtohex (dbms_obfuscation_toolkit.Md5 (input_string => t.textValue)) AS HEX
FROM your_table t
WHERE t.table_id = 42;
HEX
--------------------------------
55EA1381DBC9F3CE146B55CC75B28147
CFD9FD9A2BA3FDD917E8CAB4EF644838