Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как записать значения курсора в массив?? / 22 сообщений из 22, страница 1 из 1
14.06.2018, 14:17
    #39660780
Vadimkaaaaaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать значения курсора в массив??
Доброго всем дня!
Вожно уже есть ответ на мой вопрос, но найти я его не могу! Поэтому прошу помощи!

Есть некая таблица, пускай будет MY_TAB
объявляю тип:
type arr_type is table of varchar2(300) index by varchar2(10)
Объявляю массив:
tab arr_type;

В пакете создаем для него курсор

cursor F2_CUR is select * from MY_TAB where <любое условие>

В процедуре делаю

for f2 in F2_CUR LOOP
Вот тут и возникает вопрос, как f2 записать в массив
тоесть tab(f2.ключ) := f2.значение;
END LOOP;
...
Рейтинг: 0 / 0
14.06.2018, 14:25
    #39660788
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать значения курсора в массив??
Vadimkaaaaaatab(f2.ключ) := f2.значение;И что, именно так не работает?

http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM
...
Рейтинг: 0 / 0
14.06.2018, 14:33
    #39660792
Vadimkaaaaaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать значения курсора в массив??
ElicVadimkaaaaaatab(f2.ключ) := f2.значение;И что, именно так не работает?

http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM

Проблема в том что курсор не явный и не известны поля
...
Рейтинг: 0 / 0
14.06.2018, 14:42
    #39660798
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать значения курсора в массив??
VadimkaaaaaaПроблема в том что курсор не явный и не известны поляВ статичном курсоре нет неизвестных полей. http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM
...
Рейтинг: 0 / 0
14.06.2018, 14:42
    #39660799
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать значения курсора в массив??
Vadimkaaaaaaне известны поляuser_tab_columns
...
Рейтинг: 0 / 0
14.06.2018, 14:49
    #39660808
Vadimkaaaaaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать значения курсора в массив??
Спасибо за ответы, а на примере как нибудь можно?))
...
Рейтинг: 0 / 0
14.06.2018, 14:57
    #39660811
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать значения курсора в массив??
VadimkaaaaaaСпасибо за ответы, а на примере как нибудь можно?))
[youtube=
YouTube Video
...
Рейтинг: 0 / 0
14.06.2018, 15:06
    #39660816
Vadimkaaaaaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать значения курсора в массив??
Как еще объяснить??
в F2 есть какие то значения к примеру:
f2.a1=2, f2.dt_reg='10-11-2018', user_add= и т.д.

мне нужно плучить массив
tab('A1')=2,tab('DT_REG')='10-11-2018',tab('USER_ADD')='user'
...
Рейтинг: 0 / 0
14.06.2018, 15:21
    #39660824
Vadimkaaaaaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать значения курсора в массив??
сейчас делается по dbms_sql

for f2 in f2_cur loop
select:='select * from my_tab where rowid='||f2.rowid;
c1:=dbms_sql.open_cursor;
dbms_sql.parse(c1,select,dbms_sql.native);
dbms_sql.describe_columns(c1,fcolcnt,fcols);
for i in 1..fcolcnt
loop
dbms_sql.define_column(c1,i,fvalue,32000);
end loop;
dbms_sql.execute_and_fetch(c1,exact=>true);
for i in 1 .. fcolcnt
dbms_sql.column_value(c1,i,fvalue);
tab(fcols(i).col_name):=fvalue;
end loop;
dbms_sql.close_cursor(c1);

Получаю все что нужно, но меня смущает лишнее обращение к базе через rowid
...
Рейтинг: 0 / 0
14.06.2018, 15:30
    #39660829
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать значения курсора в массив??
Vadimkaaaaaa,
если в выборке больше одной записи, то как "массив" будете заполнять?


.....
stax
...
Рейтинг: 0 / 0
14.06.2018, 15:36
    #39660837
Vadimkaaaaaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать значения курсора в массив??
Stax,

в каком случае? если через rowid разве может несколько выборок?
...
Рейтинг: 0 / 0
14.06.2018, 15:45
    #39660841
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать значения курсора в массив??
Vadimkaaaaaaсейчас делается по dbms_sql

for f2 in f2_cur loop
select:='select * from my_tab where rowid='||f2.rowid;У барина руки отвалятся написать явно?
Код: plsql
1.
2.
3.
tab('A1') := f2.a1;
tab('DT_REG') := f2.dt_reg;
…
...
Рейтинг: 0 / 0
14.06.2018, 15:48
    #39660845
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать значения курсора в массив??
VadimkaaaaaaStax,

в каком случае? если через rowid разве может несколько выборок?

for f2 in f2_cur loop вернет больше одной записи

зы
раз Вы взялись за dbms_sql, то сразу и работайте с f2_cur (без ... where rowid ...)

.....
stax
...
Рейтинг: 0 / 0
14.06.2018, 16:07
    #39660853
Vadimkaaaaaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать значения курсора в массив??
Stax,

вот я и не могу понять куда засунуть f2_cur или f2
...
Рейтинг: 0 / 0
14.06.2018, 16:51
    #39660882
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать значения курсора в массив??
VadimkaaaaaaStax,

вот я и не могу понять куда засунуть f2_cur или f2
а я не могу понять как Вы собираетесь заполнять arr_type если курсор вернет более одной строки

зы
гляньте

TO_CURSOR_NUMBER
TO_REFCURSOR

.....
stax
...
Рейтинг: 0 / 0
14.06.2018, 17:43
    #39660906
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать значения курсора в массив??
Vadimkaaaaaa,

Код: 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.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
declare
 type arr_type is table of varchar2(300) index by varchar2(30);
 tab 		arr_type;
 F2_CUR 	sys_refcursor;
 C1 		number;
 fcolcnt 	INTEGER;
 fcols 		DBMS_SQL.DESC_TAB;
 fvalue 	varchar2(32000);
procedure print_tab(rec_tab arr_type) as
  col_ch varchar2(30);
begin 
  col_ch := rec_tab.first;
    LOOP
      dbms_output.put(col_ch||'='||rec_tab(col_ch)||' ');
      col_ch := rec_tab.next(col_ch);
      EXIT WHEN (col_ch IS NULL);
    END LOOP;
    dbms_output.put_line('');
end; 
begin
 null;
 open f2_cur for select * from dept; --my_table
 C1:= DBMS_SQL.TO_CURSOR_NUMBER(f2_cur);
 dbms_sql.describe_columns(c1,fcolcnt,fcols);
 for i in 1..fcolcnt loop
   dbms_sql.define_column(c1,i,fvalue,32000);
 end loop;
 LOOP 
  IF DBMS_SQL.FETCH_ROWS(C1)>0 THEN 
   for i in 1 .. fcolcnt loop
    dbms_sql.column_value(c1,i,fvalue);
    tab(fcols(i).col_name):=fvalue;     null;
   end loop;
    print_tab(tab);
   ELSE 
        EXIT; 
   END IF; 
END LOOP; 
 DBMS_SQL.CLOSE_CURSOR(C1);
end;
/
SQL> /
DEPTNO=10 DNAME=ACCOUNTING LOC=NEW YORK
DEPTNO=20 DNAME=RESEARCH LOC=DALLAS
DEPTNO=30 DNAME=SALES LOC=CHICAGO
DEPTNO=40 DNAME=OPERATIONS LOC=BOSTON

PL/SQL procedure successfully completed.
...
Рейтинг: 0 / 0
15.06.2018, 07:03
    #39661025
Vadimkaaaaaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать значения курсора в массив??
Stax,

Спасибо, то что надо!!!
...
Рейтинг: 0 / 0
15.06.2018, 11:49
    #39661185
blkangel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать значения курсора в массив??
А так нельзя разве?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
declare
    type r_my_table is table of my_table%rowtype;
     t_my_table   r_my_table;
Begin
    select
        *
    bulk collect into
        t_my_table
    from my_table
    where rownum<10;
End;
/
...
Рейтинг: 0 / 0
15.06.2018, 12:28
    #39661212
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать значения курсора в массив??
blkangel,

можно/надо но

у него
type arr_type is table of varchar2(300) index by varchar2(10)

імхо, из-за того что структура неизвестна, напр на вход курсор F2_CUR

.....
stax
...
Рейтинг: 0 / 0
15.06.2018, 12:44
    #39661223
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать значения курсора в массив??
Staxно у него
type arr_type is table of varchar2(300) index by varchar2(10)У него также не было и курсорной переменной.
Staxімхо, из-за того что структура неизвестна, напр на вход курсор F2_CURВ статичном коде - известна.
...
Рейтинг: 0 / 0
15.06.2018, 12:56
    #39661233
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать значения курсора в массив??
ElicВ статичном коде - известна.
не совсем, напр добавили новые поля

.....
stax
...
Рейтинг: 0 / 0
15.06.2018, 13:01
    #39661237
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как записать значения курсора в массив??
StaxElicВ статичном коде - известна.не совсем, напр добавили новые поляЯ не стану тебя разубеждать.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как записать значения курсора в массив?? / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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