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

Владелец массива поиск по записи на которую ссылается массив
На страницу Пред.  1, 2, 3  След.
 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
German
Профи


Вступление в Клуб: 25.06.2007
СообщениеВт Авг 05, 2008 16:09    Ответить с цитатой
Полезность: 1
Попробуйте
Код:
locate docref in ::[DOCUMENT_REF] collections where docref.[DOCUMENT] = P_FIN_ORDER

_________________
Homo homini
Alexsey
Эксперт


Вступление в Клуб: 06.09.2007
СообщениеВт Авг 05, 2008 16:10    Ответить с цитатой
Полезность: Нет оценки
поставил несколько экспериментов в SQL стало работать следующее
Код:
-- begin pl/sql
select s.C_VALUE, s.COLLECTION_ID
from
IBS.Z#DOCUMENT_REF s where
C_VALUE = '12148507' 
-- end pl/sql

правда доменя так и не доперло на что C_VALUE ссылается, хотя ее можно получить следующим образом
Код:
-- begin pl/sql
select s.C_VALUE
from
IBS.Z#DOCUMENT_REF s where
COLLECTION_ID = P_FIN_ORDER
-- end pl/sql

и далее с C_VALUE можно делать все что хочется
_________________
всегда есть как минимум 2 выхода


Последний раз редактировалось: Alexsey (Вт Авг 05, 2008 16:17), всего редактировалось 2 раз(а)
Alex2019
Профи


Вступление в Клуб: 02.07.2007
СообщениеВт Авг 05, 2008 16:12    Ответить с цитатой
Полезность: Нет оценки
German пишет:
Попробуйте
Код:
locate docref in ::[DOCUMENT_REF] collections where docref.[DOCUMENT] = P_FIN_ORDER

Ожидаемо при компиляции вываливается: у типа [DOCUMENT] нет реквизита или операции [DOCUMENT]
Alex2019
Профи


Вступление в Клуб: 02.07.2007
СообщениеВт Авг 05, 2008 16:18    Ответить с цитатой
Полезность: Нет оценки
Alexsey пишет:
поставил несколько экспериментов в SQL стало работать следующее

