powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / как вернуть коллекцию в out-параметре функции?
8 сообщений из 8, страница 1 из 1
как вернуть коллекцию в out-параметре функции?
    #39671972
swatch.exe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Помогите, пожалуйста, разобраться, как вернуть коллекцию в out-параметре функции в pl-sql пакете?
Элементом коллекции является запись, состоящая из нескольких полей.

Создала запись, объявила коллекцию, как VARRAY типа этой записи.
TYPE rec IS RECORD (
client_id number,
status varchar2(1),
startDate date
);
TYPE clientArray IS VARRAY(1) OF rec;
Написала функцию
function GetClientState (client_id number, client_info out clientArray) return pls_integer
is
l_resultRow rec;
l_client_info clientArray;
begin
l_client_info := clientArray();
l_client_info .extend(1);
for cur in (select c.client_id, c.status, c.startDate from clients c where c.client_id = client_id )
loop
l_resultRow.client_id:= cur.client_id;
l_resultRow.status := cur.status;
l_resultRow.startDate := cur.startDate ;
l_client_info (1) := l_resultRow;
end loop;
client_info := l_client_info;
return 1;
end;

но почему-то в client_info ничего не возвращается:(
...
Рейтинг: 0 / 0
как вернуть коллекцию в out-параметре функции?
    #39671976
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
swatch.exefunction GetClientState (client_id number, client_info out clientArray) return pls_integerОдин клиент в массиве? - Где логика?
swatch.exe
Код: plsql
1.
select c.client_id, c.status, c.startDate  from clients c where c.client_id = client_id

Наивная. RTFM Resolution of Names in Static SQL Statements (FAQ)
swatch.exeно почему-то в client_info ничего не возвращается:(Тебе это только кажется.
...
Рейтинг: 0 / 0
как вернуть коллекцию в out-параметре функции?
    #39672040
swatch.exe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elicswatch.exefunction GetClientState (client_id number, client_info out clientArray) return pls_integerавторОдин клиент в массиве? - Где логика?
Не один клиент, а информация по одному клиенту.
swatch.exe
Код: plsql
1.
2.
3.
select c.client_id, c.status, c.startDate  from clients c where c.client_id = client_id

[quote автор]

Наивная. RTFM Resolution of Names in Static SQL Statements (FAQ)
Ну там входной параметр $client_id, я неправильно написала.

swatch.exeно почему-то в client_info ничего не возвращается:(Тебе это только кажется.
И зачем вообще так отвечать?! Нет желания помогать, можно просто пройти мимо. а то, вроде, ответил, но и ничего по делу не сказал:(
Я понимаю, что client_info заполняется. Вопрос в том, как вернуть это через OUT-параметр.
...
Рейтинг: 0 / 0
как вернуть коллекцию в out-параметре функции?
    #39672052
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
swatch.exeа то, вроде, ответил, но и ничего по делу не сказал:(Не надо воинствовать. 17247723
...
Рейтинг: 0 / 0
как вернуть коллекцию в out-параметре функции?
    #39672092
amakridin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день. Вот мое решение, адаптируйте под себя:

CREATE OR REPLACE TYPE obj_schema_tree AS OBJECT(
recordid varchar2(30)
, sch_name varchar2(4000)
, descr varchar2(250)
, img varchar2(100));

CREATE OR REPLACE TYPE tbl_schema_tree AS TABLE OF obj_schema_tree;


create or replace function f_get_tbl_schema_tree (parentid varchar2) return tbl_schema_tree
as return_tbl tbl_schema_tree;
qr clob;
begin
qr:='select obj_schema_tree(recordid, sch_name, descr, img) from ...'
execute immediate qr bulk collect into return_tbl using parentid;

return return_tbl;
end;
...
Рейтинг: 0 / 0
как вернуть коллекцию в out-параметре функции?
    #39672094
amakridin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и заюыл добавить вызов:
select table(f_get_tbl_schema_tree(123)) from dual;
...
Рейтинг: 0 / 0
как вернуть коллекцию в out-параметре функции?
    #39672097
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
swatch.exe,

Код: 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.
declare
TYPE rec IS RECORD (
    client_id number,
    status varchar2(1),
    startDate date
); 
TYPE clientArray IS VARRAY(100) OF rec;
--
r number;
cl_info clientArray;
--
function GetClientState (client_id number, client_info out clientArray) return pls_integer
is 
  l_resultRow rec;
  l_client_info clientArray;
  i PLS_INTEGER :=0;
begin
  l_client_info := clientArray();
  for cur in (select empno client_id,nvl2(comm,'1','0') status,hiredate startdate
              from emp where deptno = client_id )
  loop
   i:=i+1;
   l_client_info .extend;
   l_resultRow.client_id:= cur.client_id;
   l_resultRow.status := cur.status;
   l_resultRow.startDate := cur.startDate ;
   l_client_info (i) := l_resultRow; 
  end loop;
  client_info := l_client_info;
  return 1;
end; 
begin
 r:=GetClientState(10,cl_info);
 for i in 1..cl_info.count loop
   dbms_output.put_line(cl_info(i).client_id||' '||cl_info(i).status||' '||cl_info(i).startDate);
 end loop;
end;

SQL> /
7782 0 09.06.81
7839 0 17.11.81
7934 0 23.01.82

PL/SQL procedure successfully completed.

SQL>



старайтесь избегать называть одинаково колоноки в таблице и переменные/параметры (c.client_id = client_id )

зы
заполнять коллекции иногда удобно с помощью bulk collect

.....
stax
...
Рейтинг: 0 / 0
как вернуть коллекцию в out-параметре функции?
    #39672114
swatch.exe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax, спасибо! :) А ларчик просто открывался:) Получается, я просто неправильно вызывала функцию:)
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / как вернуть коллекцию в out-параметре функции?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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