Mając dziwny problem wybierając zmienne sesji, które są zmieniane przez procedurę przechowywaną.
call calculate("input1", "input2",@price);
select @price; /*price is 2.00*/
call calculate("anotherinput","anotherinput2",@price);
select @price; /*price is 3.00*/
Jednak odpowiedź, którą otrzymuję, wynosi w rzeczywistości 2 3,00 "zamiast 2,00, a następnie 3,00. Zakładając, że jest on nadpisywany i wszystko zmywa. Ale jaki jest najlepszy sposób na zrobienie tego?
Odpowiedzi:
0 dla odpowiedzi № 1Procedura mogła nie zdefiniować parametru price
jako OUT
parametr, ale IN
parametr. Chyba że przeszedł IN
Parametr będzie zawsze wyświetlał tę samą przekazaną wartość OLD.
Przykład roboczy:
mysql> create procedure test_sp( inout p int, in q int ) set p := p*q;
mysql> set @p := 4; set @q := 6;
mysql> delimiter //
mysql> call test_sp( @p, @q );
-> select @p, @q;
-> call test_sp( @p, @q );
-> select @p, @q;
-> //
+------+------+
| @p | @q |
+------+------+
| 24 | 6 |
+------+------+
1 row in set (0.00 sec)
+------+------+
| @p | @q |
+------+------+
| 144 | 6 |
+------+------+
1 row in set (0.01 sec)