CftClub.ru
Клуб специалистов ЦФТ-Банк

запрос к базе данных
На страницу Пред.  1, 2, 3, 4
 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Уроки ЦФТ-Банк для начинающих
Предыдущая тема :: Следующая тема  
Автор Сообщение
Alkov
Профи


Вступление в Клуб: 23.09.2010
СообщениеСр Дек 10, 2014 04:51    Ответить с цитатой
Полезность: Нет оценки
разве не хватает
tmp: =executor.lock_open()
в той же сессии , перед вызовом вьюхи ?
SkyKilla
Участник


Вступление в Клуб: 23.10.2009
СообщениеСр Дек 10, 2014 07:26    Ответить с цитатой
Полезность: Нет оценки
Alkov пишет:
разве не хватает
tmp: =executor.lock_open()
в той же сессии , перед вызовом вьюхи ?


Во вьюхе есть такой код:
(SELECT TO_DATE (SYS_CONTEXT ('IBS_USER', '$REP$_ACC_D1'),
'dd/mm/yyyy') C_D1,
Наверное не достаточно вызвать lock_open. Нужно установить определенную переменную в контексте. С платформой не знаком, совсем. Только пытаюсь разобраться на основании знаний SQL.
Random
Эксперт


Вступление в Клуб: 27.06.2011
СообщениеЧт Дек 11, 2014 07:18    Ответить с цитатой
Полезность: 1
SkyKilla пишет:
Alkov пишет:
разве не хватает
tmp: =executor.lock_open()
в той же сессии , перед вызовом вьюхи ?


Во вьюхе есть такой код:
(SELECT TO_DATE (SYS_CONTEXT ('IBS_USER', '$REP$_ACC_D1'),
'dd/mm/yyyy') C_D1,
Наверное не достаточно вызвать lock_open. Нужно установить определенную переменную в контексте. С платформой не знаком, совсем. Только пытаюсь разобраться на основании знаний SQL.


Исполнять под IBS
Код:

declare
cursor cur_acc is
   select * from vw_rpt_acc_turn
   where rownum <= 100
;
begin
   dbms_output.put_line(rtl.open); -- аналогично executor.lock_open

   --   ну тут извините. в представлении есть функции, которые требуют инициализированных врутрипакетных переменных
   z$ac_fin_acc_turn_ls.INIT_VARG(to_date('01/01/2014','dd/mm/yyyy'), to_date('01/01/2015','dd/mm/yyyy'));

   executor.set_context('$REP$_ACC_D1', '01/01/2014'); -- установили контекст
   executor.set_context('$REP$_ACC_D2', '01/01/2015'); -- установили контекст;
   for i in cur_acc loop
      dbms_output.put_line(i.c_acc_num); -- вывели
   end loop;
end;
SkyKilla
Участник


Вступление в Клуб: 23.10.2009
СообщениеЧт Дек 11, 2014 10:07    Ответить с цитатой
Полезность: Нет оценки
Random, спасибо! Выборки делаю не из IBSO, но ваше сообщение многое проясняет.
SkyKilla
Участник


Вступление в Клуб: 23.10.2009
СообщениеЧт Дек 25, 2014 12:19    Ответить с цитатой
Полезность: Нет оценки
В общем, обстоятельно помучившись с запросами, опять обращаюсь сюда за помощью.
Примеры, которые приведены выше, скорее всего из самой среды разработки.
У нас возможности скромнее - приходится делать выборку прямо из Windows через VBA\JS используется компонент ADODB.Connection

Так вот, по вашему примеру получается открыть сессию:
"SELECT IBS.EXECUTOR.LOCK_OPEN FROM DUAL" - результат успешный

а также получается установить контекст IBS_USER:
"IBS.EXECUTOR.SET_CONTEXT('$REP$_ACC_D1', '01/12/2014')"
"IBS.EXECUTOR.SET_CONTEXT('$REP$_ACC_D2', '02/12/2014')"
"IBS.EXECUTOR.SET_CONTEXT('$VW$_ACC', '40821' )"
результат успешный. Ошибок не выдает, и потом успешно селектится
"SELECT SYS_CONTEXT('IBS_USER','$VW$_ACC') FROM DUAL"

но вот с командой
z$ac_fin_acc_turn_ls.INIT_VARG(to_date('01/12/2014','dd/mm/yyyy'), to_date('02/12/2014','dd/mm/yyyy'))
большие проблемы:
ORA-00900: неверно предложение на языке SQL
Microsoft OLE DB Provider for Oracle

Подскажите пожалуйста, что делает эта команда. Можно ли без нее обойтись, или выполнить ее как то иначе?
yaffil
Профи


Вступление в Клуб: 18.08.2011
СообщениеЧт Дек 25, 2014 14:12    Ответить с цитатой
Полезность: Нет оценки
SkyKilla пишет:
но вот с командой
z$ac_fin_acc_turn_ls.INIT_VARG(to_date('01/12/2014','dd/mm/yyyy'), to_date('02/12/2014','dd/mm/yyyy'))
большие проблемы:
Подскажите пожалуйста, что делает эта команда. Можно ли без нее обойтись, или выполнить ее как то иначе?


Очень странно вы вызываете операцию ОСВ с валютным эквивалентом из SQL с 2мя параметрами Shocked
SkyKilla
Участник


Вступление в Клуб: 23.10.2009
СообщениеПт Дек 26, 2014 04:33    Ответить с цитатой
Полезность: Нет оценки
yaffil посмотрите выше сообщение от Random. Я лишь пытался выполнить рекомендации, но с переложением на другую среду исполнения. И там же совсем не одна команда. Мне показалось, что z$ac_fin_acc_turn_ls.INIT_VARG выполняет некую инициализацию, хотя судя по вашему сообщению, это не так....
Если EXECUTOR.SET_CONTEXT('$REP$_ACC_D2', '02/12/2014') успешно исполняется, почему бы не выполниться и z$ac_fin_acc_turn_ls.INIT_VARG ? не хватило привелегий?
Random
Эксперт


Вступление в Клуб: 27.06.2011
СообщениеПт Дек 26, 2014 05:50    Ответить с цитатой
Полезность: Нет оценки
SkyKilla пишет:
yaffil посмотрите выше сообщение от Random. Я лишь пытался выполнить рекомендации, но с переложением на другую среду исполнения. И там же совсем не одна команда. Мне показалось, что z$ac_fin_acc_turn_ls.INIT_VARG выполняет некую инициализацию, хотя судя по вашему сообщению, это не так....
Если EXECUTOR.SET_CONTEXT('$REP$_ACC_D2', '02/12/2014') успешно исполняется, почему бы не выполниться и z$ac_fin_acc_turn_ls.INIT_VARG ? не хватило привелегий?


Исполняете под владельцем схемы?
Если нет, то инициализация не получится - прав на пакет у вас скорее всего нет.
SkyKilla
Участник


Вступление в Клуб: 23.10.2009
СообщениеПт Дек 26, 2014 10:43    Ответить с цитатой
Полезность: Нет оценки
Цитата:

Исполняете под владельцем схемы?
Если нет, то инициализация не получится - прав на пакет у вас скорее всего нет.

Нет, используется простой выделенный пользователь. Доступ к вьюхам выдан через администратора доступа. Простые вьюхи открываются без проблем. А с "контекстными" такой облом... да и не безопасно это - владельца светить.
И еще не дает покоя такая мысль: ведь в навигаторе через 2L я простым пользователем легко открываю эту ведомость - значит он инициализирует контекст без владельца схемы? Или не?
Random
Эксперт


Вступление в Клуб: 27.06.2011
СообщениеПт Дек 26, 2014 15:35    Ответить с цитатой
Полезность: 1
SkyKilla пишет:
Цитата:

Исполняете под владельцем схемы?
Если нет, то инициализация не получится - прав на пакет у вас скорее всего нет.

Нет, используется простой выделенный пользователь. Доступ к вьюхам выдан через администратора доступа. Простые вьюхи открываются без проблем. А с "контекстными" такой облом... да и не безопасно это - владельца светить.
И еще не дает покоя такая мысль: ведь в навигаторе через 2L я простым пользователем легко открываю эту ведомость - значит он инициализирует контекст без владельца схемы? Или не?


Инициализация контекста пользователя осуществляется через пакет executor - он доступен всем.
А вот к пакетам-операциям, библиотекам и прочим доступ только у владельца.
Даже чтобы запустить какую-то операцию, АРМ Навигатор не обращается к пакету этой операции. Он обращается к интерфейсному пакету этой операции. Пользователю доступны только они.
И уже интерфейсный пакет обращается к пакету операции, та лезет в пакет библиотеки и т.д. Поскольку операции, библиотеки и прочее скомпилированы под владельцем схемы, то им и доступны все связи.

Я привёл пример, как инициализировать контекст пользователя.
К сожалению, представление, которое используется в примере, использует функцию, которая требует, чтобы перед тем, как читать данные, были проинициализированы внутренние переменные пакета.

Поэтому я и извинился в комментарии к примеру.

вопрос-то был про контекст, верно?

Подбери себе представление, которое не использует вызовы функций, или функции таковы, чтобы проводили инициализацию самостоятельно?
SkyKilla
Участник


Вступление в Клуб: 23.10.2009
СообщениеПн Дек 29, 2014 05:57    Ответить с цитатой
Полезность: Нет оценки
Спасибо за развернутый ответ! Very Happy
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Уроки ЦФТ-Банк для начинающих Часовой пояс: GMT + 3
На страницу Пред.  1, 2, 3, 4
Страница 4 из 4

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru