Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> TG_OP + column "INSERT" does not exist
phpion
post
Post #1





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Witam,
mam pewien problem z prościutkim triggerem pod PostgreSQL 8.3:
  1. CREATE OR REPLACE FUNCTION categories_products_amount() RETURNS TRIGGER AS '
  2. BEGIN IF (TG_OP = "INSERT" OR TG_OP = "UPDATE") THEN
  3. UPDATE categories SET products=(SELECT COUNT(*) FROM products WHERE category_id=NEW.category_id) WHERE id=NEW.category_id;
  4. END IF;
  5.  
  6. IF (TG_OP = "DELETE" OR TG_OP = "UPDATE") THEN
  7. UPDATE categories SET products=(SELECT COUNT(*) FROM products WHERE category_id=OLD.category_id) WHERE id=OLD.category_id;
  8. END IF;
  9.  
  10. RETURN NULL;
  11. END;
  12. ' LANGUAGE 'plpgsql';
  13.  
  14.  
  15. CREATE TRIGGER categories_products_amount AFTER INSERT OR UPDATE OR DELETE ON products
  16. FOR EACH ROW EXECUTE PROCEDURE categories_products_amount();

Całość tworzy się ładnie, bez żadnego błędu. Problem natomiast powstaje w przypadku wykonywania modyfikacji (I, U, D) na tabeli products. Wówczas otrzymotrzymuję błąd:
Kod
Column "INSERT" does not exits.
IF ($1 = "INSERT" OR $1 = "UPDATE")

W czym problem?
Próbując zmienić "INSERT" itp. na 'INSERT' (jak to jest pokazane w manualu) funkcja w ogóle się nie tworzy - od razu rzuca błędami (oczywiście zmieniam również ' poza ciałem funkcji).
Prosiłbym o pomoc,
pion

Ten post edytował phpion 3.04.2008, 06:11:39
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
phpion
post
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Dzięki za naprowadzenie. W końcu całość działa:
  1. CREATE OR REPLACE FUNCTION categories_products_amount() RETURNS TRIGGER AS $$
  2. BEGIN IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN
  3. UPDATE categories SET products=(SELECT COUNT(*) FROM products WHERE category_id=NEW.category_id) WHERE id=NEW.category_id;
  4. END IF;
  5.  
  6. IF (TG_OP = 'DELETE' OR TG_OP = 'UPDATE') THEN
  7. UPDATE categories SET products=(SELECT COUNT(*) FROM products WHERE category_id=OLD.category_id) WHERE id=OLD.category_id;
  8. END IF;
  9.  
  10. RETURN NULL;
  11. END;
  12. $$ LANGUAGE plpgsql;

Mam jednak kilka pytań odnośnie programy pgAdmin III - nie będę zakładał osobnego wątku tylko pozwolę sobie kontynuować w tym:
1. Gdzie ustawia się moment uruchomienia triggera (BEFORE/AFTER INSERT/UPDATE/DELETE) w "kreatorze" triggerów (Funkcje trigger -> Nowa funkcja...). Ja osobiście takowej możliwości nie widzę...
2. Tworząc tabelę "kreatorem" (Tabele -> Nowa tabela...) nie widzę możliwości zamiany kolumn miejscami.
3. Czy gdzieś mogę zobaczyć diagram przedstawiający tabele oraz relacje pomiędzy nimi?

Pozdrawiam,
pion
Go to the top of the page
+Quote Post
Sedziwoj
post
Post #3





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Cytat(phpion @ 3.04.2008, 16:44:31 ) *
1. Gdzie ustawia się moment uruchomienia triggera (BEFORE/AFTER INSERT/UPDATE/DELETE) w "kreatorze" triggerów (Funkcje trigger -> Nowa funkcja...). Ja osobiście takowej możliwości nie widzę...

Ja mam pgAdmin 1.8.2 i mam to na pierwszej zakładce.
Cytat
2. Tworząc tabelę "kreatorem" (Tabele -> Nowa tabela...) nie widzę możliwości zamiany kolumn miejscami.

Bo właściwie nie istnieje takie coś jak kolejność kolumn, tak jak nie ma kolejności krotek, po prostu to są zbiory, że mają jakąś tam fizyczną kolejność to już inna sprawa, nie powinno się o nią dbać ani na niej opierać.
Cytat
3. Czy gdzieś mogę zobaczyć diagram przedstawiający tabele oraz relacje pomiędzy nimi?

Zależności możesz sprawdzić w pgAdminie, a do kreowania diagramów to np. Aqua Data Studio
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 9.10.2025 - 10:40