我在很长一段时间内都在搜索这个问题,并在网络上经历了几个类似的问题,但无法解决我的问题。我有一个存储过程,其中我有一个参数SP_BRANCH_ID,我想要一个案例,如果它是null,那么我的表中的fkBranchId = null被检索,或者是Sp_branch_id中指定的那些。
PROCEDURE USP_GET_TAX_RATES_BY_ID(SP_CURSOR OUT T_CURSOR,SP_BRANCH_ID IN NUMBER)
IS
BEGIN
OPEN SP_CURSOR FOR
SELECT "TaxRates".* from "TaxRates" where "IsDeleted" = 'N' AND "fkBranchId" =(
case when SP_BRANCH_ID is null then null else (SP_BRANCH_ID) end );
END USP_GET_TAX_RATES_BY_ID;
答案 0 :(得分:2)
当SP_BRANCH_ID为空时,您将分配"fkBranchId" = NULL
,这在Oracle中使用错误。
使用IS NULL
进行空检查。
PROCEDURE USP_GET_TAX_RATES_BY_ID(SP_CURSOR OUT T_CURSOR,SP_BRANCH_ID IN NUMBER)
IS
BEGIN
OPEN SP_CURSOR FOR
SELECT "TaxRates".* from "TaxRates"
WHERE "IsDeleted" = 'N'
AND ( "fkBranchId" = SP_BRANCH_ID OR (SP_BRANCH_ID IS NULL AND "fkBranchId" IS NULL))
END USP_GET_TAX_RATES_BY_ID;
答案 1 :(得分:1)
您可以使用字符串
替换空检查SELECT "TaxRates".* from "TaxRates"
WHERE "IsDeleted" = 'N'
and NVL("fkBranchId" ,'null')=NVL(SP_BRANCH_ID,'null');