Список значений в качестве входных данных для ввода ключевого слова / значения = = в Oracle - PullRequest
0 голосов
/ 09 апреля 2019

В моем коде был следующий фрагмент запроса:

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 Ответ

2 голосов
/ 09 апреля 2019

Выберите прямо из таблицы, а не из 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...