Probleme ALTER Puis UPDATE
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:
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??? :roll: