我有一个功能,即我根据如下的变量传递查询数据:如何使用“IN”内部功能来查询动态数据
CREATE OR REPLACE FUNCTION IR.SRG (
IR_item IN VARCHAR2,
IR_comp VARCHAR2,
IR_locn VARCHAR2,
IR_Type VARCHAR2,
IR_fromdate DATE,
IR_tilldate DATE
)
RETURN NUMBER
DETERMINISTIC
IS
IR_qty NUMBER;
BEGIN
IF IR_Type = 'O'
THEN
SELECT SUM(QTY)
INTO IR_qty
FROM STOCK_LEDGER
WHERE
ITEM_CODE = IR_item AND
LOCATION_CODE IN
DECODE(IR_locn,
'ALL',
'('
|| '''D2'', ''D4'', ''D5'', ''D11'''
|| ')',
'(' || IR_locn || ')')
AND DOCUMENTDATE <= IR_TILLDATE
AND DOCUMENTDATE >= IR_FROMDATE;
END IF;
RETURN (NVL (IR_QTY, 0));
EXCEPTION
WHEN ZERO_DIVIDE
THEN
RETURN 0;
END;
/
如果用户为IR_locn
通过D2
参数,那么查询应该针对该特定位置运行,如果用户通过ALL
,则查询应该按照指定的四个位置D2, D4, D5,D11
运行。
我不能通过使用IN
来实现它,数据不会返回任何记录。
我试着运行查询使用DUAL
和IN
子句的格式看起来很好。
Select DECODE ('ALL',
'ALL',
'('
|| '''D2'', ''D4'', ''D5'', ''D11'''
|| ')',
'(' || 'D5' || ')'
) FROM DUAL
我得到如下就像我跟ALL
运行它的结果:
('D2', 'D4', 'D5', 'D11')
让我试试看。谢谢 – user3625561
注意: MyLocations:= SYS.ODCIVARCHAR2LIST('D2'); 'D2'必须由IR_locn替换。 – Mohamad
我尝试了上述,它工作正常。谢谢。 – user3625561