powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Аналог SET для %rowtype
9 сообщений из 9, страница 1 из 1
Аналог SET для %rowtype
    #39257056
K790
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день коллеги!

Подскажите пожалуйста по сабжу, есть ли такое?
При явном указании SET вываливается PLS-00306, что и понятно.

Задача стоит произвести DISTINCT в коллекции.

Спасибо
...
Рейтинг: 0 / 0
Аналог SET для %rowtype
    #39257063
K790
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
K790,

чтобы было чуть понятнее, нужно произвести DISTINCT для test

Код: plsql
1.
2.
3.
type t_test_type is record (...);
type t_test_tab is table of t_test_type;
type t_test_info is record (test t_test_tab);



что-то не выходит каменный цветок :(
...
Рейтинг: 0 / 0
Аналог SET для %rowtype
    #39257066
Casper_ora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
K790,

Что ты пытаешься сделать?
...
Рейтинг: 0 / 0
Аналог SET для %rowtype
    #39257071
K790
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Casper_ora,

я получаю данные в этом виде, но мне возвращаются дубликаты и я хочу их схлопнуть. сам код возврата этого test править не могу, данные приходят в таком виде, как есть :(
...
Рейтинг: 0 / 0
Аналог SET для %rowtype
    #39257132
Casper_ora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
K790,

Поясни точнее откуда и в каком формате приходят данные? В текстовом формате выгрузка?
...
Рейтинг: 0 / 0
Аналог SET для %rowtype
    #39257176
K790
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Casper_ora,

накидал примерный вариант говнокода

Код: 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.
declare
type t_test_type is record (f1 number, f2 varchar2(10));
l_test_type t_test_type;
type t_test_tab is table of t_test_type;
l_test_tab t_test_tab;
type t_test_info is record (t_test t_test_tab);
l_test_info t_test_info;
procedure test_info(p_test out nocopy t_test_info) is 
  type t_refcur is ref cursor;
  c_ref t_refcur;
  l_p_test_t_test t_test_tab := t_test_tab();
  lx  number := 0;
  begin
  l_p_test_t_test := t_test_tab();
  p_test.t_test   := t_test_tab();
  open c_ref for
    select 1 f1, 'test' f2 from dual union all
    select 1 f1, 'test' f2 from dual union all
    select 2 f1, 'test2' f2 from dual; loop
    fetch c_ref bulk collect into l_p_test_t_test;
      exit when l_p_test_t_test.count = 0;
      for i in 1 ..l_p_test_t_test.count loop
        lx := nvl(p_test.t_test .last,0) + 1;
        p_test.t_test .extend;
        p_test.t_test(lx) := l_p_test_t_test(i);
        end loop;
    end loop;
  end;
begin
  test_info(l_test_info);
  for i in 1 .. l_test_info.t_test.count loop
    dbms_output.put_line(l_test_info.t_test(i).f1||' '||l_test_info.t_test(i).f2);
    end loop;
  end;  



результат:
Код: plsql
1.
2.
3.
1 test
1 test
2 test2



как мне провести DISTINCT, чтобы получилось?
Код: plsql
1.
2.
1 test
2 test2
...
Рейтинг: 0 / 0
Аналог SET для %rowtype
    #39257273
ora601
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
K790,

Создай глобал тип и делай SELECT SET(l_test_tab) INTO ...

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
create or replace type t_test_type is object (f1 number, f2 varchar2(10));
create or replace type t_test_tab is table of t_test_type;
declare
l_test_tab t_test_tab;
v1 NUMBER;
v2 VARCHAR2(100);
  begin
   SELECT t_test_type(f1,f2) BULK COLLECT INTO l_test_tab FROM (
    select 1 f1, 'test' f2 from dual union all
    select 1 f1, 'test' f2 from dual union all
    select 2 f1, 'test2' f2 from dual);
SELECT SET(l_test_tab) INTO l_test_tab FROM DUAL;

FOR i in 1..l_test_tab.count
  loop
    dbms_output.put_line(l_test_tab(i).f1||' '||l_test_tab(i).f2);
    end loop;
  end;


...
Рейтинг: 0 / 0
Аналог SET для %rowtype
    #39257286
K790
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ora601,

такой workaroud видел на камьюнике, но при добавлении подобной конструкции
Код: plsql
1.
SELECT SET(l_test_tab) INTO l_test_tab FROM DUAL;

и последующей попытке компиляции, выдает "not connected to ORACLE". Поэтому пока отложил этот вариант.

Все равно спасибо :)
...
Рейтинг: 0 / 0
Аналог SET для %rowtype
    #39257311
ora601
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
K790ora601,

такой workaroud видел на камьюнике, но при добавлении подобной конструкции
Код: plsql
1.
SELECT SET(l_test_tab) INTO l_test_tab FROM DUAL;

и последующей попытке компиляции, выдает "not connected to ORACLE". Поэтому пока отложил этот вариант.

Все равно спасибо :)

Как воркэраунд можно сначало делать дистинкт:


Код: plsql
1.
2.
3.
SELECT t_test_type(fld1,fld2) BULK COLLECT INTO l_test_tab_distinct
  FROM (
SELECT DISTINCT f1 as fld1,f2 as fld2 FROM TABLE(l_test_tab));
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Аналог SET для %rowtype
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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