After a very long effort, this is the solution:
CREATE OR REPLACE FUNCTION conflict.conflict_statistics(conference_id integer, OUT conflict_level text, OUT conflicts integer)
RETURNS SETOF record
LANGUAGE plpgsql
AS $function$
#variable_conflict use_variable
DECLARE
conflict TEXT;
conflict_rows INTEGER;
BEGIN
FOR conflict_level IN
SELECT conflict_level.conflict_level FROM conflict.conflict_level WHERE conflict_level.conflict_level <> 'silent' ORDER BY rank
LOOP
conflicts = 0;
FOR conflict IN
SELECT conference_phase_conflict.conflict
FROM
conflict.conference_phase_conflict
INNER JOIN conference ON (
conference.conference_id = conference_id AND
conference.conference_phase = conference_phase_conflict.conference_phase )
WHERE conference_phase_conflict.conflict_level = conflict_level
LOOP
EXECUTE 'SELECT count(1) FROM conflict.conflict_' || conflict || '(' || conference_id || ');' INTO STRICT conflict_rows;
conflicts := conflicts + conflict_rows;
END LOOP;
RETURN NEXT;
END LOOP;
END;
$function$












See also:
CREATE OR REPLACE FUNCTION auth.activate_account(activation_string character)
RETURNS integer
LANGUAGE plpgsql
STRICT
AS $function$
#variable_conflict use_variable
DECLARE
cur_activation RECORD;
cur_person_id INTEGER;
activation_interval INTERVAL;
BEGIN
activation_interval = ‘-7 day’;
DELETE FROM auth.account WHERE account_id IN ( SELECT account_id FROM auth.account_activation WHERE account_creation < now() + activation_interval );
SELECT INTO cur_activation account_id, conference_id FROM auth.account_activation WHERE account_activation.activation_string = activation_string;
IF FOUND THEN
INSERT INTO auth.account_role(account_id, role) VALUES (cur_activation.account_id, ‘submitter’);
SELECT INTO cur_person_id nextval(pg_get_serial_sequence(‘base.person’,’person_id’));
INSERT INTO person(person_id,nickname,email) SELECT cur_person_id,login_name,email FROM auth.account WHERE account.account_id = cur_activation.account_id;
UPDATE auth.account SET person_id = cur_person_id WHERE account_id = cur_activation.account_id;
INSERT INTO auth.account_settings(account_id,current_conference_id) VALUES (cur_activation.account_id, cur_activation.conference_id);
DELETE FROM auth.account_activation WHERE account_activation.activation_string = activation_string;
ELSE
PERFORM 1 FROM log.account_activation WHERE account_activation.activation_string = activation_string AND account_activation.log_operation = ‘D’;
IF FOUND THEN
RAISE EXCEPTION ‘Your account has already been activated.’;
ELSE
RAISE EXCEPTION ‘Invalid activation string.’;
END IF;
END IF;
RETURN cur_activation.conference_id;
END;
$function$