oraclesql中的字符比较

oraclesql中的字符比较,sql,oracle,Sql,Oracle,我在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 =

我在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 '-';
它返回值,但使用过程中与p_productioncard和p_SHIFT参数相同的查询,它返回空值

这是程序

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;
在下面的SQL中,我调用这个函数

select get_value3 (  1757481, '-', '-') from dual;

我没有看到问题,但是您没有提供任何CREATETABLE或insert语句供我们尝试复制问题

我做了一个小测试,它按预期工作:

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

(1) 这些查询是不同的。(2) 您应该学会使用正确的显式
连接
语法。刚才删除了1行,这是因为还有其他行,但我认为这里的查询应该很简单。
和NVL(wt.ATTRIBUTE1,“-”)类似于“-”
看起来是一种非常复杂的方式来表示
,wt.ATTRIBUTE1为NULL
;这就是你想要的吗?@Boneist-在我看来,NVL结构的意思是“wt.ATTRIBUTE1=”-“或者wt.ATTRIBUTE1为空”。我自己更喜欢这个“扩展”版本,因为NVL很难解释;我假设连字符不是该列中的实际值。