Я создал функцию, которой для вычисления результата нужны два числа и тип операции. К сожалению, все результаты этой функции нулевые.

CREATE FUNCTION DBO.CALC
    (@NUMBER1 FLOAT, @OPERATION VARCHAR, @NUMBER2 FLOAT)
RETURNS FLOAT
BEGIN
    DECLARE @RESULT FLOAT

    SET @RESULT = CASE  
                     WHEN @OPERATION = 'DODAWANIE' THEN @NUMBER1 + @NUMBER2
                     WHEN @OPERATION = 'ODEJMOWANIE' THEN @NUMBER1 - @NUMBER2
                     WHEN @OPERATION = 'MNOZENIE' THEN @NUMBER1 * @NUMBER2
                     WHEN @OPERATION = 'DZIELENIE' THEN @NUMBER1 / @NUMBER2
                     ELSE NULL
                  END

    RETURN @RESULT
END

SELECT 
    DBO.CALC(2, 'DODAWANIE', 1), 
    DBO.CALC(2, 'ODEJMOWANIE', 1),
    DBO.CALC(2, 'MNOZENIE', 1), 
    DBO.CALC(2, 'DZIELENIE', 1)
0
Kuba 9 Фев 2021 в 08:33

1 ответ

Лучший ответ

Вам нужно указать LENGTH при использовании VARCHAR, поэтому в вашей функции вам нужно добавить LENGTH в @OPERATION VARCHAR(LENGTH):

CREATE FUNCTION DBO.CALC(@NUMBER1 FLOAT, @OPERATION VARCHAR(LENGTH), @NUMBER2 FLOAT)
RETURNS FLOAT
BEGIN
DECLARE @RESULT FLOAT
SET @RESULT =CASE 
            WHEN @OPERATION ='DODAWANIE' THEN @NUMBER1 +@NUMBER2
            WHEN @OPERATION ='ODEJMOWANIE' THEN @NUMBER1-@NUMBER2
            WHEN @OPERATION ='MNOZENIE' THEN @NUMBER1*@NUMBER2
            WHEN @OPERATION ='DZIELENIE' THEN @NUMBER1/@NUMBER2
            ELSE NULL
        END
RETURN @RESULT
END

SELECT DBO.CALC(2,'DODAWANIE',1), DBO.CALC(2,'ODEJMOWANIE',1),
    DBO.CALC(2,'MNOZENIE',1), DBO.CALC(2,'DZIELENIE',1)
0
Abdul Raheem Ghani 9 Фев 2021 в 05:58