BONJOUR a tous ,

J'aimerai un peut d'aide car je seche sur un probleme postgres 8.1.

J'aimerai pouvoir UPDATER des champs mais voila avant je les testes pour voir si ils sont deja crée.
Le Cas Echeant je fait un Alter table.

Cela fonctionne mais .. 1 fois sur 2 ???
J'ai essayer d'isoler le probleme en decoupant la fonction en 2 Afin de s'assurer que L'update se fait bien apres l'ALTER.
Mais cela ne fonctionne toujours pas.
Voici Le code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
CREATE OR REPLACE FUNCTION ifc_session_write("varchar", "varchar", "varchar")
  RETURNS bool AS
$BODY$DECLARE
	v_session_id ALIAS FOR $1;
	v_column_name ALIAS FOR $2;
	v_value ALIAS FOR $3;
BEGIN
	-- Si la session existe bien
	IF EXISTS(SELECT session_id FROM ifc_session WHERE session_id = v_session_id) THEN 
 
		-- Si la colonne correspondant à variable de session n'existe pas encore,
		IF NOT EXISTS(SELECT table_name, column_name FROM information_schema.columns WHERE table_name = 'ifc_session' AND column_name = v_column_name) THEN
 
			-- On crée la colonne
			EXECUTE 'ALTER TABLE ifc_session ADD COLUMN ' || quote_ident(v_column_name) || ' varchar(255);';
			EXECUTE 'ALTER TABLE ifc_session ALTER COLUMN ' ||  quote_ident(v_column_name) || ' SET STORAGE EXTENDED;';
		END IF;
 
		-- Enregistrement de la valeur de la variable dans la base
		EXECUTE 'UPDATE ifc_session SET ' || quote_ident(v_column_name) || ' = ' || quote_literal(v_value) || ' WHERE session_id = ' || quote_literal(v_session_id) || ';';
 
		-- Mise à jour de la date de dernière modification
		UPDATE ifc_session SET last_access = CURRENT_TIMESTAMP WHERE session_id = v_session_id;
 
		RETURN TRUE;
	ELSE
		-- La session n'existe pas
		RETURN FALSE;
	END IF;
END;$BODY$
  LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION ifc_session_write("varchar", "varchar", "varchar") OWNER TO "admin";
COMMENT ON FUNCTION ifc_session_write("varchar", "varchar", "varchar") IS 'Ecrit la valeur d''une variable dans la session. Paramètre : identifiant de la session - nom de la variable - valeur de la variable.';
quelqu'un a une idée???