#oracle #layout
#Oracle #макет
Вопрос:
Кто-то отправил мне по почте список с кодами, и мне нужно проверить, существует ли каждый код в таблице базы данных Oracle 10.
список выглядит примерно так:
code1, code2, code3
Конечно, для каждого элемента в списке я могу сделать
select id from my_table where code = 'code1'.
Но это заняло бы много времени и не очень элегантно. Я хотел бы представить список, подобный:
code1 present
code2 X
code3 X
code4 present
Я смутно осведомлен о инструкции oracle With, но я не уверен, как использовать ее со списком значений вместо подзапроса.
Ответ №1:
Обратное может быть достигнуто следующим образом (просмотрите все коды из базы данных и проверьте, есть ли они в списке, предоставленном вашим коллегой):
select code, case when code in ('code1', 'code2', 'code3')
then 'present'
else 'X' end
from my_table;
Если у вас это не сработает, вы можете попробовать это:
-- you need a special type for your request. Adapt dimensions if necessary
create type codes as varray(100) of varchar(100);
select c.column_value, case when exists (
select 1
from my_table m
where m.code = c.column_value
) then 'present' else 'X' end
from table(codes('code1', 'code2', 'code3')) c;
-- drop that type again
drop type codes;
Комментарии:
1. Это не вернет ‘code2 X’, если code2 отсутствует в таблице. Это делает обратное!
2. Большое спасибо за ваше объяснение, first действительно сработал для меня, но мой список был немного длиннее, чем ожидалось.