powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / not in (коллекция)
9 сообщений из 9, страница 1 из 1
not in (коллекция)
    #36258721
grok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
необходимо выбрать записи из таблицы у которых id отсутствуют в некоей коллекции

т.е. типа

Код: plaintext
1.
2.
select id
from tbl
where id not in (коллекция)

насколько я понял, нет стандартной возможности так делать напрямую....

а каковы альтернативы?
dynamic sql ?

хочется чтобы относительно быстро работало
по крайней мере чтобы был один запрос,
а не куча запросов в цикле
...
Рейтинг: 0 / 0
not in (коллекция)
    #36258738
ZVV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grok
насколько я понял, нет стандартной возможности так делать напрямую....

нет, неправильно поняли, насколько я понял. :)
...
Рейтинг: 0 / 0
not in (коллекция)
    #36258809
grok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZVVgrok
насколько я понял, нет стандартной возможности так делать напрямую....

нет, неправильно поняли, насколько я понял. :)

а как тогда ?
...
Рейтинг: 0 / 0
not in (коллекция)
    #36258848
collapsar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
grok,


Код: plaintext
1.
2.
select id
from tbl
where id not in table(коллекция as тип коллекции)

А так не получится ? (нужен объектный тип, либо в пакете, либо напрямую)
...
Рейтинг: 0 / 0
not in (коллекция)
    #36258850
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
create type gtype_vc30 as table of varchar2( 30 );
declare
  a_coll  gtype_vc30 := gtype_vc30();
begin
  a_coll.extend( 3 );
  a_coll( 1 ) := 'SYS';
  a_coll( 2 ) := 'SYSTEM';
  a_coll( 3 ) := 'SCOTT';
  for c1 in (
    select a.*
      from all_users a
     where username not in 
      (select column_value
         from table(cast(a_coll as gtype_vc30)))
     order by  1 
  ) loop
    dbms_output.put_line(c1.username);
  end loop;
end;
...
Рейтинг: 0 / 0
not in (коллекция)
    #36258855
grok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawish
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
create type gtype_vc30 as table of varchar2( 30 );
declare
  a_coll  gtype_vc30 := gtype_vc30();
begin
  a_coll.extend( 3 );
  a_coll( 1 ) := 'SYS';
  a_coll( 2 ) := 'SYSTEM';
  a_coll( 3 ) := 'SCOTT';
  for c1 in (
    select a.*
      from all_users a
     where username not in 
      (select column_value
         from table(cast(a_coll as gtype_vc30)))
     order by  1 
  ) loop
    dbms_output.put_line(c1.username);
  end loop;
end;


спасибо
...
Рейтинг: 0 / 0
not in (коллекция)
    #36259013
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
not in (коллекция)
    #36259059
Evgeny_Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
orawish,
Можно проще
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
create type gtype_vc30 as table of varchar2( 30 );
declare
  a_coll  gtype_vc30 := gtype_vc30();
begin
  a_coll.extend( 3 );
  a_coll( 1 ) := 'SYS';
  a_coll( 2 ) := 'SYSTEM';
  a_coll( 3 ) := 'SCOTT';
  for c1 in (
    select a.*
      from all_users a
     where  username not member of a_coll
     order by  1 
  ) loop
    dbms_output.put_line(c1.username);
  end loop;
end;
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
not in (коллекция)
    #40062750
АлеЗандр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Будьте осторожнее с "MEMBER OF <collection>"!

Эта конструкция работает на один-два порядка медленнее, чем "IN ( SELECT COLUMN_VALUE FROM TABLE(<collection>) )".

Так было с самого начала, и на последних версиях лучше не стало (только что проверил на livesql.oracle.com, 19.0)
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / not in (коллекция)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]