[英]character comparison in oracle sql
I have the following query in sql 我在SQL中有以下查询
SELECT SUM(WT.TRANSACTION_QUANTITY * WTA.RATE_OR_AMOUNT)
FROM WIP_TRANSACTION_ACCOUNTS WTA, WIP_TRANSACTIONS WT
WHERE WTA.TRANSACTION_ID = WT.TRANSACTION_ID
AND WTA.ORGANIZATION_ID = WT.ORGANIZATION_ID
AND WTA.ACCOUNTING_LINE_TYPE =7
AND WTA.WIP_ENTITY_ID = 1757481
AND NVL(wt.ATTRIBUTE1,'-') LIKE '-'
AND NVL(wt.ATTRIBUTE2,'-') LIKE '-';
it return values, but using the same query in procedure with P_productioncard and P_SHIFT parameters, it return NULLS. 它返回值,但在过程中对P_productioncard和P_SHIFT参数使用相同的查询,则返回NULLS。
Here is the procedure 这是程序
FUNCTION get_value3 ( p_wip_entity_id NUMBER
, P_productioncard VARCHAR2
, P_SHIFT VARCHAR2)
RETURN NUMBER is
l_total number;
begin
SELECT SUM(WT.TRANSACTION_QUANTITY* WTA.RATE_OR_AMOUNT)
INTO l_total
FROM WIP_TRANSACTION_ACCOUNTS WTA, WIP_TRANSACTIONS WT
WHERE WTA.TRANSACTION_ID = WT.TRANSACTION_ID
AND WTA.ORGANIZATION_ID = WT.ORGANIZATION_ID
AND WTA.ACCOUNTING_LINE_TYPE =7
AND WTA.WIP_ENTITY_ID = p_wip_entity_id
AND NVL(wt.ATTRIBUTE1,'-') LIKE p_productioncard
AND NVL(wt.ATTRIBUTE2,'-') LIKE P_SHIFT;
RETURN l_total;
END;
In following SQL, I am calling this function. 在下面的SQL中,我将调用此函数。
select get_value3 ( 1757481, '-', '-') from dual;
I don't see an issue, but then you haven't provided any create table or insert statements for us to try and replicate the issue with. 我没有看到问题,但是您没有提供任何create table或insert语句供我们尝试复制问题。
I've done a small test, and it works as expected: 我做了一个小测试,它按预期工作:
with sample_data as (select 1 id, 10 val1, 10 val2, 'a' val3 from dual union all
select 1 id, 20 val1, 20 val2, null from dual union all
select 2 id, 30 val1, 30 val2, null from dual)
select sum(val1*val2) result1
from sample_data
where nvl(val3, '-') like '-'
and id = 1;
RESULT1
----------
400
create or replace function test_fn (p_id in number,
p_val3 in varchar2)
return number
is
l_total number;
begin
with sample_data as (select 1 id, 10 val1, 10 val2, 'a' val3 from dual union all
select 1 id, 20 val1, 20 val2, null from dual union all
select 2 id, 30 val1, 30 val2, null from dual)
select sum(val1*val2) result
into l_total
from sample_data
where nvl(val3, '-') like p_val3
and id = p_id;
return l_total;
end;
/
select test_fn(1, '-') result2
from dual;
RESULT2
----------
400
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.