Unistoreproc Get boolean value

Discussion of open issues, suggestions and bugs regarding UniDAC (Universal Data Access Components) for Delphi, C++Builder, Lazarus (and FPC)
Post Reply
Suhaimin
Posts: 79
Joined: Mon 06 May 2013 12:19

Unistoreproc Get boolean value

Post by Suhaimin » Sat 22 Jun 2013 14:38

Hello,


I have a Function in PostgreSQL 9.1 :

CREATE OR REPLACE FUNCTION "FINDINVOICEVENO"( "STRINVOICENO" character varying)
RETURNS boolean AS
$BODY$BEGIN
SELECT "INVOICENO" FROM "PURCHASE"
WHERE ("INVOICENO" = $1);
IF FOUND THEN RETURN TRUE;
ELSE
RETURN FALSE;
END IF;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION "FINDINVOICENO"( character varying)
OWNER TO postgres;


How to get boolean value from this funcion with Unistoredproc ? thanks a lot

Suhaimin
Posts: 79
Joined: Mon 06 May 2013 12:19

Re: Unistoreproc Get boolean value

Post by Suhaimin » Tue 25 Jun 2013 00:34

Hello,

I used unistoredproc to get boolean value :

unistoredproc.close;
unistoredproc.parambyname('STRINVOICENO').VALUE := '1000';
Unistoredproc.open;

after open i got error message "Query has no destination for result data"... is it impossible to get boolean from that storedproc ? thanks a lot

AlexP
Devart Team
Posts: 5530
Joined: Tue 10 Aug 2010 11:35

Re: Unistoreproc Get boolean value

Post by AlexP » Wed 26 Jun 2013 05:47

Hello,

To solve the problem, you should modify your function in the following way:

Code: Select all

CREATE OR REPLACE FUNCTION "FINDINVOICEVENO"( "STRINVOICENO" character varying)
RETURNS boolean AS
$BODY$BEGIN
IF EXISTS (SELECT 1 FROM "PURCHASE" WHERE ("INVOICENO" = $1) THEN
  RETURN TRUE;
ELSE
  RETURN FALSE;
END IF;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION "FINDINVOICENO"( character varying)
OWNER TO postgres;
or

Code: Select all

CREATE OR REPLACE FUNCTION findinvoiceveno(a_dname character varying)
  RETURNS boolean AS
$BODY$BEGIN
PERFORM 1 FROM "PURCHASE" WHERE ("INVOICENO" = $1);
IF FOUND THEN RETURN TRUE;
ELSE
RETURN FALSE;
END IF;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION findinvoiceveno(character varying)
  OWNER TO postgres;
and use UniQuery instead of UniStoredProc, if you want to get the result as DataSet:

Code: Select all

UniQuery1.SQL.Text := 'SELECT FINDINVOICEVENO(:STRINVOICENO)';
UniQuery1.parambyname('STRINVOICENO').VALUE := '1000';
UniQuery1.Open;
, or execute the method

Code: Select all

UniStoredProc1.Execute;
and work with the parameter as

Code: Select all

UniStoredProc1.ParamByName('result').As..
.

Suhaimin
Posts: 79
Joined: Mon 06 May 2013 12:19

Re: Unistoreproc Get boolean value

Post by Suhaimin » Thu 27 Jun 2013 11:10

thanks a lot

AlexP
Devart Team
Posts: 5530
Joined: Tue 10 Aug 2010 11:35

Re: Unistoreproc Get boolean value

Post by AlexP » Mon 01 Jul 2013 11:28

Hello,

If you have any other questions, feel free to contact us

Post Reply