Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z językiem plpgsql.
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
Sajrox
Witam,

Probuje napisać pewną funkcję.

Kod
DECLARE

kategorie_id_new integer;
drzewo_id_new text;

BEGIN

IF (TG_OP = 'DELETE') THEN
kategorie_id_new = OLD."kategorie_id";
ELSE
kategorie_id_new = NEW."kategorie_id";
END IF;

drzewo_id_new := "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,1303,23,24,25,26,27,2
,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,5
,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,1351
1";
UPDATE kategorie as c SET wszystkich_produktow = (SELECT count(*) FROM produkty WHERE kategorie_id IN (drzewo_id_new)) WHERE id = kategorie_id_new;


RETURN NEW;
END;


General;nie chodzui o jedną rzecz. Czemu nie działa ten kawałek kodu kategorie_id IN (drzewo_id_new)
Gdy zamiast zmiennej drzewo_id_new wstawie ciąg liczb to wszystko jest ok ale gdy chce ten ciąg przypisać do zmiennej i nastepnie podaje tą zmienną jak powyżej to dostaje błąd przy użyciu tej funkcji:

Kod
BŁĄD:  kolumna "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,1303,23," nie istnieje
LINE 1: SELECT  "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21...
                 ^
QUERY:  SELECT  "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,1303,23,24,25,26,27,2
,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,5
,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,1351
1"
CONTEXT:  PL/pgSQL function "liczba_produktow" line 14 at assignment

W poleceniu:
UPDATE "public"."produkty" SET "id"='401384', "nazwa"='ELSEVE Odżywka bez Spłukiwania 150 ml Nutrileum Intensywne Wygładzanie', "cena_min"=NULL, "cena_max"=NULL, "wszystkich_ofert"='0', "data_dodania"='2009-04-24 01:39:06.812163', "sklepy_id"='249', "kategorie_id"='1' WHERE "id"='401384'




Pewnie dla kogoś kto w tym siedzi to banał więc bardzo proszę o pomoc smile.gif
wookieb
A próbowałeś to dać jako tablicę?
Sajrox
tzn questionmark.gif szczerzę mówiąc nie jestem tak daleko wtajemniczony jeśli chodzi o tej język.

Mógłbym cie prosić i jakieś wyjaśnienie Twojego pomysłu w praktyce ?

Próbuje coś takiego:
  1. UPDATE kategorie AS c SET c.wszystkich_produktow = (SELECT count(*) FROM produkty WHERE kategorie_id IN (c.drzewo_id::text)) WHERE c.id = "kategorie_id_new";


Jednak otrzymuje błąd:

Kod
BŁĄD:  operator nie istnieje: integer = text


Np gdy wstawie coś takiego:

  1. UPDATE kategorie AS c SET c.wszystkich_produktow = (SELECT count(*) FROM produkty WHERE kategorie_id IN ('1,2,3')) WHERE c.id = "kategorie_id_new";


To mimo tego otrzymuje ten sam błąd jakby nie akceptował typ danych "text"
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.