С CREATE FUNCTION
Операции курсора, ссылающиеся на локальные курсоры, которые объявлены, открыты, закрыты и освобождены в функции.Допускаются только операторы FETCH, которые присваивают значения локальным переменным с помощью предложения INTO;Операторы FETCH, которые возвращают данные клиенту, недопустимы
Это означает, что это неправильно
DECLARE cursor_for_inline_select1 CURSOR LOCAL FOR
SELECT *
FROM CR_BIRIM_CEVRIM
WHERE ID_MAMUL = @p_ID_MAMUL
AND ((ID_BIRIM = @p_ID_BIRIMDEN
AND ID_BIRIM2 = @p_ID_BIRIME)
OR (ID_BIRIM2 = @p_ID_BIRIMDEN
AND ID_BIRIM = @p_ID_BIRIME))
AND VALID = 1
Вы не назначаете вывод CURSOR локальным переменным.
Пожалуйста, опишите, что вы хотите сделать с примерами данных: я уверен, что это простой SELECT с CASE
Редактировать: вам не нужен CURSOR, если мой pl / sql не way выкл
CREATE FUNCTION f_birim_cevrim_katsayi (
@p_ID_MAMUL FLOAT ,
@p_ID_BIRIMDEN FLOAT ,
@p_ID_BIRIME FLOAT
)
RETURNS float
AS
BEGIN
DECLARE @v_katsayi FLOAT;
IF @p_ID_BIRIMDEN != @p_ID_BIRIME
BEGIN
SELECT
@v_katsayi = CASE
WHEN ID_BIRIM = @p_ID_BIRIMDEN THEN c.MT_ORAN
ELSE 1/c.MT_ORAN
END
FROM
CR_BIRIM_CEVRIM c
WHERE
ID_MAMUL = @p_ID_MAMUL
AND ((ID_BIRIM = @p_ID_BIRIMDEN
AND ID_BIRIM2 = @p_ID_BIRIME)
OR (ID_BIRIM2 = @p_ID_BIRIMDEN
AND ID_BIRIM = @p_ID_BIRIME))
AND VALID = 1;
END
RETURN ROUND(ISNULL(@v_katsayi, 1), 10);
END
GO