Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z transakcją
augiasz
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 22.06.2007

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


Pomóżcie!Ma to byc transakcja przy rezerwacji ksiazek w bibliotece,najpierw ma sprawdzac czy liczba wypozyczonych ksiazek przez klienta przekracza 10 jesli tak to koniec.Potem jesli liczba dostepnych egzemplarzy jest 0 to tez lipa.u_id i k_id to identyfikatory uzytkownika i ksiazki.Przypisuje je do zmiennej gdzie maja byc przechowywane te identyfikatory(interfejs ma byc w PHP).Ale wywala sie juz w pierwszym IF!!Co jest nie tak??

BEGIN;
IF (SELECT l_wyp_ks FROM uzytkownicy WHERE u_id = $zmienna ) >=10 THEN
RAISE NOTICE "Nie mozesz wypozyczyc zadnej ksiazki!" ROLLBACK;
ELSE
IF (SELECT l_dost_egz FROM ksiazki WHERE k_id = $zmienna) = 0 THEN
RAISE NOTICE "Ta ksiazka nie jest dostepna!" ROLLBACK;
ELSE
UPDATE ksiazki SET l_dost_egz = l_dost_egz - 1 WHERE k_id =$zmienna;
UPDATE uzytkownicy SET l_wyp_ksiazek = l_wyp_ksiazek + 1 WHERE u_id = $ zmienna;
END IF;
END IF;
COMMIT;

Ten post edytował augiasz 22.06.2007, 19:47:53
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
prond
post
Post #2





Grupa: Zarejestrowani
Postów: 254
Pomógł: 10
Dołączył: 8.11.2006
Skąd: Warszawa

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


W SQL nie ma IF'a - to jest w PL/pgSQL
Go to the top of the page
+Quote Post
augiasz
post
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 22.06.2007

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


To jak to zrobic bez IF'a??
Go to the top of the page
+Quote Post
SongoQ
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


@augiasz Zamknij to w funkcje. I wtedy tylko zostanie CI wywolanie.
Go to the top of the page
+Quote Post
augiasz
post
Post #5





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 22.06.2007

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


Mogłbys to sprecyzowac?? W ogole to w Postgresie nie moze byc IFów,chyba ze w triggerze jak okreslamy język...,ale tu...
Go to the top of the page
+Quote Post
SongoQ
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Kod ktory podeslales na forum to nie jest SQL to jest plpgsql, a tam juz jest inna skladnia. SQL to jezyk zapytan. Zeby to Ci zadzialalo to zamknij to w funkcje lub w procedure.
Go to the top of the page
+Quote Post
Zbłąkany
post
Post #7


Administrator serwera


Grupa: Developerzy
Postów: 521
Pomógł: 13
Dołączył: 2.04.2004
Skąd: 52°24' N 16°56' E

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


Ewentualnie jak już koniecznie chcesz w zapytaniu to:
  1. SELECT CASE WHEN warunek THEN instrukcja WHEN warunek2 THEN instrukcja2 ELSE instrukcja3 END AS wynik FROM tabela;
Go to the top of the page
+Quote Post
AcidBurnt
post
Post #8





Grupa: Zarejestrowani
Postów: 215
Pomógł: 1
Dołączył: 13.04.2003
Skąd: z ławki przed blokiem

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


zbłąkany miśku to zadziała na PG? ;]


hm... miłe...
Go to the top of the page
+Quote Post
SongoQ
post
Post #9





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


@AcidBurnt Tak, tylko ze zamiast instrukcja w warunku powinno byc pole. No chyba ze pozniej jest rzutowanie przez type
Go to the top of the page
+Quote Post
Zbłąkany
post
Post #10


Administrator serwera


Grupa: Developerzy
Postów: 521
Pomógł: 13
Dołączył: 2.04.2004
Skąd: 52°24' N 16°56' E

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


@SongoQ: a nie może tam być też jakieś podzapytanie? W manualu nie piszą nic na ten temat i nie widze przykładu żadnego (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) .

Sprawdził to ktoś może?
Go to the top of the page
+Quote Post
SongoQ
post
Post #11





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Podzapytanie oczywiscie ze moze byc. Moze byc tam co chesz tylko wazne ze to ma zwracac 1 pole/wartosc. Ale da sie caly rekord z wykorzystaniem rzutowania. Sa przyklady w manualu.
Go to the top of the page
+Quote Post

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: 22.08.2025 - 16:59