Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / not in (коллекция) / 9 сообщений из 9, страница 1 из 1
19.10.2009, 10:31
    #36258721
grok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
not in (коллекция)
необходимо выбрать записи из таблицы у которых id отсутствуют в некоей коллекции

т.е. типа

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

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

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

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

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

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

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


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

А так не получится ? (нужен объектный тип, либо в пакете, либо напрямую)
...
Рейтинг: 0 / 0
19.10.2009, 11:11
    #36258850
orawish
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
not in (коллекция)
Код: 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
19.10.2009, 11:12
    #36258855
grok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
not in (коллекция)
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
19.10.2009, 12:01
    #36259013
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
not in (коллекция)
...
Рейтинг: 0 / 0
19.10.2009, 12:15
    #36259059
Evgeny_Z
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
not in (коллекция)
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
Период между сообщениями больше года.
15.04.2021, 13:40
    #40062750
АлеЗандр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
not in (коллекция)
Будьте осторожнее с "MEMBER OF <collection>"!

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

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


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