代码之家  ›  专栏  ›  技术社区  ›  Mike

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

  •  0
  • Mike  · 技术社区  · 5 年前

    在我的代码中有这样一个问题:

    SELECT RAWTOHEX (DBMS_OBFUSCATION_TOOLKIT.MD5 ( input_string => 'a_text')) FROM dual;
    

    值“a\u 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 回复  |  直到 5 年前
        1
  •  2
  •   Alex Poole    5 年前

    直接从表中选择,而不是从 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 => 而不是 in

    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