Первое, что я вижу, это то, что условие WHERE 1=1
не нужно.
Следующим является то, что DECODE('NOINR','NOINR', (SELECT CURRENCY_CODE FROM FND_CURRENCIES WHERE CURRENCY_CODE <> 'INR', ACR.CURRENCY_CODE);
может возвращать несколько строк (выбирается значение из подзапроса).
Вероятно, ЭТО возвращает более одного результата:
SELECT CURRENCY_CODE FROM FND_CURRENCIES WHERE CURRENCY_CODE <> 'INR', ACR.CURRENCY_CODE
Вероятно, имеется более одного CURRENCY_CODE
, который НЕ РАВЕН * 'INR'
Кроме того, не могли бы вы попробовать этот запрос и посмотреть, выполняет ли он то же самое?
select * from acr_cash_receipts_v acr where acr.receipt_date between '01-JAN-19' AND '31-JAN-19' and acr.currency_code in DECODE('NOINR','NOINR', (SELECT CURRENCY_CODE FROM FND_CURRENCIES WHERE CURRENCY_CODE <> 'INR'), ACR.CURRENCY_CODE);
Я изменил расположение круглой скобки ЗАКРЫТИЕ после 'INR', потому что это кажется неправильно сформированным подвыбором.
Вы также можете запустить подзапрос непосредственно, чтобы увидеть, возвращаются ли несколько строк:
SELECT CURRENCY_CODE FROM FND_CURRENCIES WHERE CURRENCY_CODE <> 'INR'
Без базы данных / образца я не могу выполнить этот запрос самостоятельно.