PostgreSQL
La base de données la plus sophistiquée au monde.

Ouverture de session

Navigation

Contactez-nous

Administration du site :
"equipe chez postgresqlfr point org"

Contact presse :
"fr chez postgresql point org"

Contact association :
"bureau chez postgresqlfr point org"

Questions PostgreSQL :
 IRC :
  serveur irc.freenode.net
  canal #postgresqlfr

Recherche

Accéder aux archives

« Octobre 2008  
Lun Mar Mer Jeu Ven Sam Dim
  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  

Syndication

Flux XML

Sondage

Quelle est la version de PostgreSQL la plus répandue sur vos serveurs ?
8.3
10%
8.2
42%
8.1
40%
8.0
2%
7.4
6%
7.3 ou antérieure
0%
Nombre de votes: 48

Créer une fonction utilisant un like

Technique - Langages Procéduraux (PL) | Créer une fonction utilisant un like

Par jerome le 14/09/2006 - 10:44

Bonjour,

J'ai créé la fonction suivante:

CREATE OR REPLACE FUNCTION maj_visible_acte_lettre(id_client int4, date_limite int4, type_table "varchar")
RETURNS void AS
$BODY$UPDATE reference_etat_civil SET ref_visible=1 WHERE id_client=$1;

UPDATE reference_etat_civil
SET ref_visible=0
FROM acte, acte_reference
WHERE
reference_etat_civil.id_client=$1
AND reference_etat_civil.id_reference=acte_reference.id_reference
AND acte_reference.id_acte=acte.id_acte
AND act_lettre NOT LIKE '$3' AND reference_etat_civil.id_reference IN
(SELECT id_reference FROM date_reference WHERE id_client=$1 AND dat_ref_valeur>$2)$BODY$
LANGUAGE 'sql' VOLATILE;

En l'appelant comme suit:
SELECT maj_visible_acte_lettre(2,1866,'TD')

j'attendais un critère sur le LIKE qui serait act_lettre NOT LIKE 'TD%', mais ce n'est visiblement pas le cas (à vrai dire, je ne sais même pas ce qu'il fait).
Comment résoudre mon problème pour effectivement effectuer un act_lettre NOT LIKE 'TD%' ?

Cordialement,

Jerome

Options d'affichage des commentaires

Sélectionnez la méthode d'affichage des commentaires que vous préférez, puis cliquez sur "Sauvegarder les paramètres" pour activer vos changements.

La solution

jerome/ = 14 Septembre, 2006 - 17:48

Je me réponds à moi-même. J'ai trouvé la solution. Il fallait modifier la fonction comme ceci:

CREATE OR REPLACE FUNCTION maj_visible_acte_lettre(id_client int4, date_limite int4, type_table "varchar")
RETURNS void AS
$BODY$UPDATE reference_etat_civil SET ref_visible=1 WHERE id_client=$1;

UPDATE reference_etat_civil
SET ref_visible=0
FROM acte, acte_reference
WHERE
reference_etat_civil.id_client=$1
AND reference_etat_civil.id_reference=acte_reference.id_reference
AND acte_reference.id_acte=acte.id_acte
AND act_lettre NOT LIKE ( $3 || '%') AND reference_etat_civil.id_reference IN
(SELECT id_reference FROM date_reference WHERE id_client=$1 AND dat_ref_valeur>$2)$BODY$
LANGUAGE 'sql' VOLATILE;

Merci à ceux qui se seraient penché sur mon problème.

Jerome


© PostgreSQLFr, tous droits réservés.
Site déclaré à la CNIL sous le numéro 1074678, conformément à la Loi en vigueur.