Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: ERROR: procedure The used SELECT statements have a different number of columns
Forum PHP.pl > Forum > Bazy danych > MySQL
szypi1989
Otóż mam problem mam przykładową procedure :
delimiter //
  1. CREATE PROCEDURE wynik ()
  2. BEGIN
  3. DECLARE wynik Varchar(200);
  4. SELECT * INTO wynik FROM school_users_info WHERE id=12;
  5. INSERT INTO vilage VALUES(0,wynik);
  6. END;//


i wyskakuje mi error:
ERROR: procedure The used SELECT statements have a different number of columns

I chciałbym wiedzieć jak zapisuje mi dane z zapytania SELECT do zmiennej wynik ,po przecinku? w postaci tablicy?Jak wyciągnąć dane z tej zmiennej wynik?
dlaczego wyskukuje mi ten error? proszę o pomoc
mmmmmmm
Ale namieszałeś...
Procedura wynik, zmienna wynik, tabela wynik...
Zaraz, zaraz... gdzie tabela wynik? Zostaje utworzona w 4 linii. Jakbyś poczytał manuala do MySQL, to bys wiedział...
nospor
Skoro chcesz wstawić dane z innej tabeli to poprostu skorzystaj ze składni INSERT...SELECT
http://dev.mysql.com/doc/refman/5.5/en/insert-select.html
i po sprawie. Po co kombinować skoro mysql udostępnia właściwe mechanizmy.
szypi1989

ROZUMIEM ŻE DA SIĘ TO INACZEJ ZROBIĆ ALE CHODZI MI FAKT W JAKI SPOSÓB ZAPISUJE TE DANNE DO ZMIENNEJ.

popatrzcie na ten przykład:
  1. delimiter //
  2. CREATE TRIGGER update_sport
  3. BEFORE UPDATE ON school_users_info
  4. FOR EACH ROW
  5. BEGIN
  6. DECLARE wynik Varchar(200);
  7. SELECT sport INTO wynik FROM school_users_info WHERE id = OLD.id AND FIND_IN_SET(OLD.sport,'football,tenis stołowy,tenis,golf,hokej,koszykówka,kręgle,rowery,turystyka,bieganie,jazda konna,szachy,bilard,lotnictwo');
  8. IF (wynik IS NULL) THEN
  9. SET NEW.sport ='golfa';
  10. ELSE
  11. SET NEW.sport ='golf';
  12. INSERT INTO school_sport_info VALUES(0,OLD.sport);
  13. END IF;

END;//
niema utworzonej tabeli wynik!!!! a jednak całe działanie się powiedzie,i na dodatek sprawdzi mi to co bym chciał.
i właśnie dlatego chciałbym wiedzieć w jaki sposób zapisuje to do zmiennej wynik.Dla własnego faktu.
sazian
  1. SELECT * INTO wynik
  2. SELECT sport INTO wynik


widać różnicę ?
w pierwszym przykładzie zapisujesz wiersz do zmiennej, a w drugim komórkę.

z tego co mi wiadomo w MySQL'u nie da się tego zrobić.

w Oracle są specjalne zmienne "wierszowe"
  1. record school_users_info%ROWTYPE;


W MySQL będziesz musiał deklarować tyle zmiennych ile jest kolumn w tabeli i w INTO wymieniać je po przecinku
szypi1989
Właśnie o taką odpowiedz mi chodzi,muszę sprawdzić czy to chodzi.

ok.A jeżeli sport ma więcej wyników?? jak to się zapisuje.po przecinku?
sazian
po przecinku wymieniasz kolejne kolumny
jeśli chcesz kilka wierszy to musisz użyć kursorów
szypi1989
dobra ,rozumiem cię.dzięki o to mi właśnie chodziło
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.