powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / возвращаемый тип данных в pipelined function
25 сообщений из 51, страница 1 из 3
возвращаемый тип данных в pipelined function
    #36139683
Roxen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Есть несколько pipelined functions (show_table1, show_table2 и т д.), которые возвращают тип TYPE CP_T IS TABLE OF CP_CUR%ROWTYPE где CP_CUR - это курсор содержащий запрос к определенной таблице. Хочу сделать pipelined функцию, которой буду передавать название таблицы, а она будет вызывать уже ту pipelined ф-цию, которая возвращает из той таблички данные.

Нужно следующиее:
Код: plaintext
1.
2.
3.
4.
5.
6.
create or replace
FUNCTION f(v_tab_name VARCHAR2) RETURN ??? PIPELINED IS 
BEGIN
-- смотрим какое название таблицы передали и вызываем нужную ф-цию --
....
END;

Только вот какой тип данных будет возвращать??? Функции то вызываемые на разных курсорах основаны.
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #36139689
Jannny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чего-то Вы такого хотите...
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #36139695
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дык начинающих программистов завсегда тянет на универсальность :)
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #36139807
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roxen,

это Вы решили собственный вариант оператора SELECT сделать? Чтобы имя таблицы в функцию передавать, а не указывать во FROM...
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #36139889
Roxen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
suPPLerRoxen,

это Вы решили собственный вариант оператора SELECT сделать? Чтобы имя таблицы в функцию передавать, а не указывать во FROM...

Мне не нужен SELECT. От селектов я ухожу, т.к. при изменении таблиц летят приложения на них постороенные. Вот я и "зашиваю" выборку в функцию. Тем более там селект с использованием пяти таблиц.

Просто вместо того чтобы давать разработчикам приложений кучу функций для выборки из разных таблиц я хочу дать ОДНУ, где только нужно будет указать название таблицы.
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #36139997
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RoxenМне не нужен SELECT. От селектов я ухожу, т.к. при изменении таблиц летят приложения на них постороенные.

... Как страшно жить! (с) А. И. Куприн.

И куда летят эти приложения? Там в них случайно не SELECT * FROM ... используется?

Если уж Вы так часто меняете таблицы и не хотите напрягать разработчиков приложений, то используйте представления. Изменилась таблица - изменилось и представление. А приложение об этом и не узнало...
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #36140204
p
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
p
Гость
Может возвращать из функции курсор? Мы именно так и делаем. И приложению вовсе не надо знать имена таблиц. По-моему у Тома Кайта на эту тему написано хорошо.
что-то вроде

case p_table_code
when 1 then
open p_cursor as
select ... from table_1;
when 2 then
open p_cursor as
select ... from table_2;
....

С точки зрения БД возвращать курсоры намного лучше чем в приложении селектить из пипилизированных функций.
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #36140268
Lecter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roxen,

То что Вы хотите не реализуемо нормальными методами. БД это Вам не ООП с расследованиями и типом данных VARIANT :) она( БД ) не для этих целей.
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #36140272
Lecter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
p
С точки зрения БД возвращать курсоры намного лучше чем в приложении селектить из пипилизированных функций.
Это чем же лучше? А чем хуже( или внезапно ВСЕМ лучше )? И в каких ситуйовинах. Где исследования? Где факты? Где лулзы в конце концов?!
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #36140514
AnyDataSet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ваи нужно использовать AnyDataSet табличные функции, те функции которые определяют структуру возвращаемого курсора в run-time
Вот хорошая статья где описывается этот метод

method 4 dynamic sql in pl/sql
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #36140521
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnyDataSetВаи нужно использовать AnyDataSet табличные функции, те функции которые определяют структуру возвращаемого курсора в run-time
Вот хорошая статья где описывается этот метод

method 4 dynamic sql in pl/sql

вот только вот вас (, AnyDataSet) топикстартеру и не хватало для счастья ,
как только запросы из своей прикладнухи доповыкинет

хотя,.. какой вопрос-такой ответ..
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #36140571
AnyDataset
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to orawish

Я чо-то тебя не понял:

прозвучал конкретный вопрос
получен чисто конкретный ответ

В чем проблема ?
:-)
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #36154666
Roxen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Рада что нашлись люди, которые поняли что я имею ввиду.

AnyDataset ,
Огромное спасибо за ссылочку. Она мне очень пригодилась. Вот тоже ссылка неплохая на эту тему.

Любителям постебаться, таким как orawish , рекомендую почитать дабы в будущем быть поскромнее.
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #36154689
Lecter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roxen,

"Как страшно жить..."(С)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
возвращаемый тип данных в pipelined function
    #37024547
Фотография MaratSH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnyDataSet,

у меня нет типа sys.ODCITabFuncInfo
версия оракла:
Oracle9i Enterprise Edition Release 9.2.0.8.0

