Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Kod procedury składowanej, błąd przy zapytaniu
Pite(R)
post
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 24.09.2011

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


Witam.

Mam pewną procedurę, którą muszę wstawić z pierwotnej bazy danych do nowej, przystosowanej do obsługi wielu języków, ale nie o to chodzi. Gdy próbuję ją wstawić zapytaniem CREATE PROCEDURE (bezpośrednio przeklejam kod procedury do innej bazy), otrzymuję błąd (w phpMyAdmin):

Kod
Zapytanie SQL:

CREATE DEFINER =  `cit1`@`localhost` PROCEDURE  `item_count` ( IN p_type_id SMALLINT UNSIGNED ) BEGIN declare v_done TINYINT UNSIGNED DEFAULT 0;


MySQL zwrócił komunikat:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 5

Oto kod tejże procedury (nie jest mojego autorstwa):

  1. CREATE DEFINER=`cit1`@`localhost` PROCEDURE `item_count`(
  2. IN p_type_id smallint UNSIGNED)
  3. begin
  4.  
  5. declare v_done tinyint UNSIGNED DEFAULT 0;
  6. declare v_depth smallint UNSIGNED DEFAULT 0;
  7.  
  8. CREATE TEMPORARY TABLE hier(
  9. parent_type_id smallint UNSIGNED,
  10. id smallint UNSIGNED,
  11. depth smallint UNSIGNED DEFAULT 0
  12. )engine = memory;
  13.  
  14. INSERT INTO hier SELECT parent_type_id, id, v_depth FROM item_types_view WHERE id = p_type_id;
  15.  
  16.  
  17. CREATE TEMPORARY TABLE tmp engine=memory SELECT * FROM hier;
  18.  
  19. while NOT v_done do
  20.  
  21. IF EXISTS( SELECT 1 FROM item_types_view p INNER JOIN hier ON p.parent_type_id = hier.id AND hier.depth = v_depth) then
  22.  
  23. INSERT INTO hier
  24. SELECT p.parent_type_id, p.id, v_depth + 1 FROM item_types_view p
  25. INNER JOIN tmp ON p.parent_type_id = tmp.id AND tmp.depth = v_depth;
  26.  
  27. SET v_depth = v_depth + 1;
  28.  
  29. TRUNCATE TABLE tmp;
  30. INSERT INTO tmp SELECT * FROM hier WHERE depth = v_depth;
  31.  
  32. else
  33. SET v_done = 1;
  34. end IF;
  35.  
  36. end while;
  37.  
  38. SELECT count(tmp_items.id) AS count FROM (
  39. SELECT
  40. DISTINCT items.id
  41. FROM
  42. (SELECT DISTINCT * FROM items) AS items
  43. INNER JOIN hier ON hier.id = items.type_id
  44. LEFT JOIN districts ON districts.id = items.district_id
  45. LEFT JOIN item_types_view p ON items.type_id = p.id
  46. WHERE
  47. items.is_active = true) tmp_items;
  48.  
  49. DROP TEMPORARY TABLE IF EXISTS hier;
  50. DROP TEMPORARY TABLE IF EXISTS tmp;
  51.  
  52. end

Co w tym przypadku generuje błąd? Proszę o pomoc.

Pozdrawiam.

Ten post edytował Pite(R) 6.12.2012, 21:19:27
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
sazian
post
Post #2





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

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


w pma w polu separator wpisałeś coś innego niż średnik questionmark.gif np $$
Go to the top of the page
+Quote Post
Pite(R)
post
Post #3





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 24.09.2011

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


Poprosiłbym o skonkretyzowanie, bo nie do końca rozumiem, o co chodzi. Ogólnie zapytania oddzielam średnikiem i to działa, generalnie nic nie zmieniałem w ustawieniach pMA, większość rzeczy powinna być ustawiona "standardowo".

Ten post edytował Pite(R) 6.12.2012, 21:31:12
Go to the top of the page
+Quote Post
sazian
post
Post #4





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

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


ok jak dobrze rozumiem to wchodzisz w zakładkę SQL i tak wklejasz kod procedury, tak ?
jeśli tak to pod tym dużym polem do wpisywania kodu SQL jest mniejsze(separator) i tam musisz wpisać np. $$

jeśli robisz to przez import do na początku(przed procedurą) dopisz DELIMITER $$
Go to the top of the page
+Quote Post
Pite(R)
post
Post #5





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 24.09.2011

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


Ok, zrozumiałem o co chodzi, wszystko już pięknie ruszyło smile.gif
Dzięki za pomoc!
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 Aktualny czas: 20.08.2025 - 09:06