powered by simpleCommunicator - 2.0.44     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Выборка из результата обработки данных хранимой функцией
7 сообщений из 7, страница 1 из 1
Выборка из результата обработки данных хранимой функцией
    #32055206
Serge N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите разобраться с такой проблемой:

нужно сделать нечто такое:
select * from stored_function(param1) where ....

Причем stored_function должна возвращать набор записей, полученных в результате обработки в цикле данных из открытого курсора

Я разобрался до того, что можно сделать хранимую процедуру с параметром типа IN OUT cursor, которая будет присваивать параметру ссылку на открытый курсор. Далее можно обратиться к возвращаемому рекордсету из Delphi.

Мне же нужно обратиться к рекордсету не из Delphi, а из select-запроса. И сам рекордсет должен быть не просто результатом операции select, а сгенерен хранимой процедурой по сложному алгоритму.

Что-то такое я встречал в Interbase, когда хранимая функция возвращала по одной записи весь рекордсет, но неужели такое нельзя сделать в Oracle?
...
Рейтинг: 0 / 0
Выборка из результата обработки данных хранимой функцией
    #32055213
profi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Короче можешь процедурой формировать Pl\SQl таблицу, данные из которой можешь брать во view и далее использвать select

короче
сначала выполняешь процедуру
(она заполняет pl\sql таблицу (массив) в оперетивке
и далее данные выбираешь во view
...
Рейтинг: 0 / 0
Выборка из результата обработки данных хранимой функцией
    #32055247
Serge N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я работаю с 8-м ораклом, где нет temporary table
Нельзя ли поподробней описать как хранимой процедурой заносить данные в массив и затем передавать во view.
Причем так, чтобы несколько сессий могли это делать одновременно, не мешая друг другу?
...
Рейтинг: 0 / 0
Выборка из результата обработки данных хранимой функцией
    #32055259
profi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
plsql таблицы это и есть массивы, и кстати в 8 Оракле есть временные таблицы тут трохи гон у тебя пошел...

1) Создаш массив (plssql табилицу)
потом пишеш к примеру
tab_1(12).col_1:=100;

все просто
...
Рейтинг: 0 / 0
Выборка из результата обработки данных хранимой функцией
    #32055361
Serge N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В теме о временных таблицах на этом форуме писалось:

/*
Temporary tables were added with Oracle8i. There are two types of temporary tables, GLOBAL TEMPORARY and TEMPORARY.
GLOBAL TEMPORARY table is one whose data is visible to all sessions
TEMPORARY table has contents only visible to the session that is using it
.
.
CREATE GLOBAL TEMPORARY TABLE...etc..
*/

У меня Oracle 8.0.3
И действительно на попытку выполнить Create global temporary table выдается сообщение - ошибка в sql-выражении. Может быть массив - это что-то другое?

Нельзя ли поподробней описать, как создавать массив и затем переносить из него данные во view.
Лучше всего было бы привести пример на PL/SQL
...
Рейтинг: 0 / 0
Выборка из результата обработки данных хранимой функцией
    #32055393
oracle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ну может быть, забыл что у меня с 8.1.6 такая борода пошла ...
Короче вот тебе пример, все поймешь из него, если нет то сбрасывай на mail

declare
TYPE break_type IS RECORD (
col_2 VARCHAR2 (200),
col_3 NUMBER,
col_1 NUMBER,
col_5 VARCHAR2 (200),
col_4 NUMBER,
col_6 NUMBER,
col_a NUMBER,
col_b VARCHAR2 (200));

TYPE t_tb_break_type IS TABLE OF break_type
INDEX BY BINARY_INTEGER;

tab_1 t_tb_break_type;
begin
for l_x_val in 1..200
loop
tab_1(l_x_val).col_1:=l_x_val;
end loop;
end ;
...
Рейтинг: 0 / 0
Выборка из результата обработки данных хранимой функцией
    #32055705
Velikanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чтобы функция возвращала набор каторый можно использовать в SQL запросе зделать можно.
1)Создай тип объекта с атребутоми каторые нужно возвращать в запросе.

create or replace type t_object as object
(id number,
name varchar2(50)
)

2)Создай тип вложенной таблицы для данного типа

create or replace type t_object_arr as table of t_object;

3)Создай функцию возврашающую тип вложенной таблицы

create or replace function ssss return t_object_arr
as
arr t_object_arr:=t_object_arr();
begin
for I in 1..10 loop
arr.extend;
arr(I):=t_object(I,To_Char(I));
end loop;
return arr;
end;

4)При вытаскивании преобразуй результат функции в таблицу

select * from Table(ssss);
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Выборка из результата обработки данных хранимой функцией
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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