PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 09/01/2015 12:22:25

elite51
Membre

HELP function

Bonjour

J'ai un problème avec une fonction , j'ai 2 table    table1(champ1,champ2)   et table2(champA , champB)   
La table 1 et vide
dans la table 2 champA 4 colonne 1.2.3.4      dans le champB     A,B,C,D

Il n y a que le champ1 de la table 1 qui doit être saisie

Ce que j essaie de faire c'est : quant je saisie une valeur dans champ1   la valeur de champB s'enregistre automatiquement de champ2    uniquement si la valeur saisie corespond a une valeur champA

Exemple  - si je saisie dans le champ1 la valeur 3 alors le champ2 prendra la valeur C
              - si je saisie dans le champ1 la valeur 1 alors le champ2 prendra la valeur A
              - si je saisie dans le champ1 la valeur 230 alors dans le champ2 rien ne se passe

Voila ce que j ai fait mais je bloque ..... et vu que je débute je ne sait plus quoi faire HELP !!! ^^....

Je me suis dit fait une fonction et ensuite un triggers

CREATE OR REPLACE FUNCTION table12()
  RETURNS trigger AS
$BODY$
begin
NEW.champ1 = &champ1;
NEW.champ2 = 'select table2.champ2
FROM
  public.table1,
  public.table2
WHERE
  table2.champ1 = table1.champ1
AND table1.champ1 = NEW.champ1
  '
  ;

IF NEW.champ1 = table2.champ1
FROM table1 , table2
THEN execute 'insert into table1.champ2 = NEW.champ2';
end if;
    RETURN NEW;
END
$BODY$
  LANGUAGE plpgsql VOLATILE






CREATE TRIGGER after_insert_ch12
  AFTER INSERT
  ON table1
  FOR EACH ROW
  EXECUTE PROCEDURE table12();

Hors ligne

#2 09/01/2015 22:28:17

rjuju
Administrateur

Re : HELP function

Je ne suis pas certain d'avoir tout compris, mais :

- pourquoi ne pas faire une vue plutôt que modifier les données à l'insertion ?
- si la vue n'est pas une solution, quel est le problème exactement avec votre fonction et votre trigger ? À première vue je dirais que le trigger devrait être déclaré en « BEFORE INSERT » plutôt que AFTER.

En ligne

Pied de page des forums