Re: CALL optional in PL/pgSQL - Mailing list pgsql-hackers

From Andrew Dunstan
Subject Re: CALL optional in PL/pgSQL
Date
Msg-id CAA8=A788ZvVQJ7YfjvmZS_WjnpuBDzc0gyJ=UY+ttG0-9KM4kQ@mail.gmail.com
Whole thread Raw
In response to Re: CALL optional in PL/pgSQL  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: CALL optional in PL/pgSQL  (Heikki Linnakangas <hlinnaka@iki.fi>)
List pgsql-hackers
On Fri, Mar 2, 2018 at 2:01 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
> Pavel Stehule <pavel.stehule@gmail.com> writes:
>> 2018-03-01 5:51 GMT+01:00 Peter Eisentraut <peter.eisentraut@2ndquadrant.com
>>> This seems to be a popular issue when porting from PL/SQL, so I'll throw
>>> it out here for discussion.  Apparently, in PL/SQL you can call another
>>> procedure without the CALL keyword.  Here is a patch that attempts to
>>> implement that in PL/pgSQL as well.  It's not very pretty.
>
>> The CALL is not optional in PL/SQL - I was surprised - it is required in
>> some environments, and it should not be used in other (like PL/SQL)


It's not required in a PL/SQLl block, see
<https://www.tutorialspoint.com/plsql/plsql_procedures.htm>

This is hardly surprising given PL/SQL's Ada roots. This is exactly
how Ada allows procedure calls.


>
> I think this is an actively bad idea.  It introduces an inherent ambiguity
> into the grammar; for instance
>
>         PERFORM (2);
>
> now has two valid interpretations.  The only way to resolve that is with
> heuristics or treating a bunch more words as reserved keywords, neither of
> which are appetizing.  (I didn't look to see which way Peter did it, but
> his description of his patch as "not very pretty" doesn't fill me with
> happiness.)  And it would likely cause headaches down the road whenever
> we attempt to add new syntax to plpgsql.
>
> I think we should reject the idea.


Well, the upside would be increased Oracle compatibility. I don't
think that's worthless.

I haven't dug deeply into it, but Peter's patch didn't look
desperately ugly to me at first glance.

Even though it's a tiny patch this seems like next release material at best.

>
>>> Also, I think PL/SQL allows you to call a procedure with no arguments
>>> without parentheses.  I have not implemented that.  I think it could be
>>> done, but it's not very appealing.
>
>> I don't like this feature.
>
> This idea is even worse in terms of the amount of syntax space it will
> occupy, again for zero functional benefit.
>

If we were going to do it then we should be consistent about it and
also allow parameter-less function calls to skip the parentheses. But
anyway none of that is currently proposed so let's save the argument
for the time when it is :-)

cheers

andrew

-- 
Andrew Dunstan                https://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services


pgsql-hackers by date:

Previous
From: Craig Ringer
Date:
Subject: Re: Proposal: http2 wire format
Next
From: David Rowley
Date:
Subject: Re: Parallel Aggregates for string_agg and array_agg