On 15/08/2022 04:16, Simonov Denis via Firebird-devel wrote:
>
> Very good feature, reminds me of the functionality from Oracle
>
> WITH Procedure p1 ...
> AS
> ...
> FUNCTION f1 ...
> AS
> ...
> SELECT...
>
Plus, DECLARE VAR := ?
But things are very less useful for them due to their BEGIN...END blocks
not capable of produce multiple rows result, nor subfunctions not able
to be pipelined, etc.
> However, it's not entirely clear to me how client applications handle
> named parameters (which will be replaced with "?")? It seems to me
> unnamed parameters "?" (which in client applications will most likely be
> named) leave either in the <input parameter list> or in the request
> itself. I vote for them to remain only in the request.
>
Firebird does not have any support for client named parameters.
As Mark told, it will require client support.
> Just try to implement EXECUTE STATEMENT with your syntax and support for
> named parameters, then it will become clear what I'm talking about. My
> option is this.
>
I suppose if standalone statements is going to have support of named
parameters as EXECUTE STATEMENT, undeclared named parameters are going
to be automatically declared and comes after the explicit ones.
> Syntax:
>
> execute sql
> [<subroutines>]
> do <sql command>
>
> Here is how it can be used:
>
> execute sql
> declare function subfunc (i1 integer) returns integer
> as
> begin
> return i1;
> end
>
> declare procedure subproc (i1 integer) returns (o1 integer)
> as
> begin
> o1 = i1;
> suspend;
> end
> do
> select subfunc(?) + o1
> from subproc(?)
>
This reduces a lot the usefulness of the statement and I do not agree.
A path I can follow is to be like Oracle and have the "parameters"
declared as variables:
-----
execute sql
declare variable p1 integer = ?;
declare variable p2 integer = ?;
declare function subfunc (i1 integer) returns integer
as
begin
return i1;
end
declare procedure subproc (i1 integer) returns (o1 integer)
as
begin
o1 = i1;
suspend;
end
do
select subfunc(:p1) + o1
from subproc(:p2 + ?)
-----
But I still prefer parameters to be parameters, like in EXECUTE BLOCK.
Adriano
Firebird-Devel mailing list, web interface at
https://lists.sourceforge.net/lists/listinfo/firebird-devel