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.'; |
Partager