|
Выборка из результата обработки данных хранимой функцией
|
|||
---|---|---|---|
#18+
Помогите разобраться с такой проблемой: нужно сделать нечто такое: select * from stored_function(param1) where .... Причем stored_function должна возвращать набор записей, полученных в результате обработки в цикле данных из открытого курсора Я разобрался до того, что можно сделать хранимую процедуру с параметром типа IN OUT cursor, которая будет присваивать параметру ссылку на открытый курсор. Далее можно обратиться к возвращаемому рекордсету из Delphi. Мне же нужно обратиться к рекордсету не из Delphi, а из select-запроса. И сам рекордсет должен быть не просто результатом операции select, а сгенерен хранимой процедурой по сложному алгоритму. Что-то такое я встречал в Interbase, когда хранимая функция возвращала по одной записи весь рекордсет, но неужели такое нельзя сделать в Oracle? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2002, 15:58 |
|
Выборка из результата обработки данных хранимой функцией
|
|||
---|---|---|---|
#18+
Короче можешь процедурой формировать Pl\SQl таблицу, данные из которой можешь брать во view и далее использвать select короче сначала выполняешь процедуру (она заполняет pl\sql таблицу (массив) в оперетивке и далее данные выбираешь во view ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2002, 16:11 |
|
Выборка из результата обработки данных хранимой функцией
|
|||
---|---|---|---|
#18+
Я работаю с 8-м ораклом, где нет temporary table Нельзя ли поподробней описать как хранимой процедурой заносить данные в массив и затем передавать во view. Причем так, чтобы несколько сессий могли это делать одновременно, не мешая друг другу? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2002, 16:46 |
|
Выборка из результата обработки данных хранимой функцией
|
|||
---|---|---|---|
#18+
plsql таблицы это и есть массивы, и кстати в 8 Оракле есть временные таблицы тут трохи гон у тебя пошел... 1) Создаш массив (plssql табилицу) потом пишеш к примеру tab_1(12).col_1:=100; все просто ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2002, 17:00 |
|
Выборка из результата обработки данных хранимой функцией
|
|||
---|---|---|---|
#18+
В теме о временных таблицах на этом форуме писалось: /* 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2002, 08:16 |
|
Выборка из результата обработки данных хранимой функцией
|
|||
---|---|---|---|
#18+
А ну может быть, забыл что у меня с 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 ; ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2002, 10:50 |
|
Выборка из результата обработки данных хранимой функцией
|
|||
---|---|---|---|
#18+
Чтобы функция возвращала набор каторый можно использовать в 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); ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2002, 09:56 |
|
|
start [/forum/topic.php?fid=52&fpage=2839&tid=1992992]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
26ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 254ms |
total: | 376ms |
0 / 0 |