Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / View и параметры / 25 сообщений из 50, страница 1 из 2
04.02.2021, 10:30
    #40041457
SergiiW
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View и параметры
Добрий день всем!
Прошу помощи.
Есть сложный View, который должен вызываться с параметрами.
Сейчас это реализовано через временную таблицу. Перед вызовом View заносятся значения в таблицу и после вызывается View.
Все работает отлично, но проблема в том, что вьюшку нужно вызывать одним запросом.
Попробовал через функцию
Код: plsql
1.
SELECT * FROM ViewName WHERE Function(:param) = 1


Но проблема в том, что сначала выполняется View, а уже потом заноситься значения во временную таблицу.
Как можно решить эту проблему?
Или как в одном запросе сначала заносить данные во временную таблицу, а потом вызывать View?
Использовать табличные функции, пока, не очень хочеться.
Укажите направление куда копать.
...
Рейтинг: 0 / 0
04.02.2021, 10:44
    #40041461
123йй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View и параметры
SergiiW,

pipe ?
...
Рейтинг: 0 / 0
04.02.2021, 11:08
    #40041475
SergiiW
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View и параметры
123йй,
Если другого пути не будет, то придется делать табличную функцию. :(
...
Рейтинг: 0 / 0
04.02.2021, 11:35
    #40041490
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View и параметры
SergiiW
123йй,
Если другого пути не будет, то придется делать табличную функцию. :(

в табличную как данные передатите?

ps
можно глянуть в сторону контекста, но ето не решает задачу

....
stax
...
Рейтинг: 0 / 0
04.02.2021, 11:51
    #40041497
Maxim Demenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View и параметры
SergiiW,

С 19.6
Код: plsql
1.
return varchar2 SQL_MACRO



Regards

Maxim
...
Рейтинг: 0 / 0
04.02.2021, 12:23
    #40041517
SergiiW
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View и параметры
Stax,

А какие проблемы передать параметр в функцию?
Код: plsql
1.
Select * FROM Table(Function(:Param))
...
Рейтинг: 0 / 0
04.02.2021, 12:27
    #40041521
SergiiW
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View и параметры
Maxim Demenko, Можно, пожалуйста, детальнее. Не понял идею.
...
Рейтинг: 0 / 0
04.02.2021, 12:41
    #40041530
Maxim Demenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View и параметры
...
Рейтинг: 0 / 0
04.02.2021, 13:42
    #40041567
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View и параметры
SergiiW
Stax,

А какие проблемы передать параметр в функцию?
Код: plsql
1.
Select * FROM Table(Function(:Param))



где тут вью?

.....
stax
...
Рейтинг: 0 / 0
04.02.2021, 13:46
    #40041570
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View и параметры
Maxim Demenko
SergiiW,

С 19.6
Код: plsql
1.
return varchar2 SQL_MACRO



Regards

Maxim


можете привести манюсенький пример create view с return varchar2 SQL_MACRO
для пользования как параметр

и как тогда вьюшку вызывать


.....
stax
...
Рейтинг: 0 / 0
04.02.2021, 13:56
    #40041573
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View и параметры
SergiiWКак можно решить эту проблему?

Например, можно вернуться к истокам и прочитать что такое view и как его используют. Вы
явно пытаетесь делать это совершенно извращённым способом. Обычно параметры передают
запросу, который использует view:
Код: sql
1.
select * from view where field=:param


А уж СУБД сама пропихнёт их внутрь.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.02.2021, 14:05
    #40041579
Maxim Demenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View и параметры
Stax,

там же по ссылке примеры , ну вот еще на моей 19.7

Код: 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.
SQL> CREATE OR REPLACE FUNCTION emp_view (p_job varchar2)
  2  RETURN VARCHAR2 SQL_MACRO IS
  3  v_query varchar2(500);
  4  BEGIN
  5    v_query := q'!SELECT *
  6                  FROM emp
  7                  WHERE  job = upper(p_job) !';
  8    RETURN v_query;
  9  END;
 10  /

Function created.

SQL>
SQL> select ename, job from emp_view('manager');

ENAME      JOB
---------- ---------
JONES      MANAGER
BLAKE      MANAGER
CLARK      MANAGER

SQL>
SQL> select ename, job from emp_view('clerk');

ENAME      JOB
---------- ---------
SMITH      CLERK
ADAMS      CLERK
JAMES      CLERK
MILLER     CLERK

SQL>



Regards

Maxim
...
Рейтинг: 0 / 0
04.02.2021, 15:43
    #40041661
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View и параметры
Maxim Demenko,

так понятно, но ето ж не совсем вью

.....
stax
...
Рейтинг: 0 / 0
04.02.2021, 16:25
    #40041700
Maxim Demenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View и параметры
Stax,

Так pipelined function тоже не совсем вью ... Но кмк ТС такое надо - если конечно версия позволяет

Regards

Maxim
...
Рейтинг: 0 / 0
04.02.2021, 16:42
    #40041710
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View и параметры
[quot Maxim Demenko#22274894]
так я и для pipelined не понимал как они собираюся параметризировать вью

имхо
пока-что передать параметр во вью нельзя

напр
select * from view_p using xxx,yyy where ...

.....
stax
...
Рейтинг: 0 / 0
04.02.2021, 16:56
    #40041720
SergiiW
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View и параметры
Stax,
Вью используется в функции. Функция возвращает результат работы вью.
...
Рейтинг: 0 / 0
04.02.2021, 17:02
    #40041723
SergiiW
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View и параметры
Dimitry Sibiryakov,
Уважаемый, если бы все решалось "where field=:param" я бы даже не писал в форум. field не выводиться в поля вью. Да, можно вывести, но в этом случае выполнение вью заняло бы сутки, если не месяцы. Параметры используются в рекурсивных запросах и даже вывести их в поля вью будет сложно, а фильтровать по ним - это повеситься.
...
Рейтинг: 0 / 0
04.02.2021, 17:05
    #40041727
SergiiW
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View и параметры
Maxim Demenko, спасибо! До сих пор не знал про такую возможность. Но, к сожалению, к моему случаю это не применимо. Можно изменить скрипт, который основан на вью, но невозможно изменить саму вью или передать ей параметры. :(
...
Рейтинг: 0 / 0
04.02.2021, 17:16
    #40041733
SergiiW
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View и параметры
Возможно кто знает, как одним запросом внести данные в таблицу или установить переменные сессии, пакета и получить результат SELECT?
MySql это делается просто (Inset ...; Select ...), а в oracle - даже не представлю.
...
Рейтинг: 0 / 0
04.02.2021, 18:03
    #40041766
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View и параметры
SergiiW,

Откуда возникает ограничение на один запрос?
...
Рейтинг: 0 / 0
04.02.2021, 18:11
    #40041768
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View и параметры
SergiiW
Stax,
Вью используется в функции. Функция возвращает результат работы вью.


всеравно внутри функции параметр во вью не передать

......
stax
...
Рейтинг: 0 / 0
04.02.2021, 19:01
    #40041785
va_kochnev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View и параметры
SergiiW
Возможно кто знает, как одним запросом внести данные в таблицу или установить переменные сессии, пакета и получить результат SELECT?
MySql это делается просто (Inset ...; Select ...), а в oracle - даже не представлю.

Я создавал функцию вида
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
function set_param (p_param1 varchar2, p_param2 number, p_param3 date) return varchar2
is
begin
 переменная_сессии1:=p_param1;
 переменная_пакета2:=p_param2;
 переменная_пакета3:=p_param3;
return null;
end set_param;


И потом выполнял запрос
Код: plsql
1.
select * from view where set_param('параметр1',999,sysdate) is null;


Работало.
...
Рейтинг: 0 / 0
04.02.2021, 21:10
    #40041830
SergiiW
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View и параметры
env
Откуда возникает ограничение на один запрос?

Такие условия, к сожалению, изменить сложно.
1. Есть готовая программа, которая оперирует только одним запросом.
2. Нужно получать эти данные в MS Excel через ODBC.
...
Рейтинг: 0 / 0
04.02.2021, 21:12
    #40041831
SergiiW
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View и параметры
Stax
все равно внутри функции параметр во вью не передать
stax

Внутри функции я сохраняю параметры во временную таблицу, а затем вызываю вью, которая уже использует эту временную таблицу.
...
Рейтинг: 0 / 0
04.02.2021, 21:16
    #40041832
SergiiW
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View и параметры
va_kochnev
SergiiW
Возможно кто знает, как одним запросом внести данные в таблицу или установить переменные сессии, пакета и получить результат SELECT?
MySql это делается просто (Inset ...; Select ...), а в oracle - даже не представлю.

Я создавал функцию вида
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
function set_param (p_param1 varchar2, p_param2 number, p_param3 date) return varchar2
is
begin
 переменная_сессии1:=p_param1;
 переменная_пакета2:=p_param2;
 переменная_пакета3:=p_param3;
return null;
end set_param;


И потом выполнял запрос
Код: plsql
1.
select * from view where set_param('параметр1',999,sysdate) is null;


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


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