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