Serwer SQL nie uruchamia funkcji ani procedur

0

Witam.
Jak w temacie - troche pomyszkowalem i napisalem 1 funkcje i 1 procedure, ale przy ich wywolaniu cos dziwnego zachodzi. Mianowicie mimo zapytania zgodnego z forma czy to funkcji czy procedury nie sa one wykonywane (tj. ciagle klient chce cos jeszcze pobrac). Ponizej zamieszczam kody ;).

DELIMITER $$ 
DROP FUNCTION IF EXISTS wspolczynnik_poprawnosci;
CREATE FUNCTION wspolczynnik_poprawnosci(odpowiedz INT(1)) 
RETURNS INT(3)

	BEGIN 
	DECLARE i INT(2) DEFAULT 0;
	DECLARE j INT(2) DEFAULT 0;
	DECLARE wynik DECIMAL(3,2) DEFAULT 0;
	DECLARE temp_table INT(2) DEFAULT 0;
	DECLARE temp_table2 INT(2) DEFAULT 0;

	CASE odpowiedz

	WHEN 1 THEN

	INSERT INTO temp_table SELECT(COUNT(rodzaj_odp)) FROM pytany WHERE rodzaj_odp='Tak';
	INSERT INTO i SELECT(COUNT(id_pytanego)) FROM pytany;

	INSERT INTO temp_table2 SELECT(COUNT(rodzaj_odp)) FROM pytany WHERE rodzaj_odp='Tak';
	INSERT INTO j SELECT(COUNT(id_pytanego)) FROM pytany;
	SET wynik = (temp_table/i) * (j/temp_table2);
	

	WHEN 2 THEN

	INSERT INTO temp_table SELECT(COUNT(rodzaj_odp)) FROM pytany WHERE rodzaj_odp='Nie';
	INSERT INTO i SELECT(COUNT(id_pytanego)) FROM pytany;

	INSERT INTO temp_table2 SELECT(COUNT(rodzaj_odp)) FROM pytany WHERE rodzaj_odp='Nie';
	INSERT INTO j SELECT(COUNT(id_pytanego)) FROM pytany;
	SET wynik = (temp_table/i) * (j/temp_table2);


	WHEN 3 THEN

	INSERT INTO temp_table SELECT(COUNT(rodzaj_odp)) FROM pytany WHERE rodzaj_odp='Moze';
	INSERT INTO i SELECT(COUNT(id_pytanego)) FROM pytany;

	INSERT INTO temp_table2 SELECT(COUNT(rodzaj_odp)) FROM pytany WHERE rodzaj_odp='Moze';
	INSERT INTO j SELECT(COUNT(id_pytanego)) FROM pytany;
	SET wynik = (temp_table/i) * (j/temp_table2);
	
	END CASE;

	RETURN (wynik);

END$$
DROP PROCEDURE IF EXISTS dodaj_pytanie;

	CREATE PROCEDURE dodaj_pytanie(id INT,odpowiedz VARCHAR(10),tresc VARCHAR(25))
	BEGIN
	INSERT INTO pytania(id_pytania,odpowiedz,tresc) VALUES(id,odpowiedz,tresc);
END$$

Dodatkowo definicje tablic, jezeli to pomoze.

DROP TABLE IF EXISTS ankieter;

	CREATE TABLE ankieter 
	(
	id_ank INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
	imie_ank VARCHAR(15) NOT NULL,
	nazwisko_ank VARCHAR(30) NOT NULL,
	wiek_ank TINYINT UNSIGNED NOT NULL,
	poch_ank VARCHAR(40) NOT NULL,
	stawka_ank DECIMAL(3,2) NOT NULL,
	data_ank DATE NOT NULL,
	godziny_ank INT(3) NOT NULL,
	id_pytania TINYINT UNSIGNED NOT NULL,

	INDEX (id_pytania)
	)
	ENGINE = InnoDB;

DROP TABLE IF EXISTS pytany;

	CREATE TABLE pytany 
	(
	id_pytanego TINYINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
	imie_pyt VARCHAR(15) NOT NULL,
	nazwisko_pyt VARCHAR(30) NOT NULL,
	wiek_pyt TINYINT UNSIGNED NOT NULL,
	id_pyt TINYINT UNSIGNED NOT NULL,	
	rodzaj_odp VARCHAR(10),

	INDEX (id_pyt),
	INDEX (rodzaj_odp),

	CONSTRAINT pytany__ankieter
	 FOREIGN KEY (id_pytanego)
	 REFERENCES ankieter(id_pytania)
	 ON DELETE NO ACTION
	)
	ENGINE = InnoDB;

DROP TABLE IF EXISTS pytania;

	CREATE TABLE pytania
	(
	id_pytania TINYINT UNSIGNED PRIMARY KEY,
	odpowiedz VARCHAR(10),
	tresc VARCHAR(25),
	
	CONSTRAINT id_pytania__pytany
	 FOREIGN KEY (id_pytania)
	 REFERENCES pytany(id_pyt),

	CONSTRAINT odpowiedz_rodzaj
	 FOREIGN KEY(odpowiedz)
	 REFERENCES pytany(rodzaj_odp)
	)
	ENGINE = InnoDB;
0

nie chce mi się analizować tych sql, zakładam że są poprawne pod wzgłędem składni
czy wywoływałeś je ręcznie bezpośrednio na bazie i czy działały poprawnie (tzn. tak jak się spodziewałeś)?
jak wywołujesz je z aplikacji? i jakiej aplikacji? w php?

0

Wywołanie procedury wykonuje się w systemie Oracle Database 10g Express Edition w następujący sposób:

begin
  exec nazwa_procedury(parametry);
end;

lub

execute nazwa_procedury(parametry);

Wywołanie funkcji np w tym samym systemie:

set serveroutput on  
declare
wynik varchar2(55);
begin
  wynik:= nazwa_funkcji(parametry);
DBMS_OUTPUT.PUT_LINE(wynik);
end;
/

show err

set serveroutput on [...] show err -- wyświetli błędy

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