Я пытаюсь написать функцию, которая имеет 2 оператора case. Для фона у пользователя могут быть либо A, B, либо оба A и B (но в отдельных строках, поэтому я не могу использовать один оператор case, если я не использую LISTAGG, что мне сказали не делать для это.
Пример данных:
User State
1 A
1 B
2 A
3 B
SQL
CREATE OR REPLACE Function F_Calc_State(code Varchar2, id Number, time varchar2) Return Varchar2 AS
Calc_State(10) := null;
l_A varchar2(10) := null;
l_B varchar2(10) := null;
BEGIN
SELECT CASE WHEN state = 'A' THEN 'A'
ELSE null
END into l_A,
CASE WHEN state = 'B' THEN 'B'
ELSE null
END into l_B
FROM TABLE1
WHERE state in ('A', 'B')
AND TABLE1_CODE = code
AND TABLE1_ID = id
AND TABLE1_TIME = time;
CASE WHEN l_A = 'A' and l_B = 'B' then 'AB'
WHEN l_A = 'A' THEN 'A'
WHEN 1_B = 'B' THEN 'B'
ELSE stafford_recip_ind :='NEITHER';
END CASE;
RETURN Calc_State;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN 'NO DATA';
WHEN OTHERS THEN
RETURN SQLERRM ;
END F_Calc_State;`
Для получения желаемых результатов, когда я ввожу пользователя 1, я хочу, чтобы AB возвращался, для пользователя 2 = A и пользователя 3 = B. Я также пытался иметь два разных блока операторов выбора, но не мог заставить это работать , он просто поразит обработчик исключений по какой-то причине. Спасибо!