Oracle的情况为null

时间:2015-01-02 12:03:33

标签: sql oracle null case

我在很长一段时间内都在搜索这个问题,并在网络上经历了几个类似的问题,但无法解决我的问题。我有一个存储过程,其中我有一个参数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;  

2 个答案:

答案 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');