Алексей, у меня ощущение, что вы не совсем правильно поняли задачку, извините уж... Давайте еще раз? Есть финраспоряжение. Есть ссылка на него (не ref [FIN_ORDER],а [DOCUNENT_REF], у которого в колонке C_VALUE лежит айдишник распоряжения. У этой ссылки в поле COLLECTION_ID записан ID ссылки на массив документов искомого ТБП. Требуется в задаче имея распоряжение, найти экз. ТБП или хотя бы остальные экземпляры массива
German
Профи


Вступление в Клуб: 25.06.2007
СообщениеВт Авг 05, 2008 16:21    Ответить с цитатой
Полезность: Нет оценки
Alex2019 пишет:
Ожидаемо при компиляции вываливается: у типа [DOCUMENT] нет реквизита или операции [DOCUMENT]

Тогда только медленное
Код:
locate x in [НЕКИЙ ТБП] where exists элемент массива со ссылкой на P_FIN_ORDER

_________________
Homo homini
Alexsey
Эксперт


Вступление в Клуб: 06.09.2007
СообщениеВт Авг 05, 2008 16:23    Ответить с цитатой
Полезность: Нет оценки
Alex2019 пишет:
Alexsey пишет:
поставил несколько экспериментов в SQL стало работать следующее

Алексей, у меня ощущение, что вы не совсем правильно поняли задачку, извините уж... Давайте еще раз? Есть финраспоряжение. Есть ссылка на него (не ref [FIN_ORDER],а [DOCUNENT_REF], у которого в колонке C_VALUE лежит айдишник распоряжения. У этой ссылки в поле COLLECTION_ID записан ID ссылки на массив документов искомого ТБП. Требуется в задаче имея распоряжение, найти экз. ТБП или хотя бы остальные экземпляры массива

тогда все упрощается
пишем
Код:
-- begin pl/sql
select s.COLLECTION_ID
from
IBS.Z#DOCUMENT_REF s where
C_VALUE = P_FIN_ORDER --при условии что в P_FIN_ORDER ID
-- end pl/sql


получем искомые циферки ссылки
_________________
всегда есть как минимум 2 выхода
Alex2019
Профи


Вступление в Клуб: 02.07.2007
СообщениеВт Авг 05, 2008 16:28    Ответить с цитатой
Полезность: Нет оценки
Alexsey пишет:
поставил несколько экспериментов в SQL стало работать следующее

Alexsey пишет:
тогда все упрощается
пишем
Код:
-- begin pl/sql
select s.COLLECTION_ID
from
IBS.Z#DOCUMENT_REF s where
C_VALUE = P_FIN_ORDER
-- end pl/sql


получем искомые циферки ссылки

Алексей, если вы посмотрите на мой самый первый пост, то увидите почти такой же код. И в SQL он исправно работает. А написанный в ЦФТ-шной операции нет
Alex2019
Профи


Вступление в Клуб: 02.07.2007
СообщениеВт Авг 05, 2008 16:32    Ответить с цитатой
Полезность: Нет оценки
German пишет:
Alex2019 пишет:
Ожидаемо при компиляции вываливается: у типа [DOCUMENT] нет реквизита или операции [DOCUMENT]

Тогда только медленное
Код:
locate x in [НЕКИЙ ТБП] where exists элемент массива со ссылкой на P_FIN_ORDER

Вы будете смеяться, но результат аналогичный. Поверьте, массив есть, элементы в массиве есть. И в том числе тот, от которого я ищу. Мистика!
German
Профи


Вступление в Клуб: 25.06.2007
СообщениеВт Авг 05, 2008 16:37    Ответить с цитатой
Полезность: 1
Alex2019 пишет:
German пишет:
Alex2019 пишет:
Ожидаемо при компиляции вываливается: у типа [DOCUMENT] нет реквизита или операции [DOCUMENT]

Тогда только медленное
Код:
locate x in [НЕКИЙ ТБП] where exists элемент массива со ссылкой на P_FIN_ORDER

Вы будете смеяться, но результат аналогичный. Поверьте, массив есть, элементы в массиве есть. И в том числе тот, от которого я ищу. Мистика!


Выводите в отладку чему равен P_FIN_ORDER
_________________
Homo homini
German
Профи


Вступление в Клуб: 25.06.2007
СообщениеВт Авг 05, 2008 16:38    Ответить с цитатой
Полезность: Нет оценки
Alexsey пишет:
пишем
Код:
-- begin pl/sql
select s.COLLECTION_ID
from
IBS.Z#DOCUMENT_REF s where
C_VALUE = P_FIN_ORDER --при условии что в P_FIN_ORDER ID
-- end pl/sql


получем искомые циферки ссылки


Код заведомо неверный - нет into
_________________
Homo homini
Alex2019
Профи


Вступление в Клуб: 02.07.2007
СообщениеВт Авг 05, 2008 16:41    Ответить с цитатой
Полезность: Нет оценки
German пишет:

Выводите в отладку чему равен P_FIN_ORDER

Блин!!! Evil or Very Mad
Это оно.... Спасибо!!!
Admin
Site Admin


Вступление в Клуб: 09.06.2007
СообщениеВт Авг 05, 2008 16:56    Ответить с цитатой
Полезность: Нет оценки
Alex2019 пишет:
Alex2019 пишет:
Вы будете смеяться, но результат аналогичный. Поверьте, массив есть, элементы в массиве есть. И в том числе тот, от которого я ищу. Мистика!

German пишет:

Выводите в отладку чему равен P_FIN_ORDER

Блин!!! Evil or Very Mad
Это оно.... Спасибо!!!


Одно из золотых правил - программист не должен верить в чудеса (по крайней мере на работе)
Alex2019
Профи


Вступление в Клуб: 02.07.2007
СообщениеВт Авг 05, 2008 16:58    Ответить с цитатой
Полезность: Нет оценки
Admin пишет:
Одно из золотых правил - программист не должен верить в чудеса (по крайней мере на работе)

И не поспоришь! Остается только оправдываться тем, что в жизни все не так, как на самом деле Smile
Alex2019
Профи


Вступление в Клуб: 02.07.2007
СообщениеСр Авг 06, 2008 08:42    Ответить с цитатой
Полезность: Нет оценки
В качестве резюме. Кому-то это наверняка известно, но кому-то возможно поможет обойти подобные грабли.

Собака заключалась в том, что операция вызывалась через PLPCALL.
Фрагмент кода содержался в проверке в секции DEFAULT. При таком вызове вначале отрабатывает именно эта секция (p_message='DEFAULT', p_info='%PLPCALL%'), но при этом, как выяснилось, реквизиты в операцию еще не переданы. Затем, видимо, происходит инициализация параметров и производится повторный вызов проверки в режиме p_message='VALIDATE', p_info='%PLPCALL%'.
Так вот, глюк был связан с тем, что операция падала при первом проходе, еще до передачи параметров.

Огромное спасибо всем отозвавшимся!
lexus
Профи


Вступление в Клуб: 28.09.2007
СообщениеСр Авг 06, 2008 10:28    Ответить с цитатой
Полезность: 2
Честно говоря, просмотрел тему мельком... Да и опоздал уже с ответом, но.

В пакете RTL есть
Цитата:
function OBJECT_PARENT(p_object_id IN reference
p_class IN string default null) return reference -
возвращает ccылку на экземпляр, коллекции которого принадлежит
экземпляр p_object_id.


Может с ней будет проще решить задачу?
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
На страницу Пред.  1, 2, 3  След.
Страница 2 из 3

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