🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.delphi.bazy-danych
8 messages
8 total messages Started by Ciekawy Thu, 05 Jun 2014 12:53
Zapytania do typów obiektowych Oracla
#82177
Author: Ciekawy
Date: Thu, 05 Jun 2014 12:53
54 lines
2764 bytes
Witam

Mam taki obiekt z oracla

TYPE MDSYS.SDO_GEOMETRY           AS OBJECT (
            SDO_GTYPE       NUMBER,
            SDO_SRID        NUMBER,
            SDO_POINT       SDO_POINT_TYPE,
            SDO_ELEM_INFO   SDO_ELEM_INFO_ARRAY, //informacje o obiekcie 
graficznym
            SDO_ORDINATES   SDO_ORDINATE_ARRAY,//lista punktów

CREATE TYPE MDSYS.SDO_ELEM_INFO_ARRAY
AS VARRAY (1048576) OF NUMBER

CREATE TYPE MDSYS.SDO_ORDINATE_ARRAY
AS VARRAY (1048576) OF NUMBER

chciałbym pobrać dane z tabeli zawierającej te obiekty, ale ZEOS
nie wywala mi się przy zapytaniu, natomiast Unidac tworzy dla 
SDO_ORDINATE_Array tablicę pól od 0 do 99 dlaczego akurat taką??

zapytania to

Select (shape).SDO_GTYPE,   (shape).SDO_SRID  from BUDYNEK - jest ok 
zwraca mi typ i ZEOS i UNIDAC

Ale np
Select (shape).SDO_GTYPE, (shape).SDO_ORDINATES   from BUDYNEK

Zeos odmawia współpracy wogóle na zasadzie błędu ORA-22307
Attempt to perform an operation that is allowed only on a user-defined 
type, and the type is not a user-defined type.

Natomist UNIDac tworzy mi pola od [0..99] i tam wstawia współrzędne

obrazując to w gridzie
SDO_ORDINATES[0] , SDO_ORDINATES[1], SDO_ORDINATES[2] itd do 100
2547788.90	    25477845.90       2547788.90

Niespecjalnie wiem jak formułować zapytania i jakiego DAO użyć żeby to 
móc odczytać.
Szczerze to dostęp do danych w takim formacie rozwiązywał by mój problem
bo odpowiedzi na zapytania są bardzo szybkie i dostęp do danych również.
Tylko np nie wiem skąd wziąć długość np SDO_ORDINATE_ARRAY przecież może 
zawierać dwie współrzędne a może i 1000.

Pozdrawiam Ciekawy.



---
Ta wiadomość e-mail jest wolna od wirusów i złośliwego oprogramowania, ponieważ ochrona avast! Antivirus jest aktywna.
http://www.avast.com
Re: Zapytania do typów obiektowych Oracla
#82178
Author: J-23
Date: Thu, 05 Jun 2014 14:21
53 lines
2863 bytes
W dniu 05.06.2014 14:53, Ciekawy pisze:
> Witam
>
> Mam taki obiekt z oracla
>
> TYPE MDSYS.SDO_GEOMETRY           AS OBJECT (
>             SDO_GTYPE       NUMBER,
>             SDO_SRID        NUMBER,
>             SDO_POINT       SDO_POINT_TYPE,
>             SDO_ELEM_INFO   SDO_ELEM_INFO_ARRAY, //informacje o obiekcie
> graficznym
>             SDO_ORDINATES   SDO_ORDINATE_ARRAY,//lista punktów
>
> CREATE TYPE MDSYS.SDO_ELEM_INFO_ARRAY
> AS VARRAY (1048576) OF NUMBER
>
> CREATE TYPE MDSYS.SDO_ORDINATE_ARRAY
> AS VARRAY (1048576) OF NUMBER
>
> chciałbym pobrać dane z tabeli zawierającej te obiekty, ale ZEOS
> nie wywala mi się przy zapytaniu, natomiast Unidac tworzy dla
> SDO_ORDINATE_Array tablicę pól od 0 do 99 dlaczego akurat taką??
>
> zapytania to
>
> Select (shape).SDO_GTYPE,   (shape).SDO_SRID  from BUDYNEK - jest ok
> zwraca mi typ i ZEOS i UNIDAC
>
> Ale np
> Select (shape).SDO_GTYPE, (shape).SDO_ORDINATES   from BUDYNEK
>
> Zeos odmawia współpracy wogóle na zasadzie błędu ORA-22307
> Attempt to perform an operation that is allowed only on a user-defined
> type, and the type is not a user-defined type.
>
> Natomist UNIDac tworzy mi pola od [0..99] i tam wstawia współrzędne
>
> obrazując to w gridzie
> SDO_ORDINATES[0] , SDO_ORDINATES[1], SDO_ORDINATES[2] itd do 100
> 2547788.90        25477845.90       2547788.90
>
> Niespecjalnie wiem jak formułować zapytania i jakiego DAO użyć żeby to
> móc odczytać.
> Szczerze to dostęp do danych w takim formacie rozwiązywał by mój problem
> bo odpowiedzi na zapytania są bardzo szybkie i dostęp do danych również.
> Tylko np nie wiem skąd wziąć długość np SDO_ORDINATE_ARRAY przecież może
> zawierać dwie współrzędne a może i 1000.
>

Nie znam Oracle, ale zerknij tutaj może coś pomoże 
http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/collection_method.htm

PS. zlikwiduj stopkę AVAST
Re: Zapytania do typów obiektowych Oracla
#82179
Author: Ciekawy
Date: Thu, 05 Jun 2014 16:21
14 lines
1555 bytes
> Nie znam Oracle, ale zerknij tutaj może coś pomoże
> http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/collection_method.htm

ok, tylko niezbędne dla mnie funkcje dla typów obiektowych count itd. 
nie są dostępne, dla SQl tylko Pl/sql. A ja nie mogę na bazie danych na 
której jestem tylko gościem dodawać swoich procedur.


> PS. zlikwiduj stopkę AVAST
Przepraszam jak nie wiem co już mi ktoś zwracał na to uwagę, 
zlikwidowałem ale przyczepiło się jak g.

Pozdrawiam Ciekawy
Re: Zapytania do typów obiektowych Oracla
#82180
Author: Ciekawy
Date: Thu, 05 Jun 2014 20:30
6 lines
1376 bytes
  W zasadzie to jestem ciekawy jak firedak sobie radzi z obiektami 
oracle, bo w tej chwili to nie mam nawet jak przetestować (musiałbym 
sciagać delphi w trialu i instalować swoje komponenty i swój projekt do 
ściągniętegeo środowiska, znowu co najmniej dzień roboty)

Pozdrawiam Ciekawy
Re: Zapytania do typów obiektowych Oracla
#82182
Author: Ciekawy
Date: Fri, 06 Jun 2014 11:35
22 lines
1833 bytes
mój problem leży po stronie serwera i funkcji get_wkb.
Kiedy tworzę zmaterializowaną perspektywę na zasadzie
create materialized viev persp as
(select (shape).get_wkb() as geomekb, Id from budnki)

przy zapytaniu:

select geomwkb from persp

to nie ma problemu z odczytywaniem danych, czy to zeosem czy unidaciem
i pytam trwa to sek

Natomisat przy zapytaniu bezpośrednim
select (shape).get_wkb() as geomekb, Id from budnki

mam masakrę. Tworzenie zmaterializowanych widoków nie do końca 
rozwiązuje problem, bo raz że muszę ją zakładać na obcym serwerze a dwa, 
że coś nie mogę jej zmusić aby korzystała z indeksów z tabeli źródłowej.

Podpowie ktoś coś??

Pozdrawiam Ciekawy
Re: Zapytania do typów obiektowych Oracla
#82181
Author: Adam Siwoń
Date: Fri, 06 Jun 2014 12:21
27 lines
2259 bytes
W dniu 2014-06-06 13:35, Ciekawy pisze:
> mój problem leży po stronie serwera i funkcji get_wkb.
> Kiedy tworzę zmaterializowaną perspektywę na zasadzie
> create materialized viev persp as
> (select (shape).get_wkb() as geomekb, Id from budnki)
>
> przy zapytaniu:
>
> select geomwkb from persp
>
> to nie ma problemu z odczytywaniem danych, czy to zeosem czy unidaciem
> i pytam trwa to sek
>
> Natomisat przy zapytaniu bezpośrednim
> select (shape).get_wkb() as geomekb, Id from budnki
>
> mam masakrę. Tworzenie zmaterializowanych widoków nie do końca
> rozwiązuje problem, bo raz że muszę ją zakładać na obcym serwerze a dwa,
> że coś nie mogę jej zmusić aby korzystała z indeksów z tabeli źródłowej.

Z tego co mi wiadomo, to perspektywy zmaterializowane mają własne 
indeksy i nie korzystają z indeksów tabeli źródłowej. Więc jeśli 
tworzysz perspektywę, to utwórz indeksy dla niej.

-- 
z pozdrowieniami
Adam Siwoń
Re: Zapytania do typów obiektowych Oracla
#82183
Author: Adam Siwoń
Date: Fri, 06 Jun 2014 12:26
34 lines
2510 bytes
W dniu 2014-06-05 18:21, Ciekawy pisze:
>
>> Nie znam Oracle, ale zerknij tutaj może coś pomoże
>> http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/collection_method.htm
>>
>
> ok, tylko niezbędne dla mnie funkcje dla typów obiektowych count itd.
> nie są dostępne, dla SQl tylko Pl/sql. A ja nie mogę na bazie danych na
> której jestem tylko gościem dodawać swoich procedur.

Nie możesz dodawać procedur, ale możesz wykonywać bloki poleceń typu:

declare
   <definicje zmiennych>
begin
   kod PL/SQL
end;

do których możesz przekazywać parametry jak do zwykłych zapytań SQL. W 
sekcji deklaracji możesz definiować własne typy chyba nawet włącznie z 
tabelami. Nie dam natomiast głowy, że da się pisać do parametrów, bo 
nigdy tego nie używałem. Można to obsługiwać przez pisanie na OUTPUT, 
ale to jest raczej rozwiązanie typu: jak już absolutnie nie da się nic 
innego zrobić i nie spodziewałbym się po nim odpowiedniej wydajności.

Może dało by się dobrać do danych w tabeli w wierszu używając kursorów 
zagnieżdżonych? Tylko nie wiem, czy Zeos albo UniDAC to obsługuje. Na 
pewno obsługuje to FireDAC 
(http://docwiki.embarcadero.com/RADStudio/XE5/en/Using_Oracle_with_FireDAC) 
i komponenty przeznaczone dla Oracle - jak ODAC.

-- 
z pozdrowieniami
Adam Siwoń
Re: Zapytania do typów obiektowych Oracla
#82184
Author: Ciekawy
Date: Fri, 06 Jun 2014 12:52
38 lines
2796 bytes
W dniu 2014-06-06 14:26, Adam Siwoń pisze:
> W dniu 2014-06-05 18:21, Ciekawy pisze:
>>
>>> Nie znam Oracle, ale zerknij tutaj może coś pomoże
>>> http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/collection_method.htm
>>>
>>>
>>
>> ok, tylko niezbędne dla mnie funkcje dla typów obiektowych count itd.
>> nie są dostępne, dla SQl tylko Pl/sql. A ja nie mogę na bazie danych na
>> której jestem tylko gościem dodawać swoich procedur.
>
> Nie możesz dodawać procedur, ale możesz wykonywać bloki poleceń typu:
>
> declare
>    <definicje zmiennych>
> begin
> o których możesz przekazywać parametry jak do zwykłych zapytań SQL. W
>    kod PL/SQL
> end;
>
W dniu 2014-06-06 14:26, Adam Siwoń pisze:> W dniu 2014-06-05 18:21, 
Ciekawy pisze:

Ok, dzięki przepraszam że razy pytam o jedno a raz o drugie, bo próbuję 
raz tak, a  raz tak szczerze to widzę że chyba jednak najpraktyczniej 
jest mi założyć widok zmaterializowany, żeby serwer raz obiczył wrtości 
funkcji GET_WKB dla każdego rekordu i je przechowywał.
Co do indexów to też przecież nie problem mogę zadać zapytanie łączące i 
wykorzystać indexy z tabeli głównej. Najważniejsze byo to żeby nie 
liczyć za każdym razem GET_WKB.
Potem najwyżej na koniec pracy z mapą będę usuwał tą perspektywę.
No chyba że jest inna metoda żeby orcle przechowywał wyniki obliczenia 
tej funkcji. Bo cały problem był w tym że ona właśnie była "wąskim gardłem"
Pozdrawiam Ciekawy

PS.heh przy okazji miałem trochę "cisnienia", żeby zoptymalizować kod 
odpowiedzialny za rysowanie, tak że chyba na dobre mi wyszło.
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads