запрос к базе данных
На страницу Пред. 1, 2, 3, 4
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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мя параметрами  |
|
 |
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   |
|
Полезность: Нет оценки
|
Спасибо за развернутый ответ!  |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|