在Oracle中作为关键字/值表示法输入=>输入的值列表

时间:2019-04-09 14:24:06

标签: oracle

我的代码中有一段查询:

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:单行子查询返回多个行

希望该解决方案可以帮助某人。

1 个答案:

答案 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