Ошибка при компиляции
Модераторы: m0p3e, edward_K, Модераторы
Ошибка при компиляции
//вот так всё работает
.create view vSpStep
from
SpStep (ReadOnly),
KatParty (ReadOnly)
where
((
PosNRec == SpStep.nRec
and SpStep.cParty == KatParty.nRec
));
//после добавленя строки and word(2)==SpStep.PRMC
//компилятор ругается "нужен ключ NREC+PRMC для SPSTEP"
//Как правельно вставить это условие "word(2)==SpStep.PRMC"
//во вьюху?
.create view vSpStep
from
SpStep (ReadOnly),
KatParty (ReadOnly)
where
((
PosNRec == SpStep.nRec
and SpStep.cParty == KatParty.nRec
and word(2)==SpStep.PRMC
));
.create view vSpStep
from
SpStep (ReadOnly),
KatParty (ReadOnly)
where
((
PosNRec == SpStep.nRec
and SpStep.cParty == KatParty.nRec
));
//после добавленя строки and word(2)==SpStep.PRMC
//компилятор ругается "нужен ключ NREC+PRMC для SPSTEP"
//Как правельно вставить это условие "word(2)==SpStep.PRMC"
//во вьюху?
.create view vSpStep
from
SpStep (ReadOnly),
KatParty (ReadOnly)
where
((
PosNRec == SpStep.nRec
and SpStep.cParty == KatParty.nRec
and word(2)==SpStep.PRMC
));
-
- Местный житель
- Сообщения: 2898
- Зарегистрирован: 24 июн 2005, 12:12
- Откуда: Иркутская область
не согласен. как раз сегодня писал
жесткой подцепки не получилось, пришлось ставить её самому
Код: Выделить всё
and arciznos.ckatos == katosARC.nrec
and (arcdate < katosARC.datv OR katosARC.datv=0 )
Код: Выделить всё
and arciznos.ckatos /== katosARC.nrec
and (arcdate < katosARC.datv OR katosARC.datv=0 )
-
- Местный житель
- Сообщения: 1846
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
А мне кажется не так.. конструкция () внутри (()) - это узловой фильтр. Нужно его просто правильно применять. И не вполне понятна Ваша аналогия с жесткой подцепкой - такой фильтр просто фильтрует на n-м узле лог. таб. записи.edward_K писал(а):лучше писать
word(2)==SpStep.PRMC (noindex)
такая конструкция пашет надежней, а "=" в "(())" иногда глючит , тогда лучше это за скобки выносить, кроме того = задает условие жесткой подцепки на всю вьюху.
Возьмем простой пример :
select * from persons,lschet
where ((
persons.nrec==lschet.tperson
and (lschet.tabn<100)
and lschet.nrec == sumvidop.clsch
));
При отработке такой конструкции валидация узла lschet.nrec == sumvidop.clsch даже не будет проверяться, если таб № <100
Смысл же жесткой подцепки немного в другом.
Что касается того,что выносить за (()) :
1. Слышал от прикладников что лучше не применять подобную кострукцию.
2. Теоретически такая конструкция медленнее узлового фильтра, поскольку вначале проверяются вся связки тип == а только потом накладывается фильтр на проверку. При узловом же фильтре отсекается на нужном узле и длее проверка не производится. Разница будет тем больше, чем больше узлов задействовано в ЛТ