2015-01-02 4 views
0

Я искал этот вариант довольно долго и просмотрел несколько похожих вопросов в этой сети, но не смог решить мой вопрос. У меня есть хранимая процедура, в которой у меня есть параметр SP_BRANCH_ID, я хочу, чтобы случай, если он равен нулю, возвращает fkBranchId = null в моей таблице, а также те, которые указаны в Sp_branch_id.Oracle case for 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" =(
     case when SP_BRANCH_ID is null then null else (SP_BRANCH_ID) end); 
END USP_GET_TAX_RATES_BY_ID; 
+0

мы можем сделать это с помощью самой NVL Eg: NVL (sp_branch_id, нуль). Почему вам нужен случай здесь? – arunb2w

+0

потому что из переднего конца, если я не выбрал ни одной ветки, null будет идти в db – Sana

+0

Thats okay ... проверить наличие нулевого NVL будет достаточно. Вы пытались с помощью nvl в вашем месте где? – arunb2w

ответ

1

Вы можете заменить проверку нулевой со строкой

SELECT "TaxRates".* from "TaxRates" 
    WHERE "IsDeleted" = 'N' 
    and NVL("fkBranchId" ,'null')=NVL(SP_BRANCH_ID,'null'); 
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; 
+0

Хорошая точка Махеш +1. @OP должен знать, как интерпретируется три значащий 'NULL' в Oracle. Все, что равно NULL, не имеет смысла. Я хочу, чтобы Oracle удалил дилемму между пустой строкой и NULL. –