Цитата:
Сообщение от
Lemming
У меня отработало аналогично джобу из оригинального поста. В общем, в любом раскладе, судя по такой неустойчивости к версиям и СУБД, лучше не забавляться с такими связками в реальных проектах.
Да, это точно!
Ещё прикол:
X++:
i = 0;
while select ledgerTableTmp
join ledgerTrans
where ledgerTrans.AccountNum == ledgerTableTmp.AccountNum
{
info('1:' + ledgerTrans.AccountNum);
i++;
if (transCnt && i == transCnt)
break;
}
i = 0;
while select ledgerTrans
join ledgerTableTmp
where ledgerTrans.AccountNum == ledgerTableTmp.AccountNum
{
info('2:' + ledgerTrans.AccountNum);
i++;
if (transCnt && i == transCnt)
break;
}
i = 0;
while select ledgerTableTmp
join ledgerTrans
where ledgerTrans.AccountNum == ledgerTableTmp.AccountNum
{
info('3:' + ledgerTrans.AccountNum);
i++;
if (transCnt && i == transCnt)
break;
}
1 и 3 - одинаковые.
При этом 1 посылает к СУБД запрос (гы

) следующего вида:
PHP код:
SELECT ...FROM LEDGERTRANS A WHERE ((SUBSTR(NLS_LOWER(DATAAREAID),1,3)=NLS_LOWER(:in1)/*'mil'*/) AND (SUBSTR(NLS_LOWER(ACCOUNTNUM),1,10)=SUBSTR(NLS_LOWER(ACCOUNTNUM),1,10)))
(т.е. на самом деле не совсем декартово произведение, а вообще просто выборка из LedgerTrans, без учёта нашей временной таблицы)
2 - делает нормальное декартово произведение
3 - не выполняется вообще (ни запроса, ни инфо)! (именно после выполнения 2, т.к. 1 - выполняется)
15 мин. голову ломал... бред какой-то...