Ошибка PLP-CHANGE_DATABASE в select-e
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
mvg Участник - экстремал
Вступление в Клуб: 04.12.2008
|
Пн Мар 08, 2010 23:45  Ошибка PLP-CHANGE_DATABASE в select-e |
|
Полезность: Нет оценки
|
При использовании части дистрибутивных функций в выражении выборки запроса select генерируется ошибка:
PLP-CHANGE_DATABASE: Не гарантируется, что база данных не будет обновлена.
Пример:
Код: | select distinct ac (
cr%id : cr_id
....
,::[SIM_LOAN_PORT].[LIB].DateCreateDebtForAttach (cr%id,sysdate,false,null) : date1
)
in
::[AC_FIN],(::[KRED_PERS] :cr)
where
.... |
Каким образом можно использовать данные функции в запросах select и возможно ли это вообще?
Последний раз редактировалось: mvg (Ср Мар 10, 2010 15:41), всего редактировалось 1 раз |
|
 |
ГлСП Профи
Вступление в Клуб: 20.09.2007
|
Вт Мар 09, 2010 06:28   |
|
Полезность: 4
|
Надо сказать компилятору, что функция не меняет данные
Вот пример с функций РЦ
Код: | Function GetLast( doc_rc ref [DOCUM_RC] ) return ref [DOCUM_RC];
PRAGMA RESTRICT_REFERENCES ( GetLast, WNDS, WNPS ); |
Если функция неоткомпилируется, то надо уже разбираться с самой функцией. Возможно, что из нее вызывается функция котороя не гарантирует неизменность данных, или там используется пайпа
По идее еще бы глянуть саму функцию.
И еще, пользуйте тэг Code когда выкладываете код на форум, для наглядности
Последний раз редактировалось: ГлСП (Чт Мар 11, 2010 08:30), всего редактировалось 3 раз(а) |
|
 |
ГлСП Профи
Вступление в Клуб: 20.09.2007
|
Вт Мар 09, 2010 06:38   |
|
Полезность: Нет оценки
|
Хотя из названия функции видно , что в ней что-то меняется. |
|
 |
mvg Участник - экстремал
Вступление в Клуб: 04.12.2008
|
Ср Мар 10, 2010 16:06   |
|
Полезность: Нет оценки
|
Спасибо за наводку. Буду разбираться с прагмой.
Так же выяснилось следующее - если использовать pl/sql вставки, то в них данное исключение не возникает. |
|
 |
atanas Участник
Вступление в Клуб: 25.12.2010
|
Вт Авг 09, 2011 11:13   |
|
Полезность: 1
|
Можно поменять вызов через ТБП на вызов через интерфейсный пакет. Т.е. ваш код
Код: | ::[SIM_LOAN_PORT].[LIB].DateCreateDebtForAttach (cr%id,sysdate,false,null) : date1
|
переписать так:
Код: | Z$SIM_LOAN_PORT_LIB.DateCreateDebtForAttach (cr%id,sysdate,false,null) : date1
|
Указанный способ нашел в дистрибутивных PL/Plus представлениях. |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|