1

Temat: PostgreSQL - funkcje - problem z dodawaniem zmiennych ;/

Witam.

  Ponizej wkleilem funkcje jaka jest wywolywana przez TRIGGER (AFTER INSERT ON) problem polega na tym, że jak probuje podstawic pod zmienna 'z_invoice_nr' := z_invoice_nr+1 to nie wstawia nic w UPDATE, natomiast jezeli przypisze na sztywno dowolna cyfre wszystko dziala.
Moze ma ktos pomysl co jest zle zapisane ?

declare
  z_invoice_nr                           numeric(6,0);
  z_invoices_id                           integer;
begin

   select invoices_id into z_invoices_id from jd_invoices_test order by invoices_id desc limit 1;
   select invoice_nr into z_invoice_nr from jd_invoices_test where invoices_id = z_invoices_id;

   z_invoice_nr := z_invoice_nr+1;
   
   update jd_invoices_test set invoice_nr = z_invoice_nr where invoices_id = new.invoices_id; 

    return new;
end;

I jeszcze jedno zauwazyliscie pewnie ze wyciagam wczeniejszy rekord takim troche dziwnym selectem

select invoices_id into z_invoices_id from jd_invoices_test order by invoices_id desc limit 1;

jest moze jakis inny sposob aby wyciagnac wczesniejszy rekord?

pozdrawiam
W.

2

Odp: PostgreSQL - funkcje - problem z dodawaniem zmiennych ;/

   select invoices_id into z_invoices_id from jd_invoices_test order by invoices_id desc limit 1;
   select invoice_nr into z_invoice_nr from jd_invoices_test where invoices_id = z_invoices_id;

a może lepiej tak

   select invoice_nr into z_invoice_nr from jd_invoices_test where invoices_id = select (min(invoices_id) from jd_invoices_test)

Chyba robi to samo.

3

Odp: PostgreSQL - funkcje - problem z dodawaniem zmiennych ;/

ok, to fajne ... wink dzieki za podpowiedz,
tylko ze to nie bedzie tak dzialac hmm
Twoje zapytanie wyciagnie min(invoice_id) a ja potrzebuje max(invoice_id)-1

select invoice_nr as z_invoice_nr from jd_invoices_test where invoices_id in (select max(invoices_id)-1 from jd_invoices_test)

Ale nadal nie nie wiem dlaczego nie zwiekasz mi z_invoice_nr, dodam jeszcze ze w tablicy jd_invoices  kolumna invoice_nr ma typ integer a update nie robi nic albo wpisuje w invoice_nr wartos NULL ;/

Ostatnio edytowany przez v0jt4s (2009-06-18 18:51:42)

4

Odp: PostgreSQL - funkcje - problem z dodawaniem zmiennych ;/

Odpowiedz moze byc bardzo prosta. Jesteś pewien, że w tabeli występuje wartość max(invoices_id)-1. max(invoices_id)-1 to wcale nie musi być wartośc występująca z tabeli. Ty chcesz drugą największą pod względem wartości liczbę z tabeli ale nie jest powiedziane, ze ta liczba to wlasnie max(invoices_id)-1
Bo jeśli nie występuje to z_invoce_nr z select'a będzie równe NULL
a operacja

z_invoice_nr := z_invoice_nr+1;

też zwróci null bo null+1=null;
Może tak

select invoice_nr as z_invoice_nr from
(select * from jd_invoices_test where invoices_id < (select max(invoices_id) from jd_invoices_test)
) foo order by invoices_id desc limit 1;

Mam nadzieje, ze nie ma zadnych bledów skladniowych bo nie ma postgresa pod reka.

5

Odp: PostgreSQL - funkcje - problem z dodawaniem zmiennych ;/

Huh wink zadzialalo wink

Chyba faktycznie te selecty cos nie tak strugaly ...

dzieki za pomoc wink