Re: plpgsql help - nested loops

From: Cedar Cox <cedarc(at)visionforisrael(dot)com>
To: "Robert B(dot) Easter" <reaster(at)comptechnews(dot)com>
Cc: pgsql-interfaces(at)postgresql(dot)org
Subject: Re: plpgsql help - nested loops
Date: 2001-01-03 20:13:14
Message-ID: Pine.LNX.4.21.0101032201050.1686-100000@nanu.visionforisrael.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-interfaces


On Wed, 3 Jan 2001, Robert B. Easter wrote:

> See:
> http://www.comptechnews.com/~reaster/dbdesign.html#three-valued-logic
>
> I think it might clarify the situation. If you find any errors on the page,
> please let me know.
>
> Ordinary equality comparions (=,>=,<=) between a NULL and anything else
> always results in NULL, normally. NULL in boolean comparisons, IS, IS NOT,
> AND, and OR can give different results. Your equals comparison was always
> giving NULL when comparing the two fields together directly. You were
> getting a confusing result when comparing equality of one field directly with
> NULL, which normally would be NULL too except that PostgreSQL is doing some
> rewriting of the expressing behind your back, changing anything it sees with
> an equality operator and a literal NULL into a boolean comparison "field IS
> NULL" (true if field is NULL) instead of "field = NULL" (normally always NULL
> in the absence of a write you aren't seeing within the database).
>
> I think that is what the deal is. The proper way to check for null, if it is
> a possibility (no NOT NULL constraint), is to use boolean operators (IS, IS
> NOT) explicitly to check.

Ok, makes sense.. This should be, if there isn't, documented somewhere
about the rewriting. So I guess the proper way would be more like the
second example except using 'is':

if sloop.serialnumber=rloop.serialnumber or
(sloop.serialnumber is null and rloop.serialnumber is null) then
raise notice '' SN match'';
else
raise notice '' SN mis-match'';
end if;

Of course, I'd use isnull instead. I wish I didn't have to type that
little bit more just to compare two variables.. ;)

Thanks,
-Cedar

In response to

Browse pgsql-interfaces by date

  From Date Subject
Next Message Tom Lane 2001-01-03 20:36:49 Re: [SQL] Numeric and money
Previous Message Cedar Cox 2001-01-03 20:00:33 Re: ODBC - Invalid protocol character