null 的 Oracle 案例

Oracle case for null

我已经搜索这个问题很长时间了,并且在这个网站上经历了几个类似的问题,但无法解决我的问题。我有一个存储过程,其中我有一个参数 SP_BRANCH_ID,我想要一个案例,如果它为 null,那么我的 table 中的 fkBranchId = null 被检索或者 [=14= 中指定的那些].

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;  

当 SP_BRANCH_ID 为 null 时,您正在分配 "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;

您可以用字符串替换空值检查

SELECT "TaxRates".* from "TaxRates"
   WHERE "IsDeleted" = 'N'
   and NVL("fkBranchId" ,'null')=NVL(SP_BRANCH_ID,'null');