Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> ERROR: procedure The used SELECT statements have a different number of columns
szypi1989
post
Post #1





Grupa: Zarejestrowani
Postów: 207
Pomógł: 0
Dołączył: 7.09.2010

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


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

Ten post edytował szypi1989 26.10.2012, 21:21:30
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
mmmmmmm
post
Post #2





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


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ł...
Go to the top of the page
+Quote Post
nospor
post
Post #3





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
szypi1989
post
Post #4





Grupa: Zarejestrowani
Postów: 207
Pomógł: 0
Dołączył: 7.09.2010

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



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.

Ten post edytował szypi1989 28.10.2012, 17:44:21
Go to the top of the page
+Quote Post
sazian
post
Post #5





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

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


  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

Ten post edytował sazian 28.10.2012, 17:57:15
Go to the top of the page
+Quote Post
szypi1989
post
Post #6





Grupa: Zarejestrowani
Postów: 207
Pomógł: 0
Dołączył: 7.09.2010

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


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?

Ten post edytował szypi1989 1.11.2012, 15:39:32
Go to the top of the page
+Quote Post
sazian
post
Post #7





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

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


po przecinku wymieniasz kolejne kolumny
jeśli chcesz kilka wierszy to musisz użyć kursorów
Go to the top of the page
+Quote Post
szypi1989
post
Post #8





Grupa: Zarejestrowani
Postów: 207
Pomógł: 0
Dołączył: 7.09.2010

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


dobra ,rozumiem cię.dzięki o to mi właśnie chodziło
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: 21.08.2025 - 13:33