Добрый день !
Столкнулся с таким фокусом:
В Firebird Embedded 2.1 (2.1.3.18185) и в Firebird 2.1 SuperServer
(2.1.2.18118), на классике не проверял, нижеприведенный код возвращает
разные результаты. Firebird Embedded во внутреннем селекте не находит
записей, которые там на самом деле есть.
For Select Doc_PKey, Doc_Day, Number, Amount, Account_A, Account_B,
MFO_A, MFO_B,
OKPO_A, OKPO_B, Details
From KRB_From_Bank
Where Doc_Day = :Doc_Day And
Pay_Type = 2 And
Account_A = :Account
Into :PKey, :Doc_Day, :Number, :Debet, :Account_A, :Account_B,
:MFO_A, :MFO_B, :OKPO_A, :OKPO_B, :Details
Do
Begin
if ( Not Exists
( Select Doc_PKey, Number, Amount, B, Details
From Krb_Out
Where Account_A = :Account_A And
Account_B = :Account_B And
MFO_A = :MFO_A And
MFO_B = :MFO_B And
OKPO_A = :OKPO_A And
OKPO_B = :OKPO_B And
Number = :Number And
Amount = :Debet And
Doc_Day = :Doc_Day And
Doc_Status in ( '5', '6', '7', 'A' )
) ) Then
Begin
Pay_Type = 2 ;
Credit = NULL ;
Suspend ;
End
End
Переписал этот кусок процедуры на следующее и все стало Ок :
For Select k.Doc_PKey, k.Doc_Day, k.Number, k.Amount, k.Details
From KRB_From_Bank k
left join Krb_Out o on
k.Account_a = o.Account_a
and k.Account_b = o.Account_b
and k.Mfo_a = o.Mfo_a
and k.Mfo_b = o.Mfo_b
and k.okpo_a = o.okpo_a
and k.okpo_b = o.okpo_b
and k.Number = o.Number
and k.amount = o.Amount
and k.Doc_day = o.Doc_day
And o.Doc_Status in ( '5', '6', '7', 'A' )
Where
k.Doc_Day = :Doc_Day
And k.Pay_Type = 2
And k.Account_A = :Account
And o.Doc_pkey is Null
Into :PKey, :Doc_Day, :Number, :Debet, :Details
Do
Begin
Pay_Type = 2 ;
Credit = NULL ;
Suspend ;
End
End