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.
Michał Jarosz

Michał Jarosz Frontend Developer &
Team Leader

Temat: [mysql] pobieranie wartości do zmiennej z procedury

Zamiast porcedury użyj funkcji.

konto usunięte

Temat: [mysql] pobieranie wartości do zmiennej z procedury

Działa! Dzięki wielkie!

Następna dyskusja:

[MySQL+Qt] zwracanie tabeli...




Wyślij zaproszenie do