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
Author: Ciekawy
Date: Thu, 05 Jun 2014 12:53
Date: Thu, 05 Jun 2014 12:53
54 lines
2764 bytes
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
Author: J-23
Date: Thu, 05 Jun 2014 14:21
Date: Thu, 05 Jun 2014 14:21
53 lines
2863 bytes
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
Author: Ciekawy
Date: Thu, 05 Jun 2014 16:21
Date: Thu, 05 Jun 2014 16:21
14 lines
1555 bytes
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
Author: Ciekawy
Date: Thu, 05 Jun 2014 20:30
Date: Thu, 05 Jun 2014 20:30
6 lines
1376 bytes
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
Author: Ciekawy
Date: Fri, 06 Jun 2014 11:35
Date: Fri, 06 Jun 2014 11:35
22 lines
1833 bytes
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
Author: Adam Siwoń
Date: Fri, 06 Jun 2014 12:21
Date: Fri, 06 Jun 2014 12:21
27 lines
2259 bytes
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
Author: Adam Siwoń
Date: Fri, 06 Jun 2014 12:26
Date: Fri, 06 Jun 2014 12:26
34 lines
2510 bytes
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
Author: Ciekawy
Date: Fri, 06 Jun 2014 12:52
Date: Fri, 06 Jun 2014 12:52
38 lines
2796 bytes
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