Обсуждение: Issue with passing NULL for function parameter

Поиск
Список
Период
Сортировка

Issue with passing NULL for function parameter

От
Archana Sachin Ghag
Дата:
I have wriiten following simple function in postgresql

CREATE OR REPLACE FUNCTION "MySchema".add_user(p_name character varying, p_=
email1 character varying, p_email2 character varying)
  RETURNS bigint AS
$BODY$
DECLARE
                userId bigint;
BEGIN
                INSERT INTO "MySchema"."User"("Name" ,"EMail1" , "EMail2")
                                VALUES ($1 , $2, $3) ;

                Select CURRVAL('"MySchema".user_seq_userid') into userId;

                return userid;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE STRICT

Function works absoolutely fine if I provide values for all three parameter=
s. Record gets inserted too.

But if I pass NULL for say last parameter, using  SELECT "MySchema".add_use=
r('A' , 'A', NULL)
function does not do anything and return zero.
No error is shown. But record is not inserted in table.
All columns in table can have NULL value.

**************** CAUTION - Disclaimer *****************
This e-mail contains PRIVILEGED AND CONFIDENTIAL INFORMATION intended solel=
y=20
for the use of the addressee(s). If you are not the intended recipient, ple=
ase=20
notify the sender by e-mail and delete the original message. Further, you a=
re not=20
to copy, disclose, or distribute this e-mail or its contents to any other p=
erson and=20
any such actions are unlawful. This e-mail may contain viruses. Infosys has=
 taken=20
every reasonable precaution to minimize this risk, but is not liable for an=
y damage=20
you may sustain as a result of any virus in this e-mail. You should carry o=
ut your=20
own virus checks before opening the e-mail or attachment. Infosys reserves =
the=20
right to monitor and review the content of all messages sent to or from thi=
s e-mail=20
address. Messages sent to or from this e-mail address may be stored on the=
=20
Infosys e-mail system.
***INFOSYS******** End of Disclaimer ********INFOSYS***

Re: Issue with passing NULL for function parameter

От
Heikki Linnakangas
Дата:
On 03.11.2011 13:32, Archana Sachin Ghag wrote:
> I have wriiten following simple function in postgresql
>
> CREATE OR REPLACE FUNCTION "MySchema".add_user(p_name character varying, p_email1 character varying, p_email2
charactervarying) 
>    RETURNS bigint AS
> $BODY$
> DECLARE
>                  userId bigint;
> BEGIN
>                  INSERT INTO "MySchema"."User"("Name" ,"EMail1" , "EMail2")
>                                  VALUES ($1 , $2, $3) ;
>
>                  Select CURRVAL('"MySchema".user_seq_userid') into userId;
>
>                  return userid;
> END;
> $BODY$
>    LANGUAGE plpgsql VOLATILE STRICT
>
> Function works absoolutely fine if I provide values for all three parameters. Record gets inserted too.
>
> But if I pass NULL for say last parameter, using  SELECT "MySchema".add_user('A' , 'A', NULL)
> function does not do anything and return zero.

Yeah. That's what STRICT means.

http://www.postgresql.org/docs/9.1/static/sql-createfunction.html

--
   Heikki Linnakangas
   EnterpriseDB   http://www.enterprisedb.com