Oskar Shon

Oskar Shon Dodatki do Office
www.VBATools.pl

Temat: Ograniczenie dla operatorów Like i In w jednym

Może ktoś się pocił i ma rozwiązanie. Chciałbym zastosować możliwość podania w parametrze produktu lub wielu konkretnych produktów (np rozdzielonych średnikiem): DUKT1;PRODUKT10;PROD6
Aby zbudować parametry do wielu elementów ograniczenia chciałem skorzystać z takiego sposobu zapisu:

select '''' || replace('DUKT1;PRODUKT10;PROD6', ';', ''',''') || '''' from dual 


otrzymuje stringa do likea, niemniej jednak mi to nie działa w takim zastosowaniu:

where (u.PRODUKTY in ('''' || replace('&Produkt', ';', ''',''') || '''') or  u.PRODUKTY like '%&Produkt%')


No ale klops bo mi to nie chce działać.
Ktoś walczył z podobnym zagadnieniem?Ten post został edytowany przez Autora dnia 12.04.18 o godzinie 16:45
Krzysztof Wojtal

Krzysztof Wojtal Specjalista ds
systemu ERP, PL/SQL,
Crystal rep., Power
B...

Temat: Ograniczenie dla operatorów Like i In w jednym

Cześć,

Ja korzystam z parametrów z wartościami wielokrotnymi, w których podaję pełny symbol lub używając maski oddzielone od siebie średnikami np. abcd; CD%;FDS%;SDRT. Napisaną ma do tego API typu Pipelined. Plus takiego rozwiązania jest taki, że zawsze mam zwracane symbole z wielkich liter, odstępy pomiędzy średnikami są automatycznie usuwane.

Istnieje rozwiązanie bez potrzeby pisania swojej funkcji. Minusem takiego rozwiązania jest to, że albo wpisujesz pełne symbole albo korzystasz tylko z maski. Poniżej masz kilka przykładów ja można z tego korzystać:

___________________________________________________________

SELECT *
FROM
ifsapp.Site S
WHERE
S.Contract IN (SELECT
Regexp_Substr('11;12;13;K%', '[^;]+', 1, LEVEL)
FROM dual
CONNECT BY Regexp_Substr('11;12;13;K%', '[^;]+', 1, LEVEL) IS NOT NULL)
/**************************************************/
SELECT S.*
FROM
(
SELECT
Regexp_Substr('11;12;13;K%', '[^;]+', 1, LEVEL) Wynik
FROM dual
CONNECT BY Regexp_Substr('11;12;13;K%', '[^;]+', 1, LEVEL) IS NOT NULL
) UM
LEFT OUTER JOIN ifsapp.Site S ON
S.Contract LIKE UM.Wynik||'%'
/****************************************/
SELECT
C.Company,
C.Name
FROM
(
SELECT
Regexp_Substr('11;12;13;K%', '[^;]+', 1, LEVEL) Paramert_1,
NULL Parametr_2
FROM dual
CONNECT BY Regexp_Substr('11;12;13;K%', '[^;]+', 1, LEVEL) IS NOT NULL

UNION ALL

SELECT
NULL Parametr_1,
Regexp_Substr('AK;AG;AN;AH', '[^;]+', 1, LEVEL) Parametr_2
FROM dual
CONNECT BY Regexp_Substr('AK;AG;AN;AH', '[^;]+', 1, LEVEL) IS NOT NULL
) Param
LEFT OUTER JOIN ifsapp.Company C ON
C.Company LIKE NVL(Param.Parametr_2,'9999')||'%'

LEFT OUTER JOIN ifsapp.Site S ON
S.Company = C.Company

_____________________________________________________________

Mam nadzieje, że o takie rozwiązanie Ci chodziło.

Pozdrawiam
Krzysiek
Oskar Shon

Oskar Shon Dodatki do Office
www.VBATools.pl

Temat: Ograniczenie dla operatorów Like i In w jednym

Kurka, bez levelowania raport 4sek ale wyników brak. Z levelowaniem 18min i wypada je przerwać bo przecież nie o to chodzi aby ktoś umarł oczekując na dane.


select u.weee,
sum(u.quantity * decode(u.direction, '-', -1, '+', 1, 0)) ilosc,
sum(u.waga * u.quantity * decode(u.direction, '-', -1, '+', 1, 0)) waga
from ifsapp.TABELKAAA u
where trunc(u.dated) >= to_date('&data_od', 'YYYY-MM-DD')
and trunc(u.dated) <= to_date('&data_do', 'YYYY-MM-DD')
and (u.MARKA in Regexp_Substr('&Marka', '[^;]+',1, LEVEL ) or u.MARKA like '%&Marka%')
and (u.KONTRAHENT in Regexp_Substr('&Kontrahent', '[^;]+',1, LEVEL) or u.KONTRAHENT like '%&Kontrahent%')
CONNECT BY Regexp_Substr('&Kontrahent', '[^;]+', 1, LEVEL) IS NOT NULL
CONNECT BY Regexp_Substr('&Marka', '[^;]+', 1, LEVEL) IS NOT NULL
group by weee
order by 1
Krzysztof Wojtal

Krzysztof Wojtal Specjalista ds
systemu ERP, PL/SQL,
Crystal rep., Power
B...

Temat: Ograniczenie dla operatorów Like i In w jednym

Cześć,

Spróbuj z poniższym zapytaniem:

_________________________________

select u.weee,
sum(u.quantity * decode(u.direction, '-', -1, '+', 1, 0)) ilosc,
sum(u.waga * u.quantity * decode(u.direction, '-', -1, '+', 1, 0)) waga
from ifsapp.TABELKAAA u
where trunc(u.dated) BETWEEN to_date('&data_od', 'YYYY-MM-DD') and to_date('&data_do', 'YYYY-MM-DD')
AND (u.MARKA IN (SELECT Regexp_Substr('&Marka', '[^;]+', 1, LEVEL) FROM dual CONNECT BY Regexp_Substr('&Marka', '[^;]+', 1, LEVEL) IS NOT NULL)
OR u.MARKA LIKE '%&Marka%')
AND (u.KONTRAHENT IN (SELECT Regexp_Substr('&Kontrahent', '[^;]+', 1, LEVEL) FROM dual CONNECT BY Regexp_Substr('&Kontrahent', '[^;]+', 1, LEVEL) IS NOT NULL)
OR u.KONTRAHENT LIKE '%&Kontrahent%')
--and (u.MARKA in Regexp_Substr('&Marka', '[^;]+',1, LEVEL ) or u.MARKA like '%&Marka%')
--and (u.KONTRAHENT in Regexp_Substr('&Kontrahent', '[^;]+',1, LEVEL) or u.KONTRAHENT like '%&Kontrahent%')
--CONNECT BY Regexp_Substr('&Kontrahent', '[^;]+', 1, LEVEL) IS NOT NULL
--CONNECT BY Regexp_Substr('&Marka', '[^;]+', 1, LEVEL) IS NOT NULL
group by weee
order by 1

_____________________________________

Pozdrawiam
Krzysiek
Oskar Shon

Oskar Shon Dodatki do Office
www.VBATools.pl

Temat: Ograniczenie dla operatorów Like i In w jednym

Super - dzięki.
Faktycznie pomogło.
Pozdrawiam zatem - daje to nowe możliwości.



Wyślij zaproszenie do