konto usunięte
Temat: [mysql] pobieranie wartości do zmiennej z procedury
Witam,Niedawno dokonałem migracji z sp mssql na mysql i od wczoraj zmagam się z pewnym problemem, z którym nawet google.com nie chce dać mi nawet wskazówki (może źle formułuję zapytanie):
Mam procedurę proc1(d1,d2,d3), która na wyjściu zwraca zawsze jeden rekord DECIMAL(10,2).
Jak w procedurze (powiedzmy proc2), nadrzędnej do proc1, przypisać do zmiennej wynik proc1.
nie działa coś takiego:
====================================
DELIMITER $$
DROP PROCEDURE IF EXISTS `proc2` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc2`()
BEGIN
DECLARE wynik DECIMAL(10,2);
DECLARE d1 DATE Default '2010-01-01';
DECLARE d2 DATE Default '2010-01-02';
DECLARE d3 INT Default 1;
/*polecenie SET generuje błąd*/
SET wynik = (CALL proc1(d1,d2,d3));
SELECT wynik;
END $$
DELIMITER;
====================================
Nie działa również próba użycia poniższego wiersza zamiast SET:
SELECT CONCAT('CALL proc1(',d1,',',d2,',',d3,')') INTO wynik;
to drugie przechodzi chociaż przez parser sql, ale wyrzuca podczas CALL proc2(); zawsze wartość 0.00, chociaż powinno wyrzucić 220.0
Trzecią opcją jest użycie zamiast CONCAT, polecenie CONCAT_WS.
Wyrzuca on niezależnie od wejściowych parametrów d1,d2,d3 zawsze wynik 2010.00 a więc również źle.
Wiem, że CONCAT zawsze zwraca stringa ale po pierwsze mysql raczej sam konwertuje to a po drugie również użycie CAST(CONCAT() AS DECIMAL(10,2)) niewiele zmienia.
Z góry dziękuję za pomoc.