No system tables can contains information of your anonymous PL/SQL block. In your first message you have written:
Query.Sql.Text := ':Result := MyProc

arg1);';
First of all, this is invalid, it shall be:
Query.Sql.Text := 'begin :Result := MyProc

arg1); end;';
Secondly, your PL/SQL block may be much more complicated and may contain a lot of variables, which can be not just obtained as stored function results, but calculated directly inside the block, so there is absolutely no way for database which variables and of which type you plan to obtain from this block, you only are able to know!
So when you construct that block you shall supply information concerning those variables with DeclareVariable call.
Your concern is that you have to call arbitrary function, not known in advance. You can query its parameter types as well as result type from USER_ARGUMNTS (or ALL_ARGUMENTS if it is located in different schema) system view, then call DeclareVariable.