我有一個功能,即我根據如下的變量傳遞查詢數據:如何使用「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