Отфильтровать недействительные идентификаторы из таблицы oracle - PullRequest
1 голос
/ 06 февраля 2020

Моя таблица

NAME

Peter
Lance
Oscar
Steve
Reddy

Входными данными для моего запроса является массив строк, скажем Peter, Bond, Steve, Smith

Мой запрос должен вернуть мне недопустимые значения моего ввода (т. Е.) Bond & Smith

Я использую Oracle 12.1.0, и odcivarchar2list не поддерживается.

Любые предложения будут высоко оценены

Ответы [ 2 ]

1 голос
/ 06 февраля 2020

Некоторые дополнительные параметры.

Данные, которые у вас есть:

SQL> select  * from test;

NAME
-----
Peter
Lance
Oscar
Steve
Reddy

Если вы не возражаете заключить имена в одинарные кавычки, тогда это может быть вариант:

SQL> select column_value result
  2    from table(sys.odcivarchar2list('Peter', 'Bond', 'Steve', 'Smith'))
  3  minus
  4  select t.name
  5    from test t;

RESULT
-----------------------------------------------------------------------------
Bond
Smith

SQL>

Если вы просто хотите ввести эти имена «как обычно», через запятую, то:

SQL> with
  2  sample (val) as
  3    (select 'Peter, Bond, Steve, Smith' from dual)
  4  select trim(regexp_substr(s.val, '[^,]+', 1, level)) result
  5    from sample s
  6    connect by level <= regexp_count(s.val, ',') + 1
  7  minus
  8  select t.name
  9    from test t;

RESULT
---------------------------------------------------------------------
Bond
Smith

SQL>
1 голос
/ 06 февраля 2020

Вы можете использовать cte:

with list_string as (
     select 'Peter' as name union all
     select 'Bond' as name union all
     select 'Steve' as name union all
     select 'Smith' as name
)
select ls.name, 'Invalid Values'
from list_string  ls
where not exists (select 1 from table t1 where t1.name = t.name);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...