ďťż
 
[oracle] =?ISO-8859-2?Q?zmia=BFd=BFony_przez_problem=3A_za?==?ISO-8859-2?Q?pytanie_do_hierarchi?= ďťż
 
[oracle] =?ISO-8859-2?Q?zmia=BFd=BFony_przez_problem=3A_za?==?ISO-8859-2?Q?pytanie_do_hierarchi?=
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

[oracle] =?ISO-8859-2?Q?zmia=BFd=BFony_przez_problem=3A_za?==?ISO-8859-2?Q?pytanie_do_hierarchi?=



T-BAG - 27-07-2007 00:01
[oracle] =?ISO-8859-2?Q?zmia=BFd=BFony_przez_problem=3A_za?==?ISO-8859-2?Q?pytanie_do_hierarchi?=
  witam!

zmiażdżył mnie następujący problem. jest tablica zawierająca powiązane z
sobą kolumny (elementy zamówienia). jej fragment wygląda tak:

nbr child D/U parent grupa
---|------|-----|------|----
1 | P1 | D | |
2 | P2 | D | |
3 | P3 | D | |
4 | T1 | U | P1 | T
5 | T5 | D | P1 | T
6 | T4 | D | P3 | T
7 | A1 | N | P2 | H
8 | A7 | D | P3 | H

na przykład, na pozycji 8 znajduje się element A7, który jest z grupy H,
został dodany (D), a elementem nadrzędnym dla niego jest P3.

przy wyborze elementu P1 chciałbym uzyskać poniższy wiersz:

| elementy w | grupa T | grupa H
| grupie bez nazwy | parent=P1 | !=P1 | parent=P1 | !=P1
---|-------------------|---------------------|-------------------------
P1 | D(P1),D(P2),D(P3) | U(T1),D(T5) | D(T4) | |N(A1),D(A7)

rozmyślam od dwóch dni, próbuję różnych funkcji typu rank(), magicznych
CONNECT_BY_PATH itp. ale nie daję rady.

czy ktoś mógłby mnie naprowadzić na rozwiązanie, albo podać jakiś
podobny przykład? zależy mi, aby zapytanie było możliwie wydajne. będę
wdzięczny za wszelkie sugestie.

pozdrawiam!
T-BAG





Thomas Olszewicki - 28-07-2007 00:01
=?iso-8859-2?q?Re:_zmia=BFd=BFony_przez_problem:_zapytanie_do _hierarchi?=
  On Jul 26, 3:50 pm, T-BAG <T-...@prisonbreak.invalid.com> wrote:
> witam!
>
> zmiażdżył mnie następujący problem. jest tablica zawierająca powiązane z
> sobą kolumny (elementy zamówienia). jej fragment wygląda tak:
>
> nbr child D/U parent grupa
> ---|------|-----|------|----
> 1 | P1 | D | |
> 2 | P2 | D | |
> 3 | P3 | D | |
> 4 | T1 | U | P1 | T
> 5 | T5 | D | P1 | T
> 6 | T4 | D | P3 | T
> 7 | A1 | N | P2 | H
> 8 | A7 | D | P3 | H
>
> na przykład, na pozycji 8 znajduje się element A7, który jest z grupy H,
> został dodany (D), a elementem nadrzędnym dla niego jest P3.
>
> przy wyborze elementu P1 chciałbym uzyskać poniższy wiersz:
>
> | elementy w | grupa T | grupa H
> | grupie bez nazwy | parent=P1 | !=P1 | parent=P1 | !=P1
> ---|-------------------|---------------------|-------------------------
> P1 | D(P1),D(P2),D(P3) | U(T1),D(T5) | D(T4) | |N(A1),D(A7)
>
> rozmyślam od dwóch dni, próbuję różnych funkcji typu rank(), magicznych
> CONNECT_BY_PATH itp. ale nie daję rady.
>
> czy ktoś mógłby mnie naprowadzić na rozwiązanie, albo podać jakiś
> podobny przykład? zależy mi, aby zapytanie było możliwie wydajne.będę
> wdzięczny za wszelkie sugestie.
>
> pozdrawiam!
> T-BAG

