Мне нужно добавить параметр ХПК в функцию. COD - это число, либо 2, 4, либо 6. Мне нужно преобразовать параметр unit1 в unit2 в зависимости от количества.
Меня волнует только последняя часть кода, когда unit1 - это «таблетка», а cod = 4
и он преобразуется из «таблетки» в килограммы (для unit2). Я хочу, чтобы код вычислялся как WHEN 'KG' THEN IVALUE := QUANTITY * 0.0000011
, иначе, если это что-то еще, кроме c od = 4
, тогда я хочу, чтобы он вычислялся как WHEN 'KG' THEN IVALUE := QUANTITY * 0.00025
.
Как мне написать код ниже, чтобы он правильно компилировался?
Я получаю синтаксическую ошибку в Oracle. Не правильно ли я вложил свои утверждения CASE.
create or replace FUNCTION CONVERTUNITOFMEASURE_COD
(COD NUMBER,
QUANTITY NUMBER,
UNIT1 VARCHAR2,
UNIT2 VARCHAR2)
RETURN NUMBER IS
IVALUE NUMBER;
OUT_UOM NUMBER;
BEGIN
CASE UPPER(UNIT1)
WHEN 'KG' THEN
CASE UPPER(UNIT2)
WHEN 'LB' THEN IVALUE := QUANTITY / 0.45359237;
WHEN 'G' THEN IVALUE := QUANTITY / 0.001;
WHEN 'L' THEN IVALUE := QUANTITY / 0.8;
WHEN 'TABL' THEN IVALUE := QUANTITY / 0.00025;
WHEN 'GAL' THEN IVALUE := QUANTITY / 2.64;
WHEN 'KG' THEN IVALUE := QUANTITY * 1;
ELSE NULL;
END CASE;
WHEN 'G' THEN
CASE UPPER(UNIT2)
WHEN 'LB' THEN IVALUE := QUANTITY * 0.00220462262 ;
WHEN 'KG' THEN IVALUE := QUANTITY * 0.001;
WHEN 'G' THEN IVALUE := QUANTITY * 1;
ELSE NULL;
END CASE;
WHEN 'LB' THEN
CASE UPPER(UNIT2)
WHEN 'KG' THEN IVALUE := QUANTITY * 0.45359237;
WHEN 'G' THEN IVALUE := QUANTITY * 453.59237;
WHEN 'LB' THEN IVALUE := QUANTITY * 1;
ELSE NULL;
END CASE;
WHEN 'L' THEN
CASE UPPER(UNIT2)
WHEN 'ML' THEN IVALUE := QUANTITY * 1000;
WHEN 'GAL' THEN IVALUE := QUANTITY * 0.264172052;
WHEN 'KG' THEN IVALUE := QUANTITY * 0.8;
WHEN 'L' THEN IVALUE := QUANTITY * 1;
ELSE NULL;
END CASE;
WHEN 'ML' THEN
CASE UPPER(UNIT2)
WHEN 'L' THEN IVALUE := QUANTITY * 0.001;
WHEN 'GAL' THEN IVALUE := QUANTITY / 3785.41178;
WHEN 'ML' THEN IVALUE := QUANTITY * 1;
ELSE NULL;
END CASE;
WHEN 'GAL' THEN
CASE UPPER(UNIT2)
WHEN 'L' THEN IVALUE := QUANTITY * 3.785411784;
WHEN 'ML' THEN IVALUE := QUANTITY * 3785.41178;
WHEN 'KG' THEN IVALUE := QUANTITY * 2.64;
WHEN 'GAL' THEN IVALUE := QUANTITY * 1;
ELSE NULL;
END CASE;
WHEN 'TABL' THEN
CASE WHEN (COD) = 4 THEN
CASE UPPER(UNIT2)
WHEN 'KG' THEN IVALUE := QUANTITY * 0.0000011;
WHEN 'TABL' THEN IVALUE := QUANTITY * 1;
ELSE NULL;
END CASE;
CASE UPPER(UNIT2)
WHEN 'KG' THEN IVALUE := QUANTITY * 0.00025;
WHEN 'TABL' THEN IVALUE := QUANTITY * 1;
ELSE NULL;
END CASE;
ELSE NULL;
END CASE;
OUT_UOM := IVALUE ;
RETURN OUT_UOM;
END;
Спасибо.