Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Запрос с параметрами, ужос...  [new]
hVostt
Member

Откуда:
Сообщений: 18578
Прошу прощения за ламерский вопрос, у меня пока что не очень много опыта работы с Oracle, но..

Вопрос в том, как сделать представление (view) с параметрами? У меня есть довольно большой запрос, с группировками и подсчетом (count, max, sum..), но в него надо передать 2 параметра, 2 даты, типа начало и конец. Эти параметры участвуют в условии where внутри запроса.

Убив день на изучение, решил таки эту проблему. И теперь простейшая операция по меркам Interbase/Firebird, MS SQL и даже MS Access, вылилась в табличную PIPELINE функцию, к ней два типа - один тип объекта с полями, другой табличный. Т.е. все законсервировано получается, если мне надо будет добавить, убрать или изменить поле в запросе, надо проделать ряд операций: изменить тип объекта; перекомпилировать, предварительно удалив табличный тип и табличную функцию; откомпилировать заново табличный тип; изменить и откомпилировать табличную функцию.

Неужели это считается нормальным в среде Oracle?

--
все когда-нибудь начинается снова
21 фев 08, 15:14    [5323143]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с параметрами, ужос...  [new]
верменный 12
Guest
смотреть syscontext
21 фев 08, 15:29    [5323320]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с параметрами, ужос...  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
А при написании обычного where к представлению? Не получилось? Условия не протолкнулись или что?
21 фев 08, 15:32    [5323351]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с параметрами, ужос...  [new]
Andrey.L
Member

Откуда: Харьков
Сообщений: 1546
или пакетные переменные
или переписать запрос что бы фильтровать по датам снаружи
21 фев 08, 15:32    [5323357]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с параметрами, ужос...  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
hVostt
..
Неужели это считается нормальным в среде Oracle?
..
1) я бы, для начала, посоветовал вам подумать на тему нужно ли оформлять этот запрос, как вью. Есть такие среды (и люди, тоже ;) которые буквально каждый запрос так пакуют.
И совершенно зря.. Основания для создания вью по-делу - часто совсем иные (разграничение доступа, например)
2) Ну что мешает, (даже если и вью) параметры не внутрь него закатывать, а
добавлять при использовании?
3) про контексты и пакеты уже (ап) сказали. Еще проще - заведите табличку и храните
хотя бы и в ней свои параметры (если они так противны, что вы их и передавать не хотите)
21 фев 08, 18:49    [5324991]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с параметрами, ужос...  [new]
hVostt
Member

Откуда:
Сообщений: 18578
верменный 12 что такое syscontext? покопался в документации oradoc9, не нашел. погуглил, какие-то смутные упоминания вкупе с on-logoff, что-то жутко DBA-шное :) может ссылко или хотябы в трех словах, если не сложно?

Jannny условие where работает до группировки, having после, вы ничего не путаете? группировку хочется засунуть во вью, но надо передать туда параметры для where.

Andrey.L клиентское приложение - одна сессия, когда пользователь нажимает "Отчет", открывается совершенно другая сессия, другое приложение - простой генератор отчетов, который может выполнить один запрос к БД, как быть?

orawish что такое контексты, дайте хоть немного информации плз. а табличку заводить, ну да одной больше одной меньше :) как определять по этой табличке кто заказал отчет, если 10 пользователей одновременно нажмут "Отчет" с разными параметрами... ы?
22 фев 08, 07:23    [5326045]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с параметрами, ужос...  [new]
Aleks-ek
Member

Откуда:
Сообщений: 85
hVostt
если 10 пользователей одновременно нажмут "Отчет" с разными параметрами... ы?

Заведите в этой табличке Audith и записывайте туда user
22 фев 08, 07:46    [5326087]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с параметрами, ужос...  [new]
Igor Morenko
Member

Откуда: Tula
Сообщений: 308
Попробуй через функцию. :)

CREATE TYPE ename_type IS TABLE OF VARCHAR2(256)
/

CREATE OR REPLACE FUNCTION emps_in_dept (deptname IN VARCHAR2)
RETURN ename_type
PIPELINED
IS
BEGIN
   FOR employee IN 
      (SELECT emp.* FROM emp, dept 
       WHERE emp.deptno = dept.deptno AND dept.dname = deptname)
   LOOP
      PIPE ROW (employee.ename);
   END LOOP;
   RETURN;
END;
/

SELECT * FROM TABLE (emps_in_dept('SALES'));
22 фев 08, 10:09    [5326557]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с параметрами, ужос...  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
hVostt
что такое syscontext?
sys_context

Но главное Вы так и не объяснили, а зачем Вам нужно, чтобы это была именно view?
22 фев 08, 10:14    [5326595]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с параметрами, ужос...  [new]
Igor Morenko
Member

Откуда: Tula
Сообщений: 308
Извини не прочитал до конца твое излияние, что это уж очень сложно все в Оракле.
Если тебе не нравится такой подход, то просто делай как тебе уже советовали условие ставь уже на вью. А то что быстрее будет работать в условии WHERE а потом HAVING, или сначала группировка а потом условие. Ты же не за скорость боришься а за простоту реализации. Тебя же неустраивает что все очень сложно переделывать. Да я так думаю что ты не задумывался о том как будет работать запросы в Interbase/Firebird, MS SQL и даже MS Access по скорости.
22 фев 08, 10:19    [5326625]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с параметрами, ужос...  [new]
Pir
Member

Откуда: Москва
Сообщений: 872
hVostt
верменный 12 что такое syscontext? покопался в документации oradoc9, не нашел. погуглил, какие-то смутные упоминания вкупе с on-logoff, что-то жутко DBA-шное :) может ссылко или хотябы в трех словах, если не сложно?


CREATE CONTEXT
в примере ответ на твой вопрос
22 фев 08, 10:27    [5326698]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с параметрами, ужос...  [new]
Andrey.L
Member

Откуда: Харьков
Сообщений: 1546
hVostt
Andrey.L клиентское приложение - одна сессия, когда пользователь нажимает "Отчет", открывается совершенно другая сессия, другое приложение - простой генератор отчетов, который может выполнить один запрос к БД, как быть?

Перед запросом выполни установку твоих переменных.
Этот механизм аналогичен CONTEXT'у, но работал еще до его появления.

Что для этого придется сделать:
1. Пакет с глобальными переменными (можно обернуть функциями)
2. Вьюху, которая использует глобальные переменные пакета (п.1)
Как с этим работать:
1. Открываешь новую сессию
2. Устанавливаешь переменные
3. Выбираешь из вьюхи данные
22 фев 08, 10:55    [5326887]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с параметрами, ужос...  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
hVostt
..
orawish что такое контексты, дайте хоть немного информации плз. а табличку заводить, ну да одной больше одной меньше :) как определять по этой табличке кто заказал отчет, если 10 пользователей одновременно нажмут "Отчет" с разными параметрами... ы?

отвечаю на Ы:
Ой-ой-ой а сессию уже идентифицировать никак не можно? (про gtt, нарочно молчу ;)
22 фев 08, 12:30    [5327744]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить