Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: ominiencie triggera
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
AcidBurnt
witam

jak ominac triggera nalozonego na insert na danej tabeli

trigger generuje unikalne id dla usera, tylko teraz sprawa wyg;lada tak ze przy kopi tabeli i ponownym wrzucenia danych generuje on te ID od nowa a bardzo wskazane by było aby pozostało stare.
SongoQ
Mozesz zrobic tak ze jak dodajesz id usera to trigger nie wpisuje do pola. Jeden prosty warunek w funkcji triggera. Wtedy podczas kopiowania tabeli trigger bedzie wywolywany ale nie bedzie modyfikowal danych.
AcidBurnt
Cytat(SongoQ @ 2005-12-12 03:59:50)
Mozesz zrobic tak ze jak dodajesz id usera to trigger nie wpisuje do pola. Jeden prosty warunek w funkcji triggera. Wtedy podczas kopiowania tabeli trigger bedzie wywolywany ale nie bedzie modyfikowal danych.

a jaki prosty? smile.gif
SongoQ
  1. IF NEW.id IS NULL THEN
  2. NEW.id := NEXTVAL('sekwencja');
  3. END IF;
AcidBurnt
  1. DECLARE
  2. inumer int4;
  3. iseria int4;
  4. BEGIN IF NEW.user_number IS NULL THEN
  5. inumer := NEXTVAL('numer');
  6. IF inumer = 10 THEN
  7. inumer := NEXTVAL('numer');
  8. iseria := NEXTVAL('seria');
  9. NEW.user_number := inumer;
  10. NEW.user_seria := iseria;
  11. ELSE
  12. NEW.user_number := inumer;
  13. SELECT last_value
  14. FROM seria INTO NEW.user_seria; END IF;
  15. END IF;
  16. RETURN NEW;
  17. END;


dalem cos takiego i nie za bardzo... wogle sie nie wyzwala trigger, jak wpisuje jakies user_number to sie dodaje takie jak chce, ale jak nie wposuje zadnego to sie nie wyzwala trigger.
Jabol
  1. DROP TRIGGER blablabla; ... CREATE TRIGGER blablabla...;
AcidBurnt
Cytat(Jabol @ 2005-12-12 22:42:34)
  1. DROP TRIGGER blablabla; ... CREATE TRIGGER blablabla...;

nie wiem czy to jest dobry pomysł za kazdym razem usuwanie i dodawanie triggera.

pozatym tak dziala:

  1. DECLARE
  2. inumer int4;
  3. iseria int4;
  4. BEGIN IF NEW.user_number IS NULL THEN
  5. inumer := NEXTVAL('numer');
  6. IF inumer = 10 THEN
  7. inumer := NEXTVAL('numer');
  8. iseria := NEXTVAL('seria');
  9. NEW.user_number := inumer;
  10. NEW.user_seria := iseria;
  11. ELSE
  12. NEW.user_number := inumer;
  13. SELECT last_value
  14. FROM seria INTO NEW.user_seria; END IF;
  15. END IF;
  16. RETURN NEW;
  17. END;
SongoQ
Mozesz np zrobic CREATE OR REPLACE
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.