oracesql-嵌套CASE语句
我需要在函数中添加一个COD参数。COD是一个数字,可以是2、4或6。我需要将一个参数unit1转换为unit2,基于数量的多少 我只关心代码的最后一部分,当unit1是一个“片剂”并且oracesql-嵌套CASE语句,sql,oracle,Sql,Oracle,我需要在函数中添加一个COD参数。COD是一个数字,可以是2、4或6。我需要将一个参数unit1转换为unit2,基于数量的多少 我只关心代码的最后一部分,当unit1是一个“片剂”并且cod=4并且它正在从“片剂”转换为kg(对于unit2)时。我希望代码通过计算,当'KG'时,则IVALUE:=数量*0.0000011否则,如果它不是cod=4时,则我希望代码通过计算,当'KG'时,则IVALUE:=数量*0.00025 如何编写下面的代码以使其正确编译 我在Oracle中遇到语法错误。我没
cod=4
并且它正在从“片剂”转换为kg(对于unit2)时。我希望代码通过计算,当'KG'时,则IVALUE:=数量*0.0000011
否则,如果它不是cod=4
时,则我希望代码通过计算,当'KG'时,则IVALUE:=数量*0.00025
如何编写下面的代码以使其正确编译
我在Oracle中遇到语法错误。我没有正确地嵌套我的案例陈述
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;
谢谢。如果您仔细缩进结束部分,您会发现您缺少一个
结束案例代码>:
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;
-- shoudld have another END CASE; here
OUT_UOM := IVALUE ;
RETURN OUT_UOM;
END;
虽然两个嵌套的案例在那里似乎也是错误的;第二个仅覆盖第一个设置的值-可能您还缺少以下值之间的ELSE
:
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;
ELSE
CASE UPPER(UNIT2)
WHEN 'KG' THEN IVALUE := QUANTITY * 0.00025;
WHEN 'TABL' THEN IVALUE := QUANTITY * 1;
ELSE NULL;
END CASE;
END CASE;
END CASE;
OUT_UOM := IVALUE ;
RETURN OUT_UOM;
END;
看起来您缺少了最后一个结束案例
。