powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как записать значения курсора в массив??
22 сообщений из 22, страница 1 из 1
Как записать значения курсора в массив??
    #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
Как записать значения курсора в массив??
    #39660788
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadimkaaaaaatab(f2.ключ) := f2.значение;И что, именно так не работает?

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

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

Проблема в том что курсор не явный и не известны поля
...
Рейтинг: 0 / 0
Как записать значения курсора в массив??
    #39660798
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VadimkaaaaaaПроблема в том что курсор не явный и не известны поляВ статичном курсоре нет неизвестных полей. http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM
...
Рейтинг: 0 / 0
Как записать значения курсора в массив??
    #39660799
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadimkaaaaaaне известны поляuser_tab_columns
...
Рейтинг: 0 / 0
Как записать значения курсора в массив??
    #39660808
Vadimkaaaaaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответы, а на примере как нибудь можно?))
...
Рейтинг: 0 / 0
Как записать значения курсора в массив??
    #39660811
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VadimkaaaaaaСпасибо за ответы, а на примере как нибудь можно?))
[youtube=
YouTube Video
...
Рейтинг: 0 / 0
Как записать значения курсора в массив??
    #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
Как записать значения курсора в массив??
    #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
Как записать значения курсора в массив??
    #39660829
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadimkaaaaaa,
если в выборке больше одной записи, то как "массив" будете заполнять?


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

в каком случае? если через rowid разве может несколько выборок?
...
Рейтинг: 0 / 0
Как записать значения курсора в массив??
    #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
Как записать значения курсора в массив??
    #39660845
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VadimkaaaaaaStax,

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

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

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

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

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

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

зы
гляньте

TO_CURSOR_NUMBER
TO_REFCURSOR

.....
stax
...
Рейтинг: 0 / 0
Как записать значения курсора в массив??
    #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
Как записать значения курсора в массив??
    #39661025
Vadimkaaaaaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,

Спасибо, то что надо!!!
...
Рейтинг: 0 / 0
Как записать значения курсора в массив??
    #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
Как записать значения курсора в массив??
    #39661212
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blkangel,

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

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

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

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

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


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