Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / коллекция в запросе / 10 сообщений из 10, страница 1 из 1
14.09.2017, 14:53
    #39521173
wellvk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
коллекция в запросе
Здравствуйте!
Ткните носом- не могу найти объяснений происходящему...

Код: 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.
drop table smp_tmp;
create table smp_tmp(dat date);
insert into smp_tmp
select add_months(trunc(sysdate,'year'),level-1)from dual connect by level <13;
commit;

declare 
  type am_type is table of varchar2(200) index by varchar2(100);
  v_am am_type ;
begin
v_am('01.01.2017'):='''01.01.2017'' as January';
v_am('01.02.2017'):='''01.02.2017'' as February';
v_am('01.03.2017'):='''01.03.2017'' as March';
v_am('01.04.2017'):='''01.04.2017'' as April';
v_am('01.05.2017'):='''01.05.2017'' as May';
v_am('01.06.2017'):='''01.06.2017'' as June';
v_am('01.07.2017'):='''01.07.2017'' as July';
v_am('01.08.2017'):='''01.08.2017'' as August';
v_am('01.09.2017'):='''01.09.2017'' as September';
v_am('01.10.2017'):='''01.10.2017'' as October';
v_am('01.11.2017'):='''01.11.2017'' as November';
v_am('01.12.2017'):='''01.12.2017'' as December';

for i in 
        ( 
          with tab as (select to_char(d.dat,'dd.mm.yyyy') ff , d.dat dat from smp_tmp d)
          select t.dat,t.ff,
                 --v_am(t.ff)res --not work
                 --v_am( to_char(trunc(sysdate,'month'),'dd.mm.yyyy')) work_
          from tab t
        ) 
        loop
dbms_output.put_line(i.ff);
dbms_output.put_line(v_am(i.ff)); --work

end loop;          

end;



Собственно сабж...
Спасибо!
...
Рейтинг: 0 / 0
14.09.2017, 15:12
    #39521188
Fogel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
коллекция в запросе
wellvkЗдравствуйте!
Ткните носом- не могу найти объяснений происходящему...


Код: 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.
declare 
  type am_type is table of varchar2(200) index by varchar2(100);
  v_am am_type ;
begin
v_am('01.01.2017'):='''01.01.2017'' as January';
v_am('01.02.2017'):='''01.02.2017'' as February';
v_am('01.03.2017'):='''01.03.2017'' as March';
v_am('01.04.2017'):='''01.04.2017'' as April';
v_am('01.05.2017'):='''01.05.2017'' as May';
v_am('01.06.2017'):='''01.06.2017'' as June';
v_am('01.07.2017'):='''01.07.2017'' as July';
v_am('01.08.2017'):='''01.08.2017'' as August';
v_am('01.09.2017'):='''01.09.2017'' as September';
v_am('01.10.2017'):='''01.10.2017'' as October';
v_am('01.11.2017'):='''01.11.2017'' as November';
v_am('01.12.2017'):='''01.12.2017'' as December';

for i in 
        ( 
          with tab as (select to_char(d.dat,'dd.mm.yyyy') ff , d.dat dat from smp_tmp d)
          select t.dat,t.ff,
                 --v_am(t.ff)res --not work
                 --v_am( to_char(trunc(sysdate,'month'),'dd.mm.yyyy')) work_
          from tab t
        ) 
        loop
dbms_output.put_line(i.ff);
dbms_output.put_line(v_am(i.ff)); --work

end loop;          

end;
...
Рейтинг: 0 / 0
14.09.2017, 15:15
    #39521192
--Eugene--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
коллекция в запросе
v_am(t.ff)res -- does not work due to correlated argument "t.ff"
v_am(to_char(trunc(sysdate,'month'),'dd.mm.yyyy')) works -- due to there is no correlated argument (it is equivalent to literal argument)
...
Рейтинг: 0 / 0
14.09.2017, 16:04
    #39521223
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
коллекция в запросе
wellvk
Код: plsql
1.
v_am( to_char(trunc(sysdate,'month'),'dd.mm.yyyy'))

Вычисляется PL/SQL-ем и заменяется на :B1wellvk
Код: plsql
1.
v_am(t.ff)

Не может быть вычислено ни PL/SQL-ем, ни SQL-ем - неизвестно какой элемент коллекции.
...
Рейтинг: 0 / 0
14.09.2017, 18:33
    #39521324
wellvk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
коллекция в запросе
Elic,
Я правильно понимаю, что коллекция должна быть объявлена на уровне схемы?
...
Рейтинг: 0 / 0
15.09.2017, 08:55
    #39521514
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
коллекция в запросе
wellvkЯ правильно понимаю, что коллекция должна быть объявлена на уровне схемы?Нет.
Во-первых, в SQL нет ассоциативных массивов, а тем более таких.
Во-вторых, даже если bind-ить коллекцию целиком, SQL не умеет обращаться к её элементу по индексу.

How PL/SQL Resolves Identifier Names: Resolution of Names in Static SQL Statements
...
Рейтинг: 0 / 0
17.09.2017, 15:26
    #39522364
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
коллекция в запросе
...
Рейтинг: 0 / 0
17.09.2017, 20:43
    #39522481
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
коллекция в запросе
wellvk,

а что не так?
12-ka

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
...
dbms_output.put_line(i.ff ||' - '||v_am(i.ff)); --work
...
01.01.2017 - '01.01.2017' as January
01.02.2017 - '01.02.2017' as February
01.03.2017 - '01.03.2017' as March
01.04.2017 - '01.04.2017' as April
01.05.2017 - '01.05.2017' as May
01.06.2017 - '01.06.2017' as June
01.07.2017 - '01.07.2017' as July
01.08.2017 - '01.08.2017' as August
01.09.2017 - '01.09.2017' as September
01.10.2017 - '01.10.2017' as October
01.11.2017 - '01.11.2017' as November
01.12.2017 - '01.12.2017' as December

Statement processed.

0.01 seconds




....
stax
...
Рейтинг: 0 / 0
17.09.2017, 21:00
    #39522492
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
коллекция в запросе
Staxа что не так?Станислав, снимись с ручника.
...
Рейтинг: 0 / 0
17.09.2017, 21:03
    #39522494
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
коллекция в запросе
ElicStaxа что не так?Станислав, снимись с ручника.

работает ж вроде

или вопрос в закомментированном?
--v_am(t.ff)res --not work
--v_am( to_char(trunc(sysdate,'month'),'dd.mm.yyyy')) work_

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


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