Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Procedury i funkcje, #1547
Forum PHP.pl > Forum > Bazy danych
Athlan
Witam,

próbuję stworzyć prostą procedurę, natomiast MySQL zwraca mi błąd informujący o za małej ilości pól w tabeli systemowe, w której są one przechowywane.

Cytat
#1547 - Column count of mysql.proc is wrong. Expected 20, found 16. The table is probably corrupted.


  1. CREATE PROCEDURE `AnnouncementsDatesItemsCount`(IN iAnnouncement INT)
  2. BEGIN
  3. UPDATE cms_announcements
  4. SET
  5. announce_date_relase_count = (SELECT COUNT(date_start) FROM cms_announcements_dates WHERE date_item = announce_id)
  6. WHERE announce_id = iAnnouncement;
  7. END


Może ktoś się z tym potkał. Z góry dzięki za pomoc.
Crozin
Rozumiem, że próbowałeś naprawić (REPAIR TABLE) obie tabele? Czy przy utworzeniu nowej bazy danych i minimalnym odtworzeniu jej struktury problem też występuje? Ponieważ
  1. -- Zrzut tabeli
  2.  
  3. CREATE TABLE `cms_announcements` (
  4. `announce_id` int(11) NOT NULL,
  5. `announce_date_relase_count` int(11) NOT NULL
  6. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
  7.  
  8. CREATE TABLE `cms_announcements_dates` (
  9. `date_item` int(11) NOT NULL,
  10. `date_start` date NOT NULL
  11. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
  12.  
  13. INSERT INTO `cms_announcements` VALUES(1, 0);
  14. INSERT INTO `cms_announcements` VALUES(2, 0);
  15. INSERT INTO `cms_announcements` VALUES(3, 0);
  16. INSERT INTO `cms_announcements` VALUES(4, 0);
  17. INSERT INTO `cms_announcements` VALUES(5, 0);
  18.  
  19. INSERT INTO `cms_announcements_dates` VALUES(1, '2011-02-16');
  20. INSERT INTO `cms_announcements_dates` VALUES(1, '2011-02-16');
  21. INSERT INTO `cms_announcements_dates` VALUES(2, '2011-02-16');
  22. INSERT INTO `cms_announcements_dates` VALUES(3, '2011-02-16');
  23. INSERT INTO `cms_announcements_dates` VALUES(3, '2011-02-16');
  24. INSERT INTO `cms_announcements_dates` VALUES(4, '2011-02-16');
  25. INSERT INTO `cms_announcements_dates` VALUES(1, '2011-02-16');
  26. INSERT INTO `cms_announcements_dates` VALUES(2, '2011-02-16');
  27. INSERT INTO `cms_announcements_dates` VALUES(3, '2011-02-16');
  28. INSERT INTO `cms_announcements_dates` VALUES(4, '2011-02-16');
  29.  
  30. -- Zrzut procedury
  31.  
  32. DELIMITER $$
  33.  
  34. CREATE PROCEDURE `AnnouncementsDatesItemsCount`(IN iAnnouncement INT) BEGIN
  35. UPDATE cms_announcements
  36. SET
  37. announce_date_relase_count = (SELECT COUNT(date_start) FROM cms_announcements_dates WHERE date_item = announce_id)
  38. WHERE announce_id = iAnnouncement;
  39. END$$
  40.  
  41. DELIMITER ;
  42.  
  43. -- Wywołanie
  44.  
  45. CALL AnnouncementsDatesItemsCount(2);
W efekcie wartość kolumny announce_date_relase_count została poprawnie zaktualizowana dla ogłoszenia #2.
Tak więc jeżeli chodzi o sam kod SQL wszystko wydaje się być w porządku.
Athlan
Cześć,

na tabelę mysql.proc dałem repair, optimize, a następnie flush. Założyłem też dla testów nową bazę danych i w niej przykładowe tabele (podobne do Twoich). Niestety, otrzymuję ten sam komunikat.
Crozin
Zapewne wszystko z poniższej listy już zrobiłeś/sprawdziłeś... niestety nie wiem co może być przyczyną. Tak optymistycznie powiem tylko, że u mnie (wersja 5.5.8) działa. biggrin.gif

1. http://www.google.com/search?hl=en&saf...mp;aql=&oq=
2. Spróbować wynaprawiać wszystkie tabele, nawet nie mające większego związku z tą procedurą.
Athlan
1. Pierwsze 5 stron wyników mam wyklikane. Zrobiłem wszystko poza updgrade/downgrade pomiędzy 5.1 i 5.0. Spróbuję zejść do serwerowni i zrobić down/up do minimalnej wersji, może to naprawi potencjalnie uszkodzoną strukturę plików.
2. Nieracjonalne.
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.