Что делать :) ?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
возвращаемый тип данных в pipelined function
    #37613095
dmitryk1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tru55дык начинающих программистов завсегда тянет на универсальность :)


Конечно! И только продуманные старпёры из отделов АСУ обожают дбфы и если уж и перелезли на оракл, то предпочитают накопипастить тыщщу отчётов с разными группировками и менять их все при изменении одного условия или добавлении одного фильтра.

Спрашивал в другой ветке про вызов селекта из курсора, так там такой же, нет бы, сказать про Pipelined, начал так же глубокомысленно гнуть пальцы...
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613114
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitryk1tru55дык начинающих программистов завсегда тянет на универсальность :)

Конечно! И только продуманные старпёры из отделов АСУ обожают дбфы и если уж и перелезли на оракл, то предпочитают накопипастить тыщщу отчётов с разными группировками и менять их все при изменении одного условия или добавлении одного фильтра.
Спрашивал в другой ветке про вызов селекта из курсора, так там такой же, нет бы, сказать про Pipelined, начал так же глубокомысленно гнуть пальцы...

Ты вообще внимательно прочитал топик? Тут суть не в pipelined, а в том, что человек хотел сделать одну функцию для работы с разными таблицами, что автоматом влечет применение dynamic SQL. А применение dynamic SQL в общем случае ведет к потере производительности. Или для тебя важнее, чтобы меньше писать кода, а что там с производительностью - наплевать?

К слову сказать, какое отношение dbf-ки имеют к тысяче отчетов?
Ну и совсем для сведения: файлы Oracle тоже могут иметЬ расширение dbf
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613124
dmitryk1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roxen, Приведи пожалуйста пример такой функции.

У меня тоже проблема, есть один запрос, который надо фильтровать сначала, а потом в разных разрезах, с разными группировками выводить.

Типа сколько выездов сделала каждая бригада с такого-то по такое-то, или то же, но + с определёнными диагнозами. /это по фильтрам
Потом сколько выездов сделали бригады подстанции - тоже с фильтрами.

В общем я придумал вынести в PIPELINED функцию запрос. Там прописать фильтры, данные из которых буду передавать в процедуру, а возвращаться будет отфильтрованная таблица. И как раз этот результат уже буду группировать в разных разрезах и позах.

Так и при любом изменении количества фильтров функцию подправил и всё ок.

Но не хочу делать для каждой вьюшки свой тип чтобы не менять их при изменении вьюшки и пытаюсь сделать как раз %ROWTYPE но нифига не выходит...

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE OR REPLACE FUNCTION filterTable 
  RETURN dic_call_reject%ROWTYPE PIPELINED
is
  cur SYS_REFCURSOR;
  r dic_call_reject%ROWTYPE;
BEGIN
  
open  cur FOR SELECT * FROM dic_call_reject dcr
                ;

   loop
       fetch cur INTO r;
       exit when cur%notfound;
      PIPE ROW(r);
  END loop;
  RETURN;
END;



Это тест, на котором я хочу опробовать... Выдаёт соответственно ошибку.
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613129
dmitryk1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tru55,

Ладно, погорячился. Просто меня тоже так послали вместо ответа. Сори. Лучше подскажи по теме. Ну и думаю про дбфы ты понял, просто постебаться решил ;)
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613136
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitryk1,

хотеть не вредно. а проза жизни в том, что булки на деревьях не растут
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613144
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitryk1фильтровать сначала, а потом в разных разрезах, с разными группировками выводить.
Для решения этой задачи существуют специально обученные инструменты имени [R]OLAP
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613158
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tru55применение dynamic SQL в общем случае ведет к потере производительностиАга, любимая мифо-страшилка от О дминов. Это фигня, по сравнению с сопровождаемостью.
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613163
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elictru55применение dynamic SQL в общем случае ведет к потере производительностиАга, любимая мифо-страшилка от О дминов. Это фигня, по сравнению с сопровождаемостью.
Все от кривых рук.
По-настоящему оторваться можно на EAV :)
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613172
dmitryk1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousdmitryk1фильтровать сначала, а потом в разных разрезах, с разными группировками выводить.
Для решения этой задачи существуют специально обученные инструменты имени [R]OLAP

Ты в курсе сколько оно стоит?
Или считаешь мне имеет смысл послать начальство посоветовав купить ентерпрайз?
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613176
dmitryk1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawishdmitryk1,

хотеть не вредно. а проза жизни в том, что булки на деревьях не растут
Ну да. Полезный ответ. Спасибо.
...
Рейтинг: 0 / 0
25 сообщений из 51, страница 1 из 3
Форумы / Oracle [игнор отключен] [закрыт для гостей] / возвращаемый тип данных в pipelined function
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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