Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
PLS Участник
Вступление в Клуб: 22.07.2014
|
Вт Июл 22, 2014 09:32  Своя функция в представлении |
|
Полезность: Нет оценки
|
Доброго дня.
Подскажите как в представлении вызвать свою функцию? Что-то типа такого:
type main is
select x(
x.[NUM_DOG_EXT] : NUM_DOG,
x.[CLIENT].[NAME] : CLIENT,
x.[ACCOUNT].[MAIN_V_ID] : ACC,
x.[FINTOOL].[CUR_SHORT] : CURR,
x.[VID_DOG].[NAME] : VID,
x.[FILIAL] : FILIAL,
x.[DEPART] : DEPART,
pr.[ACCOUNT] : ACC,
pr.[CLIENT].[NAME] : CLIENT,
pr.[DATE_GIVE] : DATEG,
main_function(p_date, p_id_cli),
pr.[NUM_DOG] : NUM_DOG
)
in ::[DEPOSIT_PRIV], (::[KRED_PERS]: PR)-----, (select GetCountProdClient (CLIENT, DATEG) : g)
where x.CLIENT = pr.CLIENT |
|
 |
Reddom Участник со стажем
Вступление в Клуб: 25.01.2013
|
Вт Июл 22, 2014 09:53   |
|
Полезность: Нет оценки
|
p_date, p_id_cli - это что?
Попробуй через операцию типа фильтр. |
|
 |
PLS Участник
Вступление в Клуб: 22.07.2014
|
Вт Июл 22, 2014 10:30   |
|
Полезность: Нет оценки
|
Это вот так правильней main_function(DATEG, CLIENT).
Просто хочу понять, такого рода конструкции работают в представлении?
Скажем в PL/SQL в селекте можно так сделать. |
|
 |
Reddom Участник со стажем
Вступление в Клуб: 25.01.2013
|
Вт Июл 22, 2014 10:50   |
|
Полезность: Нет оценки
|
Суть такая, функция твоя должна быть глобальной (например, глобальные описания операции типа библиотека), желательно RESTRICT_REFERENCES WNDS(does not modify database tables) и WNPS(does not change the values of packaged variables)(pragma RESTRICT_REFERENCES(функция, WNDS, WNPS); ).
Дальше в представлении вызываешь ее как [ТБП]::[БИБЛИОТЕКА].функция(параметр1, параметр2).
Так как представление становиться вью, а вью это sql запрос. Дальше можно почитать про вью в документации oracle.
Последний раз редактировалось: Reddom (Вт Июл 22, 2014 11:46), всего редактировалось 1 раз |
|
 |
PLS Участник
Вступление в Клуб: 22.07.2014
|
Вт Июл 22, 2014 10:56   |
|
Полезность: Нет оценки
|
Про ORACLE понятно. Работаю давно.
Ок. Спасибо. Попробую. |
|
 |
ezhem Участник со стажем
Вступление в Клуб: 22.05.2008
|
Ср Июл 23, 2014 14:40   |
|
Полезность: Нет оценки
|
Если нужно описать какую-то функцию, то как правило создается фильтр на представление и в нем можно описать функцию. |
|
 |
Random Эксперт
Вступление в Клуб: 27.06.2011
|
Пн Июл 28, 2014 10:48  Re: Своя функция в представлении |
|
Полезность: Нет оценки
|
PLS пишет: | Доброго дня.
Подскажите как в представлении вызвать свою функцию? Что-то типа такого |
функцию как отдельную сущность Oracle в pl/plus без приседаний вызвать нельзя.
Можно вызвать функцию из пакета, а ещё лучше - из операции.
select a(::[RUNTIME].[F].a(бла-бла) ) in dual%rowtype; |
|
 |
ezhem Участник со стажем
Вступление в Клуб: 22.05.2008
|
Пт Авг 01, 2014 08:02  Re: Своя функция в представлении |
|
Полезность: Нет оценки
|
Random пишет: | PLS пишет: | Доброго дня.
Подскажите как в представлении вызвать свою функцию? Что-то типа такого |
функцию как отдельную сущность Oracle в pl/plus без приседаний вызвать нельзя.
Можно вызвать функцию из пакета, а ещё лучше - из операции.
select a(::[RUNTIME].[F].a(бла-бла) ) in dual%rowtype; |
Вопрос проще стоит, вызвать функцию как колонку в представлении,
Select x ((::[RUNTIME].[F].a(бла-бла)
)
Не нужно никаких прседаний |
|
 |
Random Эксперт
Вступление в Клуб: 27.06.2011
|
Пт Авг 01, 2014 08:32  Re: Своя функция в представлении |
|
Полезность: Нет оценки
|
ezhem пишет: | Random пишет: | PLS пишет: | Доброго дня.
Подскажите как в представлении вызвать свою функцию? Что-то типа такого |
функцию как отдельную сущность Oracle в pl/plus без приседаний вызвать нельзя.
Можно вызвать функцию из пакета, а ещё лучше - из операции.
select a(::[RUNTIME].[F].a(бла-бла) ) in dual%rowtype; |
Вопрос проще стоит, вызвать функцию как колонку в представлении,
Select x ((::[RUNTIME].[F].a(бла-бла)
)
Не нужно никаких прседаний |
Не путай сущности.
нужно отличать create function от create package |
|
 |
ezhem Участник со стажем
Вступление в Клуб: 22.05.2008
|
Ср Авг 06, 2014 08:31  Re: Своя функция в представлении |
|
Полезность: Нет оценки
|
Если на уровне оракла подходить, то согласен.
функции в представлении будут вызываться всеравно из вне, даже если фильтр на представлении создать и в нем прописать.
Random пишет: | ezhem пишет: | Random пишет: | PLS пишет: | Доброго дня.
Подскажите как в представлении вызвать свою функцию? Что-то типа такого |
функцию как отдельную сущность Oracle в pl/plus без приседаний вызвать нельзя.
Можно вызвать функцию из пакета, а ещё лучше - из операции.
select a(::[RUNTIME].[F].a(бла-бла) ) in dual%rowtype; |
Вопрос проще стоит, вызвать функцию как колонку в представлении,
Select x ((::[RUNTIME].[F].a(бла-бла)
)
Не нужно никаких прседаний |
Не путай сущности.
нужно отличать create function от create package |
|
|
 |
Random Эксперт
Вступление в Клуб: 27.06.2011
|
Ср Авг 06, 2014 10:47  Re: Своя функция в представлении |
|
Полезность: Нет оценки
|
ezhem пишет: | Если на уровне оракла подходить, то согласен. |
Я имею в виду, что PLS хочет именно функцию, созданную как create function. Посмотри внимательно на первый пост. |
|
 |
|