powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Таблицу (не массив) в процедуру. Как правильно?
8 сообщений из 8, страница 1 из 1
Таблицу (не массив) в процедуру. Как правильно?
    #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
Таблицу (не массив) в процедуру. Как правильно?
    #39354663
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ссылки на доки максимально приветствуются :)
...
Рейтинг: 0 / 0
Таблицу (не массив) в процедуру. Как правильно?
    #39354664
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Weak Ref Cursor
...
Рейтинг: 0 / 0
Таблицу (не массив) в процедуру. Как правильно?
    #39354674
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous, штука хорошая, но насколько понимаю для поставленной задачи не совсем подходит,
т.к. подразумевает так же последовательную обработку каждой записи курсора.

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

Но было бы удобнее (для меня, по крайней мере) сделать тривиальный джойн двух таблиц и вывести расхождения одним запросом, вместо цикла.
...
Рейтинг: 0 / 0
Таблицу (не массив) в процедуру. Как правильно?
    #39354679
Фотография 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
Таблицу (не массив) в процедуру. Как правильно?
    #39354767
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env,
спасибо! Круто!



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


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