|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : février 2006 Messages : 5 ![]() |
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 :
|
||
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() ![]() Inscription : mai 2004 Messages : 4 490 ![]() |
Bonjour,
je ne vois pas trop ce qui provoque ce comportement, peut-être un problème subtile de transaction, par contre je suis certain que la méthode n'est pas la bonne. Les commandes DDL (Data Definition Language) qui créent ou modifient des objets du SGBDR doivent en mode production se limiter à la création de table temporaires durant le temps de la session, ou à la limite à la regénération d'indexes pour des opérations de maintenance. Je prendrais le problème différemment ; je créerais une tables variables_session, qui contiendrait les champs column_name et v_value, et une clé étrangère vers la table ifc_session. L'écriture de ta procédure stockée devient alors triviale.
__________________
FAQ XML ------------ « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser » Giacomo Leopardi |
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : février 2006 Messages : 5 ![]() |
Merci Beaucoup de ta reponse.
Tu as raison c'est ce que je vais faire. |
|
|
00
|
|
|
#4 |
|
Invité de passage
![]() Inscription : février 2006 Messages : 5 ![]() |
-- Function: ifc_session_write("varchar", "varchar", "varchar")
-- DROP FUNCTION ifc_session_write("varchar", "varchar", "varchar"); CREATE OR REPLACE FUNCTION ifc_session_write("varchar", "varchar", "varchar") RETURNS bool AS $BODY$DECLARE v_session_id ALIAS FOR $1; v_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 variable existe déjà pour cette session, IF EXISTS(SELECT session_id, name FROM ifc_variable WHERE session_id = v_session_id AND name = v_name) THEN -- On met à jour la valeur de la variable UPDATE ifc_variable SET value = v_value WHERE session_id = v_session_id AND name = v_name; -- Si la variable n'existe pas pour cette session ELSE -- On crée la variable INSERT INTO ifc_variable (session_id, name, value) VALUES (v_session_id, v_name, v_value); END IF; -- 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"; Et je crée au prealable 2 tables liés. Merci encore. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com