powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Получить и значение и индекс из SELECT FROM TABLE(:INDEX_BY_COLLECTION)
7 сообщений из 7, страница 1 из 1
Получить и значение и индекс из SELECT FROM TABLE(:INDEX_BY_COLLECTION)
    #39646312
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно, баян, тогда прошу прощения
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
create or replace package tmp$pkg
as

type hash_map is table of varchar2(100) index by pls_integer;

procedure main;

end tmp$pkg;
/
create or replace package body tmp$pkg
as

procedure main
is
	c hash_map;
	n varchar2(100);
begin
	c(1) := 'one';
	c(3) := 'three';
	c(5) := 'five';
	select x.column_value
		into n
		from table(c) x
		where x.<что_то_вроде_COLUMN_VALUE> = 3;
	dbms_output.put_line(n=' || n);
end main;

end tmp$pkg;
/
...
Рейтинг: 0 / 0
Получить и значение и индекс из SELECT FROM TABLE(:INDEX_BY_COLLECTION)
    #39646326
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно и баян.
В чем вопрос-то был?
...
Рейтинг: 0 / 0
Получить и значение и индекс из SELECT FROM TABLE(:INDEX_BY_COLLECTION)
    #39646337
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,

как получить индекс значения из index-by коллекции в запросе?
...
Рейтинг: 0 / 0
Получить и значение и индекс из SELECT FROM TABLE(:INDEX_BY_COLLECTION)
    #39646350
Фотография Fogel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene--andrey_anonymous,

как получить индекс значения из index-by коллекции в запросе?
в твоём случае никак.
у тебя ассоциативный массив, обёртка table для nested_table и varray
ассоциативные массивы в sql не используются (по крайней мере до 11-й версии)
...
Рейтинг: 0 / 0
Получить и значение и индекс из SELECT FROM TABLE(:INDEX_BY_COLLECTION)
    #39646356
Фотография Fogel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с ассоциативным массивом получить индекс только в pl/sql
как-то так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
create or replace package body tmp$pkg as

  procedure main is
    c hash_map;
    n varchar2(100);
    i pls_integer ;
  begin
    c(1) := 'one';
    c(3) := 'three';
    c(5) := 'five';
    i := c.first;
    while ( i is not null) loop
      if c(i) = 'three' then
        n :=  c(i) ;
      dbms_output.put_line('i= '|| i ||' n=' || n);  
      end if;
      i := c.next(i);
    
    end loop;
    
  end main;

end tmp$pkg;
/

begin tmp$pkg.main; end;
...
Рейтинг: 0 / 0
Получить и значение и индекс из SELECT FROM TABLE(:INDEX_BY_COLLECTION)
    #39646385
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene--получить индекс значения из index-by коллекции в запросе?
Ассоциативные массивы не предназначены для использования в запросах.
Это чисто PL/SQL-коллекция, и подход к работе с ней иной.
В Вашем примере значения 1,2,3 - это что, хеш от "one, two, three" или где?
Тогда поиск тоже надо по хеш-значению вести - case c(hash('three')) when 'three' then 'three' else null end.
А если просто индекс - то тоже вопрос: он определяет порядок элементов в коллекции?
Если да - используйте двоичный поиск.
Нет - нафиг он вообще тогда нужен?

...если все-таки хэш-значениями являются сами "one,two,three" - то используйте index by varchar2 и поиск вида c(c.next('thre')).
Если под подходящую задачу правильно подберете логику формирования ключей и поиска - получите неплохой профит, я лично проверял :)
...
Рейтинг: 0 / 0
Получить и значение и индекс из SELECT FROM TABLE(:INDEX_BY_COLLECTION)
    #39646400
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous--Eugene--получить индекс значения из index-by коллекции в запросе?
Ассоциативные массивы не предназначены для использования в запросах.

Справедливости ради - оракель движется навстречу пожеланиям трудящихся:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
> select banner from v$version where rownum = 1
BANNER                                                                         
--------------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production     

> create or replace package dropme_p as
  type t_my_tab is table of varchar2(2000) INDEX BY PLS_INTEGER;
  procedure p;
end;

PACKAGE DROPME_P compiled

> create or replace package body dropme_p as
  procedure p is
    my_tab t_my_tab;
    my_counter integer;
  begin
  select object_name 
  bulk collect into my_tab
   from all_objects 
   where owner = 'SYS'
   ;
   select count(*) 
   into my_counter
   from table(my_tab)
   where column_value < 'F'
   ;
   dbms_output.put_line(my_counter);
  end;
end;

PACKAGE BODY DROPME_P compiled

> begin dropme_p.p; end;

anonymous block completed

1146
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Получить и значение и индекс из SELECT FROM TABLE(:INDEX_BY_COLLECTION)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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