Procedura - nic nie dostaje w wyniku.

0

A oto moja procedura

 
delicimer $$
create procedure choose_student(IN c_student_name varchat(35))
begin
select imie from studends where name = c_student_name ;
end $$
delicimer ;

Procedura zostala dodana, ale jak zrobie

call choose_student('Jack')
 

To mam zero wynikow, mimo ze jest taki student jak Jack

0

Niebardzo widze w czym ma mi to pomoc.

0

varchat zamień na varchar

0

To jest pomylka przy przepisywaniu, normalnie wzzystko mam dobrze. Zauwazylem jedna rzecz, jesli wejde w mysql w sekcje [procedury i funkcje] i recznie wybiore moja procedure i przez gui podam parametry to wszystko mi zwraca ale jako SQL rezultat jest 0 .

0
SELECT imie FROM studends WHERE name = c_student_name ;

A tak nawiasem mówiąc imię to imie czy name :) Może tutaj masz problem?
No i delimiter, a nie delicimer

0

Nie nie, rablem sie bo mialem 2 bazy testowe. W jednej name a w drugiej imie a teraz sobie przepisywalem. Problem nie tkwi w tym. Bo sama procedura dziala dobrze. Tylko nie moge jej wykonac z poziomu SQL wpisujac jak rasowy bazodanowiec tylko przez gui musze robic zeby dzialalo.

0

No nie wiem, już nie chce mi się szukać literówek etc.
To działa:

create table person(name varchar(45) not null);
insert person(name)values('Jack'),('Mac'),('Tonny'),('Patrick');

delimiter $$
create procedure selectName
(
	in name varchar(45)
)
begin
	select name from person p where p.name = name;
end $$
delimiter ;

call selectName('Jack');
0

Taka sama sytuacja. Jak wykonam to w SQL to nic nie pokazuje. musze przez gui odpalac procedure.

0

A wykonujesz to we właściwej bazie danych?
Przełącz się najpierw na właściwą bazę wykonując USE nazwa_bazy, a dopiero potem wykonaj procedurę.

0

Niestety ta sama sytuacja. Baza na pewno jest dobrze, bo w przeciwnym wypadku wyskakuje error, ze taka procedura w innej bazie nie zostala znaleziona.

0

Masz uprawnienia EXECUTE?

0

Wlasnie przed chwila dodalem - niestety bez zmian.

0

Procedura nie zwraca danych, utwórz funkcję, zadeklaruj co zwraca i użyj return.

0

Pewnie się mylę ale widząc twoje wywołanie z pierwszego posta CALL wnioskuję, że wywołujesz to z javy używając JDBC.
Nie wiem jak w mssql ale w oracle twoja procedura nie zwróci dataseta bo nie ma returna (jak pisał @GThoro) spróbuj zatem rozwiązania jakie podał kolega.
Jednak gdyby dalej nie działało to w piątek w pracy miałem z kolegą z pracy podobną sytuację. Kolega pisał javowy interface do logowania. Co prawda nie było ty mysql tylko mssql ale zasada powinna być ta sama. U nas rozwiązaniem było coś takiego:

String SPsql ="declare @ID int; exec @id = dbo.sp_LoginUser ?, ?; select @id ID";    //deklaracja zmiennej, exec i przypisane wartości return z procedury. ?? to parametry i na końcu select wyniku
			PreparedStatement ps = m_db_conn.prepareStatement(SPsql);
			ps.setEscapeProcessing(true);
			ps.setQueryTimeout(100);
			ps.setString(1,user);
			ps.setString(2,password);
			ResultSet rs=ps.executeQuery();
	        while (rs.next()) {
	            System.out.println(rs.getString("ID"));
	        }
0

Możesz powiedzieć co to za baza danych i z jakiego poziomu wywołujesz tą procedurę?

Pozdrawiam,

mr-owl

0

Ok jesli chodzi o poziom kodu to wszystko juz dziala. Tylko w SQL w bazie MySQL nie chce dzialac, tylko przez GUI musze. Nie wydaje sie to dziwne?

1 użytkowników online, w tym zalogowanych: 0, gości: 1