简体   繁体   English

oracle sql中的字符比较

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM