2011-08-16 11 views
4

このストアドプロシージャがNULL(SQL Server 2005を使用しています)を返す理由を他の人に教えてもらえますか?助けてくれてありがとう。NULLを返す単純な数学的ストアドプロシージャ?

CREATE PROCEDURE calc_runningtotal_averageprice_realisedpl 
    @filled_size    REAL, 
    @reported_execution   REAL, 
    @old_running_total   REAL, 
    @old_average_price   REAL, 
    @new_running_total   REAL OUTPUT, 
    @new_average_price   REAL OUTPUT, 
    @realised_pl    REAL OUTPUT 
AS 
BEGIN 

    SET @new_running_total = @old_running_total + @filled_size 
    SET @realised_pl = 0 
    IF SIGN(@filled_size) = SIGN(@old_running_total) 
     BEGIN 
      SET @new_average_price = (@filled_size * @reported_execution + @old_running_total * @old_average_price)/(@new_running_total) 
     END 
    ELSE 
     BEGIN 
      DECLARE @quantity   REAL 
      IF ABS(@reported_execution) < ABS(@old_running_total) 
       SET @quantity = ABS(@reported_execution) 
      ELSE 
       SET @quantity = ABS(@old_running_total); 


      SET @realised_pl = (@reported_execution - @old_average_price) * @quantity * SIGN(@filled_size) * -1; 
      SET @new_average_price = 
       CASE 
        WHEN ABS(@filled_size) < ABS(@old_running_total) THEN @old_average_price 
        WHEN ABS(@filled_size) = ABS(@old_running_total) THEN 0 
        WHEN ABS(@filled_size) > ABS(@old_running_total) THEN @reported_execution 
       END 
     END 
END 

私は次のことを実行する場合、私は3 NULLS

DECLARE @new_running_total  REAL 
DECLARE @new_average_price  REAL 
DECLARE @realised_pl   REAL 

EXEC calc_runningtotal_averageprice_realisedpl 1, 1, 2, 2, @new_running_total, @new_average_price, @realised_pl 
SELECT @new_running_total, @new_average_price, @realised_pl 

を取得し、私は3、1.66666のようなものを期待しています、0

+1

アレックスK.の解決策。実際、私が扱ってきたほとんどの言語では、呼び出し文で何らかのキーワードを使って変数が参照渡しされていることを明示的に指定する必要があります。 – deutschZuid

答えて

9

あなたは単にと呼び出しで出力パラメータを飾るされていませんOUTPUT

EXEC calc_runningtotal_averageprice_realisedpl 1, 1, 2, 2, 
    @new_running_total OUTPUT, 
    @new_average_price OUTPUT, 
    @realised_pl OUTPUT 
+0

私は助けてくれてありがとうございました... – Bertie

関連する問題