Hi,

I need to do a procedure that does an INSERT and an UPDATE.

The procedure works in this way:

[quote]
CREATE OR REPLACE FUNCTION "public"."apr_insert_newsletter_distritos"
("pSTRING_ARRAY" varchar, "pEMAIL" varchar, "pITEMS" integer,
"pID_WEBSITE_RECOLHA" varchar) RETURNS void AS
$body$
DECLARE
    pSTRING_ARRAY    alias for $1;
    pEMAIL      alias for $2;
    pITEMS     alias for $3;
    pID_WEBSITE_RECOLHA  alias for $4;
    vARRAY_DIST    varchar[];
BEGIN
 -- Passar o pSTRING_ARRAY para ARRAY
 SELECT string_to_array(pSTRING_ARRAY, ',') into vARRAY_DIST;
    --RAISE NOTICE 'BILHETE_IDENTIFICACAO: %' , vARRAY_DIST;

    -- Transacção

     FOR i IN 1 .. pITEMS LOOP
     INSERT INTO am_newsletter_distritos (email, id_website_recolha,
id_distrito)
     values (pEMAIL, pID_WEBSITE_RECOLHA, vARRAY_DIST[i]);
     END LOOP;

     update am_newsletter_emails set subscri_completa = '1'
     where email = pEMAIL and id_website_recolha = pID_WEBSITE_RECOLHA;

END;
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
[/quote]

Compile OK

But I can't complite if I add to the procedure a BEGIN and a COMMIT. I think
this BEGIN and COMMIT will make a real transaction or I'am wrong?

[quote]
CREATE OR REPLACE FUNCTION "public"."apr_insert_newsletter_distritos"
("pSTRING_ARRAY" varchar, "pEMAIL" varchar, "pITEMS" integer,
"pID_WEBSITE_RECOLHA" varchar) RETURNS void AS
$body$
DECLARE
    pSTRING_ARRAY    alias for $1;
    pEMAIL      alias for $2;
    pITEMS     alias for $3;
    pID_WEBSITE_RECOLHA  alias for $4;
    vARRAY_DIST    varchar[];
BEGIN
 -- Passar o pSTRING_ARRAY para ARRAY
 SELECT string_to_array(pSTRING_ARRAY, ',') into vARRAY_DIST;
    --RAISE NOTICE 'BILHETE_IDENTIFICACAO: %' , vARRAY_DIST;

    -- Transacção
    BEGIN
     FOR i IN 1 .. pITEMS LOOP
     INSERT INTO am_newsletter_distritos (email, id_website_recolha,
id_distrito)
     values (pEMAIL, pID_WEBSITE_RECOLHA, vARRAY_DIST[i]);
     END LOOP;

     update am_newsletter_emails set subscri_completa = '1'
     where email = pEMAIL and id_website_recolha = pID_WEBSITE_RECOLHA;
    COMMIT;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
[/quote]

Compile error: ERROR:  syntax error at end of input at character 917


What I need to do to have a real atomic transaction?


Best Regards,

Reply via email to