Nie bardzo rozumiem co Twoj wynik powinien robic.
Mozesz to opisac jakos inaczej, co chcesz osiagnac?
Na przyklad, nie widze powiazania miedzy P1 i A1,
a jednak w Twoim przykladzie A1 jest wymienione w tym samym row co P1?
Thomas




Maciej Iwanczewski - 28-07-2007 00:01

  T-BAG napisał(a):
> zmiażdżył mnie następujący problem. jest tablica zawierająca powiązane z
> sobą kolumny (elementy zamówienia). jej fragment wygląda tak:
>
> nbr child D/U parent grupa
> ---|------|-----|------|----
> 1 | P1 | D | |
> 2 | P2 | D | |
> 3 | P3 | D | |
> 4 | T1 | U | P1 | T
> 5 | T5 | D | P1 | T
> 6 | T4 | D | P3 | T
> 7 | A1 | N | P2 | H
> 8 | A7 | D | P3 | H
>
> na przykład, na pozycji 8 znajduje się element A7, który jest z grupy H,
> został dodany (D), a elementem nadrzędnym dla niego jest P3.
>
> przy wyborze elementu P1 chciałbym uzyskać poniższy wiersz:
>
> | elementy w | grupa T | grupa H
> | grupie bez nazwy | parent=P1 | !=P1 | parent=P1 | !=P1
> ---|-------------------|---------------------|-------------------------
> P1 | D(P1),D(P2),D(P3) | U(T1),D(T5) | D(T4) | |N(A1),D(A7)
>
> rozmyślam od dwóch dni, próbuję różnych funkcji typu rank(), magicznych
> CONNECT_BY_PATH itp. ale nie daję rady.
>
> czy ktoś mógłby mnie naprowadzić na rozwiązanie, albo podać jakiś
> podobny przykład? zależy mi, aby zapytanie było możliwie wydajne. będę
> wdzięczny za wszelkie sugestie.

co do wydajności to nie mam pojęcia, ale znalazłem cos takiego:
select rowtocol('select DU' || '||' || '''(''' || '||' || 'child' ||
'||' || ''')''' || ' from pe.test_parent where parent is null') as k1,
rowtocol('select DU' || '||' || '''(''' || '||' || 'child' || '||' ||
''')''' || ' from pe.test_parent where parent=''P1'' and grupa=''T''')
as k2,
rowtocol('select DU' || '||' || '''(''' || '||' || 'child' || '||' ||
''')''' || ' from pe.test_parent where parent!=''P1'' and grupa=''T''')
as k3,
rowtocol('select DU' || '||' || '''(''' || '||' || 'child' || '||' ||
''')''' || ' from pe.test_parent where parent=''P1'' and grupa=''H''')
as k4,
rowtocol('select DU' || '||' || '''(''' || '||' || 'child' || '||' ||
''')''' || ' from pe.test_parent where parent!=''P1'' and grupa=''H''')
as k5
from dual

gdzie rowtocol jest ze strony:
http://www.oracle.com/technology/ora...04/050304.html
CREATE OR REPLACE
FUNCTION rowtocol( p_slct IN VARCHAR2,
p_dlmtr IN VARCHAR2 DEFAULT ',' ) RETURN VARCHAR2
AUTHID CURRENT_USER AS
TYPE c_refcur IS REF CURSOR;
lc_str VARCHAR2(4000);
lc_colval VARCHAR2(4000);
c_dummy c_refcur;
l number;
BEGIN
OPEN c_dummy FOR p_slct;
LOOP
FETCH c_dummy INTO lc_colval;
EXIT WHEN c_dummy%NOTFOUND;
lc_str := lc_str || p_dlmtr || lc_colval;
END LOOP;
CLOSE c_dummy;
RETURN SUBSTR(lc_str,2);
EXCEPTION
WHEN OTHERS THEN
lc_str := SQLERRM;
IF c_dummy%ISOPEN THEN
CLOSE c_dummy;
END IF;
RETURN lc_str;
END;

