but DO doesn´t return values, or it does ? execute block returns(ID Integer, Name varchar(50), LastInvoice Date, ...) as begin for select ID, Name from Customers where ... into ID, Name do begin select bla, bla, bla from functionX(ID) into ...; if ... then bla = X else bla = Y; if bla = XXX then suspend; -- here we return a record and as we are inside a loop we will return several records; end end
As you can see, this entire block can be called from client dynamically, their result fields are defined when it runs and we can return a set of records. So, DO doen´t work this way, does it ?
You can use temporary function in PostgreSQL. DO command has not result. Theoretically, you can use a cursor with transaction scope. It can be filled in DO command and outer can be read by FETCH command.