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