konto usunięte

Temat: [Oracle] Jak przekazać listę argumentów do raportu

Witajcie!

Muszę zrobić raport, w którym użytkownik będzie posiadał opcję wpisania N argumentów po przecinku. Jak przekazać tę listę argumentów do klauzuli IN ? Pozornie proste, ale chcę uzyskać taką funkcjonalność:

Użytkownik wpisuje po przecinku np: wartosc1, wartosc2, wartoscN i z tego buduje mi się SQL:

select * from tabela where pole IN ('wartosc1', 'wartosc2', 'wartoscN')

Trudność jest taka, że w wyrażeniu IN każdy argument musi być w apostrofie. Nie chcę zrzucać obowiązku wypisywania apostrofów na użytkownika.

Nie mam pomysłu jak to zrealizować.

Pozdrawiam.

konto usunięte

Temat: [Oracle] Jak przekazać listę argumentów do raportu

A o narzędziu bliżej może coś?
W arkuszu excel można np włączyć do zapytania wartości określonych komórek(a mechanizm ODBC zapewni właściwy typ zmiennej), w acces zapewnić dodatkową formatkę do wypełnienia tabeli pomocniczej i wstawić w miejsce in ('x','y','z') in (select pole from pomocnicza) a ciapki same się dostawią (w zależności od typu pól.
Poza tym, można się zdać na prawidłowe rozpoznanie zmiennej parametrycznej przez kwerendę ale to z kolei zależy od bazy danych. Na pewno, trochę inaczej zachowa się ORACLE a inaczej FIREBIRD a jeszcze inaczej MS SQL...
EDIT Sorry, ze ORACLE to podałeś ale o narzędziu coś więcej można.... to przez te kwadratowe nawiasy. :)Ten post został edytowany przez Autora dnia 09.02.16 o godzinie 08:01

konto usunięte

Temat: [Oracle] Jak przekazać listę argumentów do raportu

Mój błąd. Narzędzie w którym będzie rzeźbiony raport to SQL Developer. Baza danych to ORACLE w wersji 11gTen post został edytowany przez Autora dnia 09.02.16 o godzinie 08:49
Paweł Broda

Paweł Broda Software Engineer

Temat: [Oracle] Jak przekazać listę argumentów do raportu

jakoś tak?

SELECT '''' || replace('&x', ',', ''',''') || '''' AS x FROM dual;

konto usunięte

Temat: [Oracle] Jak przekazać listę argumentów do raportu

Paweł B.:
jakoś tak?

SELECT '''' || replace('&x', ',', ''',''') || '''' AS x FROM dual;

O to chodziło, dziękuję. Nigdy bym chyba na to nie wpadł...

konto usunięte

Temat: [Oracle] Jak przekazać listę argumentów do raportu

Kurcze, jednak nie działa...

select * from tabela where pracownik in (SELECT '''' || replace('&x', ',', ''',''') || '''' AS x FROM dual)


nie zwraca żadnych wyników. To musi być jednak tablica lub kursor...Ten post został edytowany przez Autora dnia 09.02.16 o godzinie 10:57
Piotr Dryńkowski

Piotr Dryńkowski Specjalista ds.
Systemów ERP,
Crystal Reports,
PL/SQL

Temat: [Oracle] Jak przekazać listę argumentów do raportu

Może tak

...in (SELECT regexp_substr (p_parametr, '[^,]+', 1, ROWNUM)
FROM dual
CONNECT BY LEVEL <= LENGTH (regexp_replace (p_parametr, '[^,]+')) + 1)


u mnie działa :)

konto usunięte

Temat: [Oracle] Jak przekazać listę argumentów do raportu

Piotr D.:
Może tak

...in (SELECT regexp_substr (p_parametr, '[^,]+', 1, ROWNUM)
FROM dual
CONNECT BY LEVEL <= LENGTH [/quote]> (regexp_replace (p_parametr, '[^,]+')) + 1)

u mnie działa :)

Też to znalazłem. Niestety też mi to nie działa (chyba), bo po paru dobrych minutach anulowałem zapytanie. Normalnie (czyli na sztywno wpisane argumenty do klauzuli IN) zapytanie generuje mi się w parę sekund.Ten post został edytowany przez Autora dnia 09.02.16 o godzinie 13:23
Piotr Dryńkowski

Piotr Dryńkowski Specjalista ds.
Systemów ERP,
Crystal Reports,
PL/SQL

Temat: [Oracle] Jak przekazać listę argumentów do raportu

Też to znalazłem. Niestety też mi to nie działa (chyba), bo po paru dobrych minutach anulowałem zapytanie. Normalnie (czyli na sztywno wpisane argumenty do klauzuli IN) zapytanie generuje mi się w parę sekund.

Dziwne, u mnie działa.
Piotr Dryńkowski

Piotr Dryńkowski Specjalista ds.
Systemów ERP,
Crystal Reports,
PL/SQL

Temat: [Oracle] Jak przekazać listę argumentów do raportu

W tym przykładzie musisz podawać wartości w parametrze w ten sposób:

'W1,W2,WN'Ten post został edytowany przez Autora dnia 11.02.16 o godzinie 11:35

Temat: [Oracle] Jak przekazać listę argumentów do raportu

Tabelę w której szukasz zadanego ciągu można połączyć (join) z funkcją split
Funkcja split w przykładzie (druga funkcja dotyczy Twojego zagadnienia):
http://blog.nostitz.eu/2009/08/funkcja-split-w-oracle-...

(Ja używałam funkcji split w T-SQL i przyniosło zamierzony efekt. Przykład z joinem, ale dla T-SQL: https://ole.michelsen.dk/blog/split-string-to-table-usi... )

Albo użyć typów tabelarycznych, tutaj przykład (pkt. 4. Table function):
https://lalitkumarb.com/2014/12/02/split-comma-delimite...

P.S. Jeśli parametr będzie zawierał wiele wartości po przecinku to warto też zwrócić uwagę na czas wykonania, tutaj więcej http://www.gregreda.com/2013/06/03/join-vs-exists-vs-in/

konto usunięte

Temat: [Oracle] Jak przekazać listę argumentów do raportu

Dziękuję. Już nie aktualne. Znalazłem w jednym z pakietów procedurę, która pięknie realizuje moje zadanie.



Wyślij zaproszenie do