
SELECT	version();

DROP TYPE livre_t CASCADE;

CREATE TYPE livre_t AS
(
	titre	VARCHAR(64),
	auteur	VARCHAR(32)
);


CREATE FUNCTION init_livre(VARCHAR(64),VARCHAR(64)) 
RETURNS livre_t AS
'
DECLARE 
	v_titre		ALIAS FOR $1;
	v_auteur	ALIAS FOR $2;
	v_res		livre_t;
	
BEGIN
	v_res.titre := v_titre;
	v_res.auteur := v_auteur;

	RETURN v_res;
END
' LANGUAGE 'plpgsql';


SELECT	* FROM  init_livre('livre 1','auteur 1');

DROP TABLE livre_txt CASCADE;

CREATE TABLE livre_txt
(
	txt	VARCHAR(64)
);

INSERT INTO livre_txt (txt) VALUES ('livre A');
INSERT INTO livre_txt (txt) VALUES ('livre B');
INSERT INTO livre_txt (txt) VALUES ('livre C');


DROP FUNCTION liste_livre();

CREATE FUNCTION liste_livre() RETURNS SETOF livre_t AS
'
DECLARE
	v_res	livre_t;
	r	RECORD;
	tmp_auteur	VARCHAR(32);
BEGIN
	tmp_auteur := ''Auteur 4'';

	FOR r IN SELECT txt FROM livre_txt
	LOOP
		SELECT	*
		INTO	v_res
		FROM	init_livre(r.txt, tmp_auteur);
	
		RETURN NEXT v_res;
	END LOOP;

	RETURN;
END
' LANGUAGE 'plpgsql';


SELECT	*
FROM	liste_livre();



