AW: What is the difference between NULL and "undef"

From: "Rudolph, Michael" <Michael(dot)Rudolph(at)telekom(dot)de>
To: "'Michael A(dot) Mayo'" <mmayo(at)mcauleybrooklyn(dot)org>, "'Alessio Bragadini'" <alessio(at)albourne(dot)com>
Cc: pgsql-sql(at)postgresql(dot)org
Subject: AW: What is the difference between NULL and "undef"
Date: 2000-05-17 06:11:22
Message-ID: EB8366869DABD2119F3200A0C9F02CC8016544EA@U8P27
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

Ok, I see now, what mistakes in thinking I made. Thanks to all who
informed me. But my original problem is not really solved, I just
made a workaround and I'm not sure, if there is a real solution:
I read in a date from an input-field of an formular. I now have to
check, if this input-variable is empty. If it is, I set it to NULL,
if not, I take it as input.

My program looks now in parts like this:

if ($var3 == 0){ $var3 = NULL } # Testing if empty
else {$var3 = "'$var3'";} # input-field is not empty

$rc = $dbh->do("INSERT INTO test1 (var1,var2,var3)
VALUES ('$var1','$var2',$var3)");

with var3 being my date-variable. I have to juggle with the quotes
to bring in the right value. If I wouldn't do the "'$var3'" in line 2,
there were a parser error of Postgres. If I set the variable $var3
in line 5 in quotes, NULL wouldn't be interpreted in the right way.
That solution works now, but it seems to me a bit fussy. And it is
a lot of testing and transforming, when there are a lot of date-
variables in the program.

Michael

>I believe you are confused about the meaning of "undef." In general,
>variables are classified as undefined in one of 2 ways:
>1) The variable is not declared, or is declared but no value is ever
>assigned to it
>2) The variable is assigned the return value of some function, and the
>function fails, returning undef.
>
>A valid value is not "undef." Things like empty string or the number 0 are
>valid values for a variable to have, and therefore are not "undef." Undef
>should be interpreted as "something is catastrophically wrong with this
>variable."
>
>CGI.pm returns an empty string for text form fields that are not filled out.
>Therefore, it is neccecary to test for the empty string and translate that
>to
>NULL or undef if you want an empty form field to work out to NULL.
>
>----------------------------------------------------------------------------
>On my system, the following mini-program inserts a NULL value:
>my $test_string; #note: no value assigned to test_string - it's undefined
>my $database = DBI->connect("dbi:Pg:dbname=test");
>
>$test_string = $database->quote($test_string);
>$database->do("
> INSERT INTO employees(name)
> VALUES($test_string)
>");

----------------------------------------------------------------------------
The following mini-program inserts an empty string:
my $test_string = ""; #empty string assigned to test_string
my $database = DBI->connect("dbi:Pg:dbname=test");

$test_string = $database->quote($test_string);
$sql_statement = $database->do("
INSERT INTO employees(name)
VALUES($test_string)
");
-Mike

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message Alex Guryanow 2000-05-17 07:51:49 lower() for varchar data by creating an index
Previous Message Thomas Lockhart 2000-05-17 05:38:58 Re: Question about databases in alternate locations...