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

Помогите понять, что неправильно опять я делаю.

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
cymtu
Участник - экстремал


Вступление в Клуб: 26.03.2008
СообщениеВт Янв 12, 2010 09:20   Помогите понять, что неправильно опять я делаю. Ответить с цитатой
Полезность: Нет оценки
В продукте "Кредиты" создал представление PL/Plus такого вида
Цитата:

-- Главный select
type main is
select ma(
ma.[FILIAL].[CODE] : tFIL,
ma.[INTERNAL_CODE] : tINT,
ma.[NAME] : tNAME,
ma.[REGISTR_NUM] : tREG,
ma.[INN] : tINN
)
in [CLIENT]
Where ma.[FILIAL].[CODE] is not null
and ma.[INTERNAL_CODE] in
(
select cod
(
cod.[INTERNAL_CODE]
) in [CLIENT] where(select acc
(
COUNT(acc)
) in [AC_FIN] where acc.[CLIENT_V]=cod
) >0
)
and
(select clon
(
COUNT(clon.[INN])
) in [CLIENT] where clon.[INN]=ma.[INN] and ma.[FILIAL].[CODE]!=clon.[FILIAL].[CODE]
) > 0
order by ma.[INN],ma.[NAME];


хотел его изменить так понадобилось допольнительная обработка информаций. Сделал select main temp-ом и решил обработать его уже в другом select main, но уже при простом выводе информаций данное представление не показывает ничего.
Цитата:

-- Главный select
type temp is
select ma(
ma.[FILIAL].[CODE] : tFIL,
ma.[INTERNAL_CODE] : tINT,
ma.[NAME] : tNAME,
ma.[REGISTR_NUM] : tREG,
ma.[INN] : tINN
)
in [CLIENT]
Where ma.[FILIAL].[CODE] is not null
and ma.[INTERNAL_CODE] in
(
select cod
(
cod.[INTERNAL_CODE]
) in [CLIENT] where(select acc
(
COUNT(acc)
) in [AC_FIN] where acc.[CLIENT_V]=cod
) >0
)
and
(select clon
(
COUNT(clon.[INN])
) in [CLIENT] where clon.[INN]=ma.[INN] and ma.[FILIAL].[CODE]!=clon.[FILIAL].[CODE]
) > 0
order by ma.[INN],ma.[NAME];

type main is
select ma(
ma.tFIL,
ma.tINT,
ma.tNAME,
ma.tREG,
ma.tINN
)
in temp;

А в ответ пустота. Что ни так????
ggrey
Участник со стажем


Вступление в Клуб: 01.10.2007
СообщениеВт Янв 12, 2010 09:45    Ответить с цитатой
Полезность: Нет оценки
Покажите SQL текст получившегося представления, а также текст SQL обращения к представления с включенным служебным интерфейсом. Подозреваю, что у вас не заполнились или не корректно заполнились системные колонки вроде class_id в данном случае. Так же можете попробовать создать это представление в типе не имеющем предков/потомков. И еще имхо этот запрос должен заметно быстрее работать через exists.
cymtu
Участник - экстремал


Вступление в Клуб: 26.03.2008
СообщениеВт Янв 12, 2010 11:50    Ответить с цитатой
Полезность: Нет оценки
Цитата:

SELECT /*+ FIRST_ROWS(1) */ ID, CLASS_ID, C_1, C_2, C_3, TO_CHAR(C_4) C_4, C_5 FROM $$$.VW_CRIT_VLB_INN V WHERE (CLASS_ID = ?) AND (ROWNUM <= ?) ORDER BY C_1

Параметры:
ClassID = KRED_PERS
P1 = 'KRED_PERS'
P2 = 200


Цитата:

/* CREATE OR REPLACE VIEW VW_CRIT_VLB_INN AS */
SELECT
0 ID, 'PR_CRED' Class_Id,
a1.TFIL C_1,
a1.TINT C_2,
a1.TNAME C_3,
a1.TREG C_4,
a1.TINN C_5
from (
select a2.C_CODE TFIL, a1.C_INTERNAL_CODE TINT, a1.C_NAME TNAME, a1.C_REGISTR_NUM TREG, a1.C_INN TINN
from Z#BRANCH a2, Z#CLIENT a1
where a1.C_FILIAL=a2.id
and (a2.C_CODE is not NULL and a1.C_INTERNAL_CODE in (
select b1.C_INTERNAL_CODE A$1
from Z#CLIENT b1
where (
select COUNT(c1.ID) A$1
from Z#AC_FIN c1
where c1.C_CLIENT_V = b1.ID
) > 0
) and (
select COUNT(d1.C_INN) A$1
from Z#BRANCH d2, Z#CLIENT d1
where d1.C_FILIAL=d2.id
and (d1.C_INN = a1.C_INN and a2.C_CODE != d2.C_CODE)
) > 0)
order by a1.C_INN,a1.C_NAME
) a1
WHERE
( SYS_CONTEXT('IBS_SYSTEM','ADMIN')='1' OR
SYS_CONTEXT('IBS_RIGHTS','118870539')='1'
AND
( SYS_CONTEXT('IBS_RIGHTS','PR_CRED')='1'
)
)

