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

Ошибка PLP-CHANGE_DATABASE в select-e

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
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 представлениях.
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
Страница 1 из 1

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