Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Таблицу (не массив) в процедуру. Как правильно? / 8 сообщений из 8, страница 1 из 1
25.11.2016, 15:32
    #39354662
Mikle83
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таблицу (не массив) в процедуру. Как правильно?
Пришлось временно переключится с Сайбеза на Оракл.
Обнаружил интересный механизм с передачей массива в процедуру - круто, здорово.

Но можно ли передать не массив, а именно таблицу, дабы потом пользовать ее напрямую в запросах внутри процедуры?

чего есть сейчас:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
create or replace PACKAGE Pack1
IS
  TYPE rowEntity is record (Attr1......, ...... , AttrN);
  TYPE tblEntity is table fo rowEntity;
......
  PROCEDURE Proc1 (vAnyValue ...., vTblEntity tblEntity);
END Pack1;

create or replace PACKAGE BODY Pack1
AS
procedure Proc1(vAnyValue ...., vTblEntity tblEntity) IS
  BEGIN
     ----Здесь идет обработка массива в цикле[/color]
     ----Есть же желание использовать запрос что-то типа 
     ----SELECT ..... from vTblEntity [/color]
END Proc1;
END Pack1;



Подскажите, как правильно определить таблицу для такого кейса. если это принципиально возможно?
...
Рейтинг: 0 / 0
25.11.2016, 15:32
    #39354663
Mikle83
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таблицу (не массив) в процедуру. Как правильно?
Ссылки на доки максимально приветствуются :)
...
Рейтинг: 0 / 0
25.11.2016, 15:34
    #39354664
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таблицу (не массив) в процедуру. Как правильно?
Weak Ref Cursor
...
Рейтинг: 0 / 0
25.11.2016, 15:48
    #39354674
Mikle83
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таблицу (не массив) в процедуру. Как правильно?
andrey_anonymous, штука хорошая, но насколько понимаю для поставленной задачи не совсем подходит,
т.к. подразумевает так же последовательную обработку каждой записи курсора.

Мне же нужна bulk-обработка поступившего на вход в процедуру датасета.
...
Рейтинг: 0 / 0
25.11.2016, 15:50
    #39354675
Mikle83
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таблицу (не массив) в процедуру. Как правильно?
Т.е. условно поступивший датасет на вход процедуры, далее планируется "сджойнить" с некоторой "базовой" таблицей и вывести расхождения.
Можно, конечно же, условие обернуть в цикл и для каждой записи в отдельности производить анализ "базовой" таблицы.

Но было бы удобнее (для меня, по крайней мере) сделать тривиальный джойн двух таблиц и вывести расхождения одним запросом, вместо цикла.
...
Рейтинг: 0 / 0
25.11.2016, 16:01
    #39354679
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таблицу (не массив) в процедуру. Как правильно?
Mikle83,

Код: 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.
create type dropme_type as table of number
/

create table dropme_tbl (n number)
/

create or replace procedure dropme_proc (p_tbl dropme_type) is
begin
 insert into dropme_tbl
 select *
 from table(p_tbl);
end;
/

declare
l_tbl dropme_type;
begin
 l_tbl := dropme_type();
 for i in 1..10 loop
   l_tbl.extend();
   l_tbl(l_tbl.last) := i;
  end loop;
  
  dropme_proc(l_tbl);
end;
/

select count(*) cnt
from dropme_tbl
/

drop procedure dropme_proc
/

drop table dropme_tbl
/

drop type dropme_type
/
...
Рейтинг: 0 / 0
25.11.2016, 17:57
    #39354767
Mikle83
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таблицу (не массив) в процедуру. Как правильно?
env,
спасибо! Круто!



З.Ы.: Загодочны и неисповедимы пути оракловые...
Проеразвлекался с сервером с полчаса, выхватывая ексепшен
авторcannot access rows from a non-nested table item
пока не нашел, что декларирование табличного типа должно быть обязательно на уровне схемы, но никак не внутри package...
...
Рейтинг: 0 / 0
26.11.2016, 09:07
    #39354936
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таблицу (не массив) в процедуру. Как правильно?
Mikle83пока не нашел, что декларирование табличного типа должно быть обязательно на уровне схемы, но никак не внутри package...SQL o PL/SQL-знает лишь то, что в *_procedures. Исключение - pipelined, и то лишь как синтаксический сахар.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Таблицу (не массив) в процедуру. Как правильно? / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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