AND SYS_CONTEXT('IBS_OPTIONS','118870539') is null
AND SYS_CONTEXT('USERENV', 'CLIENT_IDENTIFIER') is null
[/code]
ggrey
Участник со стажем


Вступление в Клуб: 01.10.2007
СообщениеВт Янв 12, 2010 12:21    Ответить с цитатой
Полезность: 1
Ответ есть в Вашем посте:
Цитата:
SELECT /*+ FIRST_ROWS(1) */ ID, CLASS_ID, C_1, C_2, C_3, TO_CHAR(C_4) C_4, C_5 FROM $$$.VW_CRIT_VLB_INN V WHERE (CLASS_ID = ?) AND (ROWNUM <= ?) ORDER BY C_1

Параметры:
ClassID = KRED_PERS
P1 = 'KRED_PERS'

P2 = 200


Цитата:
/* CREATE OR REPLACE VIEW VW_CRIT_VLB_INN AS */
SELECT
0 ID, 'PR_CRED' Class_Id,
a1.TFIL C_1,
a1.TINT C_2,
a1.TNAME C_3,
a1.TREG C_4,
a1.TINN C_5
from (
select a2.C_CODE TFIL, a1.C_INTERNAL_CODE TINT, a1.C_NAME TNAME, a1.C_REGISTR_NUM TREG, a1.C_INN TINN
from Z#BRANCH a2, Z#CLIENT a1
where a1.C_FILIAL=a2.id
and (a2.C_CODE is not NULL and a1.C_INTERNAL_CODE in (
select b1.C_INTERNAL_CODE A$1
from Z#CLIENT b1
where (
select COUNT(c1.ID) A$1
from Z#AC_FIN c1
where c1.C_CLIENT_V = b1.ID
) > 0
) and (
select COUNT(d1.C_INN) A$1
from Z#BRANCH d2, Z#CLIENT d1
where d1.C_FILIAL=d2.id
and (d1.C_INN = a1.C_INN and a2.C_CODE != d2.C_CODE)
) > 0)
order by a1.C_INN,a1.C_NAME
) a1
WHERE
( SYS_CONTEXT('IBS_SYSTEM','ADMIN')='1' OR
SYS_CONTEXT('IBS_RIGHTS','118870539')='1'
AND
( SYS_CONTEXT('IBS_RIGHTS','PR_CRED')='1'
)
)

AND SYS_CONTEXT('IBS_OPTIONS','118870539') is null
AND SYS_CONTEXT('USERENV', 'CLIENT_IDENTIFIER') is null


т.е в представлении пишем
Цитата:
-- Главный select
type temp is
select ma(
ma.[FILIAL].[CODE] : tFIL,
ma.[INTERNAL_CODE] : tINT,
ma.[NAME] : tNAME,
ma.[REGISTR_NUM] : tREG,
ma.[INN] : tINN
)
in [CLIENT]
Where ma.[FILIAL].[CODE] is not null
and ma.[INTERNAL_CODE] in
(
select cod
(
cod.[INTERNAL_CODE]
) in [CLIENT] where(select acc
(
COUNT(acc)
) in [AC_FIN] where acc.[CLIENT_V]=cod
) >0
)
and
(select clon
(
COUNT(clon.[INN])
) in [CLIENT] where clon.[INN]=ma.[INN] and ma.[FILIAL].[CODE]!=clon.[FILIAL].[CODE]
) > 0
order by ma.[INN],ma.[NAME];

type main is
select ma(
'KRED_PERS' : class_id
ma.tFIL,
ma.tINT,
ma.tNAME,
ma.tREG,
ma.tINN
)
in temp;

это будет работать только при просмотре представления из типа "Кредиты частным лицам", т.к. в Вашем случае нет никакой явной привязки к типу кредита
r00st
Эксперт


Вступление в Клуб: 14.09.2007
СообщениеВт Янв 12, 2010 14:32    Ответить с цитатой
Полезность: 1
Может флаг "показывать дочерние типы" поможет?
ggrey
Участник со стажем


Вступление в Клуб: 01.10.2007
СообщениеВт Янв 12, 2010 14:48    Ответить с цитатой
Полезность: 1
точно поможет галка "Не добавлять системные колонки", забыл что она так же убирает проверку класса из обращения к view в навигаторе, мой предыдущий пост можно пропустить
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
Страница 1 из 1

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