U mnie działa :) Na oracle 10g Express

Pozdrawiam,
Maciek




T-BAG - 29-07-2007 00:00

  Thomas Olszewicki wrote:
> On Jul 26, 3:50 pm, T-BAG <T-...@prisonbreak.invalid.com> wrote:
>> witam!
>>
>> zmiażdżył mnie następujący problem. jest tablica zawierająca powiązane z
>> sobą kolumny (elementy zamówienia). jej fragment wygląda tak:
>>
>> nbr child D/U parent grupa
>> ---|------|-----|------|----
>> 1 | P1 | D | |
>> 2 | P2 | D | |
>> 3 | P3 | D | |
>> 4 | T1 | U | P1 | T
>> 5 | T5 | D | P1 | T
>> 6 | T4 | D | P3 | T
>> 7 | A1 | N | P2 | H
>> 8 | A7 | D | P3 | H
>>
>> na przykład, na pozycji 8 znajduje się element A7, który jest z grupy H,
>> został dodany (D), a elementem nadrzędnym dla niego jest P3.
>>
>> przy wyborze elementu P1 chciałbym uzyskać poniższy wiersz:
>>
>> | elementy w | grupa T | grupa H
>> | grupie bez nazwy | parent=P1 | !=P1 | parent=P1 | !=P1
>> ---|-------------------|---------------------|-------------------------
>> P1 | D(P1),D(P2),D(P3) | U(T1),D(T5) | D(T4) | |N(A1),D(A7)
>>
>> rozmyślam od dwóch dni, próbuję różnych funkcji typu rank(), magicznych
>> CONNECT_BY_PATH itp. ale nie daję rady.
>>
>> czy ktoś mógłby mnie naprowadzić na rozwiązanie, albo podać jakiś
>> podobny przykład? zależy mi, aby zapytanie było możliwie wydajne. będę
>> wdzięczny za wszelkie sugestie.
>>
>> pozdrawiam!
>> T-BAG
>
> Nie bardzo rozumiem co Twoj wynik powinien robic.
> Mozesz to opisac jakos inaczej, co chcesz osiagnac?
> Na przyklad, nie widze powiazania miedzy P1 i A1,
> a jednak w Twoim przykladzie A1 jest wymienione w tym samym row co P1?
> Thomas

Witam!

dokładnie tak: A1 nie ma powiązania z P1. hmm.. co by powiedzieć
więcej.. może wyobraź sobie, że w przytoczonym przykładzie wszystkie
wiersze w tabeli mają wspólny identyfikator ID. chciałbym uzyskać wynik,
w którym widziałbym wszystkie elementy dla tego ID, które są i nie są
powiązane z P1, i chciałbym to uzyskać w podziale na grupy do których te
elementy należą.

w powyższym przykładzie A1 pojawia się wśród elementów nie posiadających
związku parent-child z P1 (zastosowałem oznaczenie '!=P1' dla kolumn
spełniających ten warunek); z wyniku widać także, że A1 należy do grupy H.

zadałem to samo pytanie na grupie oracle. uzyskałem poniższą odpowiedź,
ale mam problemy z jej uruchomieniem:

http://groups.google.com/group/comp....68038003?fwc=1

może kogoś z Was zainspiruje i skłoni do podzielenia się własnymi
sugestiami lub przyczynkiem do rozwiązania.

pozdrawiam!
T-BAG





T-BAG - 29-07-2007 00:00

  Maciej Iwanczewski wrote:
