Re: named parameters in SQL functions - Mailing list pgsql-hackers

From David E. Wheeler
Subject Re: named parameters in SQL functions
Date
Msg-id 650E8660-07B4-40BD-89E2-53E170A92DDB@kineticode.com
Whole thread Raw
In response to Re: named parameters in SQL functions  (Greg Stark <gsstark@mit.edu>)
List pgsql-hackers
On Nov 15, 2009, at 11:35 AM, Greg Stark wrote:

> I don't think SQL is the height of language design either. But trying
> to turn it into another language piece by piece is not gong to make it
> any nicer.

I don't know of anyone suggesting such a thing.

> A sigil here doesn't accomplish anything. The identifiers in question
> are *just* like other identifiers. They can be used in expressions
> just like other columns, they have various types, they have the same
> syntax as other columns, the sigil doesn't mean anything.

So what is the $ for in $1, $2, etc.?

> I think what may be making this tempting is that they look vaguely
> like ODBC/JDBC/DBI placeholders like :foo. However they're very very
> different. In those cases the sigil is marking the sigil outside the
> SQL syntax. They will be replaced textually without parsing the SQL at
> all. It's actually very confusing having $foo indicate something
> within SQL since it makes it look like it's some external thing from
> another layer like the placeholders.

It's not in SQL; it's in SQL functions (and DO blocks). AFAIK, the major database vendors all use some sort of
characterto identify variables within functions. It's proven, avoids conflicts (you can't have an identifier named
$foo,as Andrew just pointed out), and just generally makes maintenance easier. 

Best,

David



pgsql-hackers by date:

Previous
From: Simon Riggs
Date:
Subject: Re: Summary and Plan for Hot Standby
Next
From: Heikki Linnakangas
Date:
Subject: Re: Summary and Plan for Hot Standby