Procedury,funkcje - Wersja do druku
+- Forum Webmastera, HTML, CSS, PHP, MySQL, Hosting, Domeny - Forum dla Webmasterów (https://www.webmastertalk.pl)
+-- Dział: Technologie internetowe - tworzenie stron WWW (https://www.webmastertalk.pl/forum-technologie-internetowe-tworzenie-stron-www)
+--- Dział: Programowanie, Bazy danych (https://www.webmastertalk.pl/forum-programowanie-bazy-danych)
+--- Wątek: Procedury,funkcje (/thread-procedury-funkcje)
|
Procedury,funkcje - ket - 27-01-2011
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 .
Kod: 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$$
Kod: 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.
Kod: 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;
|