• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Procedura SQL, która nie chce działać nie wiadomo czemu

Mały hosting, OGROMNE możliwości
0 głosów
213 wizyt
pytanie zadane 9 marca w SQL, bazy danych przez qax Dyskutant (8,150 p.)
zamknięte 11 marca przez Arkadiusz Waluk

Witam wszystkich

Próbuję napisać prostą procedurę w oparciu o system bazodanowy MySQL, która ma przyjmować jeden parametr w postaci odpowiedniego ciągu znaków, która ma z kolei podzielić go na krótsze ciągi znaków (z wykorzystaniem seperatora), tak, aby każdy z nich stanowił liczbę większą od 0 - w przeciwnym wypadku - lub jeśli taki podciąg znaków w ogóle nie będzie liczbą ma zostać odrzucony. Wynik ma zostać zwrócony w postaci jednokolumnowej tabeli. Niestety, z nieznanej przyczyny, nie otrzymuję odpowiednich rezultatów. Może ktoś zerkie na kod i pomoże mi w naprawieniu błędu?

Procedura funkcja (nie wymagają żadnej tabeli w bazie danych):

CREATE DEFINER=`root`@`localhost` PROCEDURE `new_procedure`(
	IN variants VARCHAR(50)
)
BEGIN
DECLARE counter INT DEFAULT 0;
SET
	@validated_params = FALSE,
    @params_number = (CHAR_LENGTH(variants) - CHAR_LENGTH(REPLACE(variants, ';', '')) + 1
);
SET
	@correct_params = JSON_ARRAY('[3, 1]');
WHILE counter < @params_number DO 
	SET 
	  counter = counter + 1;
	SET 
	  @variant = split_string(@variants, ';', counter);
	IF @variant > 0 THEN
		SET
			@correct_params = JSON_ARRAY_APPEND(@correct_params, '$', @variant);
	END IF;
END WHILE;
IF JSON_LENGTH(@correct_params) = @params_number THEN
	SET
	  @validated_params = TRUE;
END IF;
SELECT variant_number FROM JSON_TABLE(@correct_params, '$[*]' COLUMNS (variant_number INT PATH '$')) AS variant_number;
END
CREATE DEFINER=`root`@`localhost` FUNCTION `split_string`(
	string_to_split VARCHAR(250),
    delimimiter VARCHAR(5),
    position INT
) RETURNS int
    DETERMINISTIC
BEGIN
SET
	@splitted_string = REPLACE(
		SUBSTRING(
			SUBSTRING_INDEX(string_to_split, delimimiter, position),
			CHAR_LENGTH(SUBSTRING_INDEX(string_to_split, delimimiter, position - 1)) + 1
		), delimimiter, ''
	);
SET
	@splitted_number = (
		CASE WHEN @splitted_string REGEXP '^[0-9]+$' THEN
			CAST(@splitted_string AS UNSIGNED) ELSE -1 END
		);
RETURN @splitted_number;
END

Odpalenie procedury z przykładowymi poniższymi parametrami:

CALL new_procedure('2, b7, vb, 9');

Powinniśmy otrzymać tabelę w postaci:

variant_number
3
1
2
9

Jednak otrzymuję pustą tabelę... frown

Z góry dzięki za uwagę i pozdrawiam.

komentarz zamknięcia: Rozwiązane przez pytającego: https://stackoverflow.com/questions/79903860/sql-procedure-that-wont-work-for-some-reason/79903973#79903973

1 odpowiedź

0 głosów
odpowiedź 9 marca przez Edd Obywatel (1,400 p.)
new_procedure i new procedure (bez _)? Nie zapoznałem się z całością, ale to co od razu rzuciło mi się w oczy.
1
komentarz 9 marca przez qax Dyskutant (8,150 p.)
Gdzie widzisz new procedure (bez _)?
komentarz 9 marca przez Edd Obywatel (1,400 p.)

W ostatnim "okienku" ze skryptem.

EDIT: Teraz widzę w czym problem - u mnie nie wyświetla w FF idealnie tego "okienka" z kodem. Rzeczywiście jest tam podkreślenie.

komentarz 9 marca przez qax Dyskutant (8,150 p.)

Gdyby ktoś w przyszłości był ciekaw rozwiązania - znajdzie je tutaj: https://stackoverflow.com/questions/79903860/sql-procedure-that-wont-work-for-some-reason/79903973#79903973

komentarz 9 marca przez Edd Obywatel (1,400 p.)
Dzięki, że się podzieliłeś.

Podobne pytania

0 głosów
1 odpowiedź 847 wizyt
pytanie zadane 30 grudnia 2021 w SQL, bazy danych przez Grzegorzko Obywatel (1,110 p.)
0 głosów
1 odpowiedź 235 wizyt
pytanie zadane 25 listopada 2018 w SQL, bazy danych przez olejniczakbydgoszcz Początkujący (290 p.)
0 głosów
1 odpowiedź 617 wizyt
pytanie zadane 1 grudnia 2017 w C# przez BeFree Początkujący (380 p.)

93,718 zapytań

142,630 odpowiedzi

323,262 komentarzy

63,265 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...