> co do wydajności to nie mam pojęcia, ale znalazłem cos takiego:
> select rowtocol('select DU' || '||' || '''(''' || '||' || 'child' ||
> '||' || ''')''' || ' from pe.test_parent where parent is null') as k1,
> rowtocol('select DU' || '||' || '''(''' || '||' || 'child' || '||' ||
> ''')''' || ' from pe.test_parent where parent=''P1'' and grupa=''T''')
> as k2,
> rowtocol('select DU' || '||' || '''(''' || '||' || 'child' || '||' ||
> ''')''' || ' from pe.test_parent where parent!=''P1'' and grupa=''T''')
> as k3,
> rowtocol('select DU' || '||' || '''(''' || '||' || 'child' || '||' ||
> ''')''' || ' from pe.test_parent where parent=''P1'' and grupa=''H''')
> as k4,
> rowtocol('select DU' || '||' || '''(''' || '||' || 'child' || '||' ||
> ''')''' || ' from pe.test_parent where parent!=''P1'' and grupa=''H''')
> as k5
> from dual
>
> gdzie rowtocol jest ze strony:
> http://www.oracle.com/technology/ora...04/050304.html
> CREATE OR REPLACE
> FUNCTION rowtocol( p_slct IN VARCHAR2,
> p_dlmtr IN VARCHAR2 DEFAULT ',' ) RETURN VARCHAR2
> AUTHID CURRENT_USER AS
> TYPE c_refcur IS REF CURSOR;
> lc_str VARCHAR2(4000);
> lc_colval VARCHAR2(4000);
> c_dummy c_refcur;
> l number;
> BEGIN
> OPEN c_dummy FOR p_slct;
> LOOP
> FETCH c_dummy INTO lc_colval;
> EXIT WHEN c_dummy%NOTFOUND;
> lc_str := lc_str || p_dlmtr || lc_colval;
> END LOOP;
> CLOSE c_dummy;
> RETURN SUBSTR(lc_str,2);
> EXCEPTION
> WHEN OTHERS THEN
> lc_str := SQLERRM;
> IF c_dummy%ISOPEN THEN
> CLOSE c_dummy;
> END IF;
> RETURN lc_str;
> END;
>
>
> U mnie działa :) Na oracle 10g Express
>
> Pozdrawiam,
> Maciek

Dzięki za odpowiedź, sprawdzę niebawem jak to działa.

uff, chyba miesiąc zajmie mi zrozumienie tego.

pozdrawiam!
T-BAG




Maciej Iwanczewski - 29-07-2007 00:00

  T-BAG napisał(a):
> Maciej Iwanczewski wrote:
>> co do wydajności to nie mam pojęcia, ale znalazłem cos takiego:
>> select rowtocol('select DU' || '||' || '''(''' || '||' || 'child' ||
>> '||' || ''')''' || ' from pe.test_parent where parent is null') as k1,
>> [...]
>
> Dzięki za odpowiedź, sprawdzę niebawem jak to działa.
>
> uff, chyba miesiąc zajmie mi zrozumienie tego.

Jako pomoc w zrozumieniu :)

select ('select DU' || '||' || '''(''' || '||' || 'child' || '||' ||
''')''' || ' from pe.test_parent where parent is null') from dual

i tak dla każdego argumentu rowtocol :)

Pozdrawiam,
Maciek
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    Oracle 19g +Insert +Insert +Insert... MSSQL Express czy Oracle Express [Oracle, Toad] Zaladowanie obiektu w TOAD [Oracle][Reports30] 10G nie dziala razem z Reports3.0 [Oracle] catalog.sql i catproc.sql - bledy klient oracle (zmiana domyslna klienta oracla) [oracle] [xml] XML na bazie istniejacej struktury ? [Oracle] W jaki sposób skopiować całą zawartość schemy jednego użytkownika do nowo utworzonego użytkownika? mysql i mysql-front, problem String line; if (line=="cos"){...}....problem
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • fantazia.htw.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com