Jak poprawnie zadeklarować procedurę w phpMyAdmin?

0

Hejo,
Czy ktos moze mi wylumaczyc jak mniej wiecej dzialaja procedury w MySQL a w szczegolnosci w phpmyAdmin??
I probowalem napisac nastepujaca prcedure ale ciagle wywala mi blad?

DELIMITER $$
CREATE procedure while_ex()
block: BEGIN
 DECLARE maxID INT;
 DECLARE i INT;
 declare value VARCHAR(20) default ' ' ;
 SET i = 1;
 WHILE i <= maxID DO
 SET value = DATEDIFF('2002-04-02','1970-01-01');
 SET i = i + 1;
 END
 WHILE block;
 select value ;
END $$
DELIMITER ;

i blad.
Analiza statyczna:

1 errors were found during analysis.

Oczekiwano nazwy zmiennej. (near " " at position 35)
Zapytanie SQL: Copy Documentation

CREATE procedure while_ex() block: BEGIN DECLARE maxID INT; DECLARE i INT; declare value VARCHAR(20) default ' ' ; SET i = 1; WHILE i <= maxID DO SET value = DATEDIFF('2002-04-02','1970-01-01'); SET i = i + 1; END WHILE block; select value ; END;

MySQL zwrócił komunikat: Documentation

#1064 - Something is wrong in your syntax obok 'block;
select value ;
END' w linii 11

wytlumaczy ktos dlaczego i jak powinno byc porawnie??

0

maxID masz nie zainicjowane, i chyba while powinno kończyć, END WHILE, to blockteż nie wygląda za dobrze... I formatowania nie ma.

0

W kodzie masz żle zadeklarowany label block

Powinno być tak:

DELIMITER $$
CREATE procedure while_ex()
BEGIN
	DECLARE maxID INT;
	DECLARE i INT;
	declare value VARCHAR(20) default ' ' ;
	SET i = 1;
    
	block: WHILE i <= maxID DO
		SET value = DATEDIFF('2002-04-02','1970-01-01');
		SET i = i + 1;
	END WHILE block;
	select value ;
END $$
DELIMITER ;
0

@Panczo: jakbys mogl mi jeszcze pomoc udalo mi sie ogarnac procedure

BEGIN
	DECLARE maxID INT;
    DECLARE dawap Date;
	DECLARE i INT;
    DECLARE row_i INT;
	declare value VARCHAR(20) default ' ' ;
	SET i = 1;
    set @row_num=0;

    SELECT @maxID := COUNT(*) FROM `publications`;
    SELECT COUNT(*) INTO maxID FROM `publications`;
	block:WHILE i <= maxID DO
    	 
		SET value = ((DATEDIFF(CURRENT_DATE,'1970-01-01')) - (DATEDIFF((SELECT `createdAt`FROM `publications` WHERE `ID-id` = i),'1970-01-01')))  ; 	 
		SET i = i + 1;
        SELECT i,value;
	END WHILE block;
	select value ;
END

i w monencie igdy chce ja wywolac

CALL ff();
wyskakuje mi taki error

Error
Analiza statyczna:

1 errors were found during analysis.

Brakujace wyrazenie. (near "ON" at position 25)
Zapytanie SQL: Copy Edit Edit

SET FOREIGN_KEY_CHECKS = ON;

MySQL zwrócił komunikat: Documentation

#2014 - Commands out of sync; you can't run this command now

0

Sprawdziłem, problem jest w phpmyadmin

Zrobiłem procedurę:

DELIMITER $$
CREATE procedure ff()
BEGIN
	DECLARE maxID INT;
    DECLARE dawap Date;
	DECLARE i INT;
    DECLARE row_i INT;
	declare value VARCHAR(20) default ' ' ;
	SET i = 1;
    set @row_num=0;

    SELECT @maxID := COUNT(*) FROM `publications`;
    SELECT COUNT(*) INTO maxID FROM `publications`;
	block:WHILE i <= maxID DO
    	 
		SET value = ((DATEDIFF(CURRENT_DATE,'1970-01-01')) - (DATEDIFF((SELECT `createdAt`FROM `publications` WHERE `ID-id` = i),'1970-01-01')))  ; 	 
		SET i = i + 1;
        SELECT i,value;
	END WHILE block;
	select value ;
END$$
DELIMITER ;

i wykonałem

call ff()

MySQLWorkbench działa, w phpmyadmin dostaję ten sam błąd co ty. Podejrzewam, że to ma związek z tym że procedura zwraca kilka wyników, z czym phpmyadmin sobie nie radzi:

screenshot-20231208105029.png

Pozostaje chyba jedynie zgłosić do autorów: https://github.com/phpmyadmin/phpmyadmin/issues

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