Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> funkcja pl/sql
3rdeye
post 3.10.2006, 22:21:01
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 6.04.2006

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


oto treść funkcji (właściwie nieważne co ona robi) chodzi mi oto jak z konstrukcji FOR row IN SELECT przypisać jaką wartość z "row"

  1. CREATE OR REPLACE FUNCTION setNewTermWeekly(INT8,DATE,DATE) RETURNS INT8 AS '
  2. DECLARE
  3. in_id_doc ALIAS FOR $1;
  4. in_from ALIAS FOR $2;
  5. in_to ALIAS FOR $3;
  6. visit_time INT8;
  7. tmpint INT2;
  8. count INT8;
  9. my_row RECORD;
  10.  
  11. BEGIN SELECT visit_time INTO visit_time FROM doctors WHERE id = cast(in_id_doc as INT8);
  12. IF NOT FOUND THEN return 1; END IF;
  13.  
  14. tmpint := 1;
  15.  
  16. LOOP
  17. IF tmpint > 7 THEN
  18. EXIT;
  19. END IF;
  20.  
  21. FOR my_row IN SELECT id_type, cast(hour_from as int8) as hour_from, cast(hour_to as int8) FROM visits_hours WHERE id_doctor = cast(in_id_doc as INT8) AND day_num = tmpint ORDER BY hour_from LOOP --tutaj jest problem
  22. count := quote_ident(my_row.hour_from);
  23. --tutaj sie konczy
  24. LOOP
  25. INSERT INTO visits (id_doctor,day,hour) VALUES (in_id_doc,in_from+tmpint,count));
  26. count := count + visit_time;
  27. IF count >= my_row.hour_to THEN
  28. EXIT;
  29. END IF;
  30. END LOOP;
  31. END LOOP;
  32.  
  33. tmpint := tmpint + 1;
  34. END LOOP;
  35.  
  36. END;
  37. ' LANGUAGE 'plpgsql';


  1. SELECT setNewTermWeekly(cast(1 AS int8),cast(now() AS date),cast(now() AS date))


wywala taki błąd:


ERROR: mismatched parentheses
CONTEXT: compile of PL/pgSQL function "setnewtermweekly" near line 26

Ten post edytował 3rdeye 3.10.2006, 22:21:48


--------------------
czasami poprostu brakuje kamieni
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
bendi
post 4.10.2006, 09:55:52
Post #2





Grupa: Zarejestrowani
Postów: 401
Pomógł: 5
Dołączył: 14.09.2003
Skąd: Wrocław

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


Hmm a co to jest?
  1. --tutaj sie konczy
  2. LOOP
  3. [b] INSERT INTO visits (id_doctor,day,hour) VALUES (in_id_doc,in_from+tmpint,count));[/b]
  4. count := count + visit_time;
  5. IF count >= my_row.hour_to THEN
  6. EXIT;
  7. END IF;
  8. END LOOP;
  9. END LOOP;
  10.  
  11. tmpint := tmpint + 1;
  12. END LOOP;
  13.  
  14. END;
  15. ' LANGUAGE 'plpgsql';


[/quote]


--------------------
Go to the top of the page
+Quote Post
SongoQ
post 4.10.2006, 10:26:19
Post #3





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%)
-----


Odnosnie skladni petli for plsql jest ok. Masz skopana funkcje w tym zapytaniu.


--------------------
Go to the top of the page
+Quote Post
3rdeye
post 4.10.2006, 13:19:33
Post #4





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 6.04.2006

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


tak już wszystko wiem. dzięki za pomoc ...

wystarczył słownik do angielskiego winksmiley.jpg

było za dużo nawiasów.


--------------------
czasami poprostu brakuje kamieni
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 03:30