Обсуждение: Inserting data from one database to another using stored functions

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

Inserting data from one database to another using stored functions

От
"Benjie Buluran"
Дата:
<div class="Section1"><p class="MsoNormal">Hi pgAdmin Support!<p class="MsoNormal"> <p class="MsoNormal">I’m stumped on
thisquestion for over 3 days now.<p class="MsoNormal"> <p class="MsoNormal">I need to run a stored function in Database
A(“sf DBa”) which calls a stored function in Database B (“sf DBb”).<p class="MsoNormal"> <p class="MsoNormal">Here’s
“sfDBa”:<p class="MsoNormal">CREATE OR REPLACE FUNCTION sp_update_serialnumber(pserialnumber character varying,
pActivityIdinteger)<p class="MsoNormal">  RETURNS void AS<p class="MsoNormal">$BODY$<p class="MsoNormal">BEGIN<p
class="MsoNormal">               UPDATE TABLESSERIALNUM SET SerialNumber = pSerialNumber WHERE ActivityID = pActivityId
;<pclass="MsoNormal"> <p class="MsoNormal">                BEGIN<p class="MsoNormal">                               
PERFORMdblink_connect('dbname=testdb port=5432 user=postgres password=123456');<p
class="MsoNormal">                               PERFORM dblink_exec('SELECT sp_insert_detailtable('|| pActivityId ||',
'||pserialnumber ||')');<p class="MsoNormal">                                PERFORM dblink_disconnect();<p
class="MsoNormal">               END;<p class="MsoNormal">END;<p class="MsoNormal">$BODY$<p class="MsoNormal"> 
LANGUAGEplpgsql VOLATILE<p class="MsoNormal">  COST 100;<p class="MsoNormal"> <p class="MsoNormal">Here’s “sf DBb”:<p
class="MsoNormal">CREATEOR REPLACE FUNCTION sp_insert_detailtable(pactivityid integer, pserialnumber character
varying)<pclass="MsoNormal">  RETURNS void AS<p class="MsoNormal">$BODY$<p class="MsoNormal">BEGIN<p
class="MsoNormal">               <p class="MsoNormal">                INSERT INTO DETAILTABLE(LogID, LogDetailSeq)<p
class="MsoNormal">               VALUES(pactivityid, pserialnumber);<p class="MsoNormal">END;<p
class="MsoNormal">$BODY$<pclass="MsoNormal">  LANGUAGE plpgsql VOLATILE<p class="MsoNormal">  COST 100;<p
class="MsoNormal"> <pclass="MsoNormal">I’m using the DEBUG function in pgAdmin, and I keep getting the “<b>statement
returningresults not allowed</b>” error in <i>PERFORM dblink_exec('SELECT sp_insert_detailtable('|| pActivityId ||',
'||pserialnumber ||')');</i> in this line.<p class="MsoNormal"> <p class="MsoNormal">Your help is highly appreciated!<p
class="MsoNormal"> <pclass="MsoNormal">Thanks and Best Regards,<p class="MsoNormal">Benjie</div> 

Re: Inserting data from one database to another using stored functions

От
Guillaume Lelarge
Дата:
Hi,

Le 06/01/2011 07:01, Benjie Buluran a écrit :
> [...]
> I'm stumped on this question for over 3 days now.
> 
> I need to run a stored function in Database A ("sf DBa") which calls a
> stored function in Database B ("sf DBb").
> 
> Here's "sf DBa":
> 
> CREATE OR REPLACE FUNCTION sp_update_serialnumber(pserialnumber character
> varying, pActivityId integer)
>   RETURNS void AS
> $BODY$
> BEGIN
>                 UPDATE TABLESSERIALNUM SET SerialNumber = pSerialNumber
> WHERE ActivityID = pActivityId ;
>                 BEGIN
>                                 PERFORM dblink_connect('dbname=testdb
> port=5432 user=postgres password=123456');
>                                 PERFORM dblink_exec('SELECT
> sp_insert_detailtable('|| pActivityId ||', '|| pserialnumber ||')');
>                                 PERFORM dblink_disconnect();
>                 END;
> END;
> $BODY$
>   LANGUAGE plpgsql VOLATILE
>   COST 100;
> 
> Here's "sf DBb":
> 
> CREATE OR REPLACE FUNCTION sp_insert_detailtable(pactivityid integer,
> pserialnumber character varying)
>   RETURNS void AS
> $BODY$
> BEGIN
>                 INSERT INTO DETAILTABLE(LogID, LogDetailSeq)
>                 VALUES(pactivityid, pserialnumber);
> END;
> $BODY$
>   LANGUAGE plpgsql VOLATILE
>   COST 100;
> 
> I'm using the DEBUG function in pgAdmin, and I keep getting the "statement
> returning results not allowed" error in PERFORM dblink_exec('SELECT
> sp_insert_detailtable('|| pActivityId ||', '|| pserialnumber ||')'); in this
> line.
> 

You should better do an EXECUTE rather than a PERFORM.

Anyway, this is not specific to pgAdmin. You should better ask on
pgsql-general.


-- 
Guillaumehttp://www.postgresql.frhttp://dalibo.com