No current record for fetch operation
You might get this error message together with:
SQL Message : -508
The cursor identified in the update or delete statement is not positioned on a row.
It happens when one of the data streams is not ready to provide a value. For example, if you join a table and stored procedure by supplying a table column's value as parameter to procedure:
select t1.id, sp1.field1
from t1
join sp1(t1.id) on 1=1;
Since it is an INNER JOIN (streams are equal) Firebird tries to evaluate procedure SP1 before fetching any records from table T1. You can change this query to LEFT JOIN to ensure table's records are fetched:
select t1.id, sp1.field1
from t1
left join sp1(t1.id) on 1=1;
However, note that this is not the equivallent query. If your stored procedure never returns NULL in field1, you can write it like this:
select t1.id, sp1.field1
from t1
left join sp1(t1.id) on 1=1
where sp1.field is not null;
This error also shows up when you have multiple joins and Firebird has problem creating the data stream. You can fix it by rewriting your query to make sure all LEFT joins code after all INNER joins (see FAQ #93 for join types).