Simple Spatial Query
Can anyone help me with just a real simple spatial query. All I want to do is identify which police district a parcel falls in. I have two shapefiles police and parcel and I know I should do an relate but I just can't figure out to get the answer back. Can anyone help me.
Matt
Here is an example to try...
select pd.district_name
from parcels p,
police_district pd
where p.apn = 'XXXXXXXX'
and mdsys.sdo_relate
(p.shape,pa.shape,'querytype=window mask=anyinteract') = 'TRUE';
Note that the table names have aliases (p and pd).
I am just learning Oracle Spatial too but this example should work.
Tom Elder
City of Phoenix
[email protected]
Similar Messages
-
Simple Spatial Query caused ORA-03113: end-of-file on communication channel
I try to run a simple spatial query to find the ID's which inside the specified circle
select n.ID,n.FEATURE_ID
from NC_MANGROVE n
where sdo_relate(n.shape,
mdsys.sdo_geometry(2003,null,null,
mdsys.sdo_elem_info_array(1,1003,4),
mdsys.sdo_ordinate_array(848948,834940,848908,834980,848908,834900)),
'mask=ANYINTERACT querytype=WINDOW')='TRUE';
but it end up of ORA-03113: end-of-file on communication channel
Then I try another query, which I think do the similar thing
select n.ID,n.FEATURE_ID
from NC_MANGROVE n
where sdo_within_distance(n.shape,
mdsys.sdo_geometry(2001,null,mdsys.sdo_point_type(848908,834900,null),null,null),
'distance=40')='TRUE';
but same error occurs.
Is it the SQL*net configure problem. I am using Oracle 8.1.7 for both client and server.
Please help
TommyDoes SDO_FILETER Queries work fine? If so there is already reported bug and patch for that on Metalink site. Get all the patches for 8.17 spatial and install those.
-
Simple spatial query with different SRID
Can anyone help me with just a real simple spatial query with different SRID.
Here is the error i get when i perform the query:
AND SDO_RELATE(A.geometrie_point, B.GEOMETRIE_POLYGONE, 'mask=anyinteract querytype=WINDOW') = 'TRUE'
ERROR at line 4:
ORA-00604: error occurred at recursive SQL level 1
ORA-13207: incorrect use of the [IN COMPATIBLE BOUNDS in SDO_RELATE] operator
ORA-06512: at "MDSYS.SDO_INDEX_METHOD", line 84
ORA-06512: at line 4Hi,
I am using 8.1.7.2 and i have the lattest spatial patch.
From the start i had different SRID. The only thing i changed was the bounds of the coordinate system.
I reset my bounds of the coordinate system with SRID 8307 to -180,
180 in X (longitude), and -90,90 in Y (latitude) to see if the query window geometry
(geom2) will be transformed to the coordinate system of the layer geometries (geom1)
Her is the content of the user_sdo_geom_metadata :
GIS_PCP GEOMETRIE_POINT
SDO_DIM_ARRAY(SDO_DIM_ELEMENT('X', -5800000, 3600000, .00000005), SDO_DIM_ELEMENT('Y', 3516000, 6000000, .00000005))
82227
GIS_TEST GEOMETRIE_POLYGONE
SDO_DIM_ARRAY(SDO_DIM_ELEMENT('X', -180, 180, .00000005), SDO_DIM_ELEMENT('Y', -90, 90, .00000005))
8307
Here is my query :
select /*+ ordered */ A.no_point
from gis_pcp A, gis_test B
WHERE SDO_RELATE(A.geometrie_POINT, B.GEOMETRIE_POLYGONE, 'mask=anyinteract querytype=WINDOW') = 'TRUE';
Here is my result :
WHERE SDO_RELATE(A.geometrie_POINT, B.GEOMETRIE_POLYGONE, 'mask=anyinteract querytype=WINDOW') = 'TRUE'
ERROR at line 3:
ORA-00604: error occurred at recursive SQL level 1
ORA-13207: incorrect use of the [IN COMPATIBLE BOUNDS in SDO_RELATE] operator
ORA-06512: at "MDSYS.SDO_INDEX_METHOD", line 84
ORA-06512: at line 4
If i change the bounds of GIS_TEST to the exact bouns of GIS_PCP then i dont have the error message above and i have correct results. Do i have the adjust the bounds of every layer to fit the biggest bound? -
Very slow simple spatial query on 11g
I've created two spatial tables as following:
CREATE TABLE usregions
region_code NUMBER(1,0) NOT NULL,
shape ST_GEOMETRY,
CONSTRAINT usregions_pk PRIMARY KEY usregions(region_code)
INSERT INTO MDSYS.user_sdo_geom_metadata
(table_name, column_name, diminfo, srid)
VALUES ('USREGIONS', 'SHAPE',
sdo_dim_array (sdo_dim_element ('X', -180, 180, 0.5),
sdo_dim_element ('Y', -90, 90, 0.5)),
4269);
CREATE INDEX usregions_dx ON usregions (shape)
INDEXTYPE IS MDSYS.spatial_index;
CREATE TABLE usstates
state_code NUMBER(1,0) NOT NULL,
state_name VARCHAR2(30),
shape ST_GEOMETRY,
CONSTRAINT usstates_pk PRIMARY KEY usstates(state_code)
INSERT INTO MDSYS.user_sdo_geom_metadata
(table_name, column_name, diminfo, srid)
VALUES ('USSTATES', 'SHAPE',
sdo_dim_array (sdo_dim_element ('X', -180, 180, 0.5),
sdo_dim_element ('Y', -90, 90, 0.5)),
4269);
CREATE INDEX usstates_dx ON usstates (shape)
INDEXTYPE IS MDSYS.spatial_index;
I then loaded both tables with data from a shapefile.
The state shapefile is just the US map with all the states.
The region shapefile is the same US map with only 5 regions (Northeast, mid atlantic, mid west, south, and west).
I created the region shapefile from the state shapefile using ESRI ArcMap to dissolve the States border. So Pennsylvania, Virginia, Maryland, and DC is one polygon; New York and up is another polygon, etc.
I also created the same two tables, with the same data in SQL Server 2008 (KatMai), as well as in PostGRE 8.3.
Then I ran the following query:
SELECT s.state_name
FROM usstates s
WHERE s.shape.ST_Within((SELECT shape
FROM usregions
WHERE region_code=2))=1;
Region 2 is Mid Atlantic and I was expecting to see:
STATE_NAME
District of Columbia
Maryland
Pennsylvania
Virgina
Instead, Oracle 11g only returned "District of Columbia"
The query took 6.4 seconds to run.
On SQL Server 2008, I got the expected result and it took 0.4 seconds to execute.
On PostGRE 8.3, I also got the expected result and it took 0.5 seconds to execute.
Why is Oracle not returning all the States? Is this a bug?
Am I doing something wrong???
Thanks.save data into internal backup format ???backup format doesn't matter, program is just reading rows from backup file and inserting them into database - so is generating SQL insert commands
>
and then it will restore it back to database. It isdone by inserts, each 500 row commit
I can't follow your post, but...yuck.program is just inserting records into T2 table, but on T2 table is trigger and inside trigger is SQL command "UPDATE TABLE T3 ..... where ......". In this time is T3 already filled with 60569 records.
And inserting going slower and slower. Without trigger is speed ok. But on oracle 10g speed is ok with this trigger. So I am concern about what could changed in oracle 11g and cause such behavior.
I will try produce some simple test example -
Spatial query w/ logical operators in a subquery on Linux using Oracle 1
Hello...
I'm being given XML that I need to parse and create SQL from it. Below my signature is the SQL that I generate (its a simple example) and can be more elaborate due to the logical operators (AND and OR) given in the XML.
The problem that we're seeing is performance-based: when one of the logical operator queries is Spatial-based, like below. Running it in JDBC, the query never returns.
The spatial query just by itself returns ~300 rows (takes approximately 0.2 seconds). The "PERCENTAGE" query by itself returns about ~40000 rows (takes approximately ~.8 seconds).
If we run the query below with 2 non-spatial subqueries, the result returns and performance is very acceptable (~ 0.9 seconds)-- the result set is about 80000 rows.
Thanks,
Jim
=========================
SELECT
COLUMN_WE_WANT , RESULTS
FROM
TABLE_A
WHERE
COLUMN_WE_WANT IN
SELECT
COLUMN_WE_WANT
FROM
TABLE_A
WHERE
SDO_OVERLAPBDYINTERSECT(TABLE_A.MY_SPATIAL_COLUMN,
SDO_GEOMETRY(2003,
4326,
null,
SDO_elem_info_array( 1 , 3 , 1 ),
SDO_ORDINATE_ARRAY( lng_1,lat_1 , lng_2,lat_2 , lng_3,lat_3 , lng_4,lat_4 , lng_1,lat_1 )
) = 'TRUE'
OR
COLUMN_WE_WANT IN
SELECT
COLUMN_WE_WANT
FROM
TABLE_B
WHERE
SOME_PERCENTAGE_RATE_COLUMN < 90
)Its difficult to comment without seeing the execution plan. You should trace this query to get a better idea of exactly what's happening.
Depending on the complexity of the logical operators, I would look at doing this using set operations. So for an OR you might have...
SELECT COLUMN_WE_WANT, RESULTS
FROM TABLE_A
WHERE COLUMN_WE_WANT IN (
SELECT COLUMN_WE_WANT
FROM TABLE_A
WHERE SDO_OVERLAPBDYINTERSECT(TABLE_A.MY_SPATIAL_COLUMN,SDO_GEOMETRY(2003,4326,
NULL, SDO_elem_info_array( 1 , 3 , 1 ),
SDO_ORDINATE_ARRAY( lng_1,lat_1 , lng_2,lat_2 , lng_3,lat_3 , lng_4,lat_4 , lng_1,lat_1 ) )) = 'TRUE'
UNION
SELECT COLUMN_WE_WANT
FROM TABLE_B
WHERE SOME_PERCENTAGE_RATE_COLUMN < 90)For an AND, you would use INTERSECT.
Edited by: Reggie to remove the extra INTERSECT -
Spatial query w/ logical operators in a subquery on Linux using Oracle 10g
Hello...
I'm being given XML that I need to parse and create SQL from it. Below my signature is the SQL that I generate (its a simple example) and can be more elaborate due to the logical operators (AND and OR) given in the XML.
The problem that we're seeing is performance-based: when one of the logical operator queries is Spatial-based, like below. Running it in JDBC, the query never returns.
The spatial query just by itself returns ~300 rows (takes approximately 0.2 seconds). The "PERCENTAGE" query by itself returns about ~40000 rows (takes approximately ~.8 seconds).
If we run the query below with 2 non-spatial subqueries, the result returns and performance is very acceptable (~ 0.9 seconds)-- the result set is about 80000 rows.
Thanks,
Jim
=========================
SELECT
COLUMN_WE_WANT , RESULTS
FROM
TABLE_A
WHERE
COLUMN_WE_WANT IN
SELECT
COLUMN_WE_WANT
FROM
TABLE_A
WHERE
SDO_OVERLAPBDYINTERSECT(TABLE_A.MY_SPATIAL_COLUMN,
SDO_GEOMETRY(2003,
4326,
null,
SDO_elem_info_array( 1 , 3 , 1 ),
SDO_ORDINATE_ARRAY( lng_1,lat_1 , lng_2,lat_2 , lng_3,lat_3 , lng_4,lat_4 , lng_1,lat_1 ) )
) = 'TRUE'
OR
COLUMN_WE_WANT IN
SELECT
COLUMN_WE_WANT
FROM
TABLE_B
WHERE
SOME_PERCENTAGE_RATE_COLUMN < 90
)There is a spatial forum. You will likely have a far better experience there.
-
Spatial query performance problems
In preparation for making using of spatial data in our oracle database, I wanted to create a view (materialised) that brings together data from a few different tables into one place ready for publishing as a WMS layer.
I'm being stumped at first base by crippling performance of Oracle spatial function. Later joins of ordinary fields are ok, but the spatial joining of two tables using the following sql runs for an absurd length of time (i've given up - I don't know how long it actually takes only that it takes far too long)
SELECT /*+ ordered */
lg.GRIDREF, lg.SYSTEM, lg.PARENT, lg.TYPE,
lrd.REGION_CODE
FROM TABLE (SDO_JOIN('L_GRIDS','BOUNDARY','L_REGION_DEFINITION','BOUNDARY','mask=COVERS')) c,
L_GRIDS lg, L_REGION_DEFINITION lrd
WHERE c.rowid1 = lg.rowid AND c.rowid2 = lrd.rowid
ORDER BY lrd.REGION_CODE
Both tables have spatial indexs. L_REGION_DEFINITION contains 200 rows with complex boundaries stored as spatial objects. L_GRIDS contains 475,000 rows, each with a trivially simple spatial object consisting of a square polygon of 4 points.
The database is 10g patched to latest. The server is dual quad Xeon processors with 16gb of ram. I didn't expect it to be a lightning query, but surely it should be usable?
Any ideas?Try to upgrade to at least 11.2.0.2 and use the following query
SELECT /*+ leading(lrd lg) */
lg.GRIDREF, lg.SYSTEM, lg.PARENT, lg.TYPE,
lrd.REGION_CODE
FROM L_GRIDS lg, L_REGION_DEFINITION lrd
WHERE sdo_relate(lg.boundary, lrd.boundary, 'mask=COVEREDBY') = 'TRUE'
ORDER BY lrd.REGION_CODE;
And since not sure about your query's intention, maybe it is "mask=INSIDE+COVEREDBY",
please check out oracle spatial developer guide for details about different masks. -
Ora-13226 when performing spatial query on view
Hi,
in my database I have a view with spatial column. The view is based on UNION ALL select. When I try to run spatial query on the view, the database returns ora-13226 error. When I recreate the view to consist only one select (without UNION ALL) the spatial query return correct result. Could you pls help me how to do a spatial query on spatial view whose definition contains UNION ALL select?
Thanks
AndrewHi,
it's quite simple:
create view test_view as
select id, geometry from table_a
union all
select id, geometry from table_b;
When I try for example:
select *
from test_view
where sdo_relate(geometry, (select geometry from table_c where id=1316),'mask=anyinteract') = 'TRUE';
it throws ora-13226 error.
Interesting is that following query where the geometry is directly included runs well:
select *
from test_view
where sdo_relate(geometry, MDSYS.SDO_GEOMETRY (....),'mask=anyinteract') = 'TRUE';
also when I recreate the test_view as
create view test_view as
select id, geometry from table_a;
then also the first query (with inner select) returns no error.
It's a little bit strange isn't it?
Andrew -
Hi guys,
I am currently developing a java applet to display telecommunication sites taken from an Oracle 8.1.6 DB. The company I work for also happens to have the spatial cartridge which I intend to use to overlay a country map over my plottings. I have imported the map data into a table, and I can view the GEOLOC information as a huge stream of longs and lats via a simple SELECT query in SQLPLUS - so the data has been imported correctly.
I have tried to digest huge articles on querying spatial information - however, unfortunately being an Oracle novice, it has left me quite dazzled.
Basically all I want to do is take from my spatial table a list of long and lat coordinates (in double format) in a specific physical area, so that I can display them from there.
I'd appreciate any help that anyone could give.
nullHi David,
There are a few things you will have to do in order to get this to work quickly.
1) You will have to insert data into the user_sdo_geom_metadata field so Oracle Spatial can know some information about the data you've created (table name, spatial column name, information about upper and lower bounds as well as tolerance for each dimension.
2) You'll need to create a spatial index on the data.
3) You'll need to analyze the spatial index table.
4) Then you can query the data. You'll have to decide whether you need exact answers (using the sdo_relate operator) or approximate answers based only on the index (sdo_filter operator).
There is too much information required to put it all here, but I'll include a few samples.
to insert data into user_sdo_geom_metadata:
insert into user_sdo_geom_metadata values ('TABLE_NAME','GEOMETRY_COLUMN_NAME',
mdsys.sdo_dim_array(mdsys.sdo_dim_element('X',-180.0,180,0.00000005),
mdsys.sdo_dim_element('Y',-90,90,0.00000005)),NULL);
commit;
In the above example, TABLE_NAME is the name of the table with your geometry column, then the geometry column name, then the dimarray has attributes in it associated with each of two dimensions (two dimensional data is stored here), the first dimension has a lower bound of -180, and upper bound of 180, and a tolerance or 0.00000005 (the decimal precision of your data, with a 5 appended), the second dimension has the info supplied, and the last null means there is no coordinate system stored with the data. I'd suggest if you are a newbie to leave it as NULL, then ease into coordinate systems once you get more experience.
2) create the index
create index table_name_sidx
on table_name(geometry_column_name)
indextype is mdsys.spatial_index
parameters('sdo_level=x');
where x is usually a number between 6 and 14 based on the type of data you have. There is a lot to say about this, but I can't say it here.
3) analyze the spatial index table:
from sql*plus, run the following statements:
set head off
spool analyze_it.sql
select ' analyze table ' | | sdo_index_table | | ' estimate statistics sample 32 percent;'
from user_sdo_index_metadata order by sdo_index_table;
spool off;
@analyze_it.sql
4) execute a query based on an area of interest:
this statement will return all geometries that have any interaction with a query window specified by a rectangle with bounds
2,2, 10,2, 10,10, 2,10, 2,2
SELECT geometry_column_name
FROM table_name
where sdo_relate (geometry_column_name,
mdsys.sdo_geometry(2003,NULL, NULL
mdsys.sdo_elem_info_array(1,1003,1),
mdsys.sdo_ordinate_array (2,2, 10,2, 10,10, 2,10, 2,2)),
'mask=anyinteract querytype=window'
= 'TRUE';
You will have to dig more into each of these subject to understand them.
Hope this helps,
dan
null -
Memory Leak During Spatial Query
Platform:
Oracle 8.1.7 EE with Spatial
Windows NT 4.0
I'm seeing a memory leak that I have determined has something to do with spatial. Here is the PL/SQL code that generates the leak:
DECLARE
v_id NUMBER(16);
v_longitude NUMBER(15,10);
v_latitude NUMBER(15,10);
v_wirecenter_name VARCHAR2(11);
CURSOR c_Source IS
SELECT id, longitude, latitude
FROM prospects_geocode_info;
CURSOR c_WC IS
SELECT wc.wirecenter_name
FROM ion_info.ion_wirecenters wc
WHERE mdsys.sdo_relate(wc.geoloc,
mdsys.sdo_geometry(2001,
8265,
mdsys.sdo_point_type(v_longitude,
v_latitude,
NULL),
NULL,
NULL),
'mask=contains querytype=window') = 'TRUE';
BEGIN
open c_Source;
loop
fetch c_Source into v_id, v_longitude, v_latitude;
exit when c_Source%NOTFOUND;
if v_longitude is not NULL and v_latitude is not NULL THEN
open c_WC;
loop
fetch c_WC into v_wirecenter_name;
exit when c_WC%NOTFOUND;
end loop;
close c_WC;
end if;
end loop;
close c_Source;
END;
I'm attributing the link to spatial because if I change the c_WC cursor's SELECT statement to not use a spatial query, I get no leak. As near as I can tell I'm leaking a little bit of memory with each spatial query. I can watch the consumed memory jump in 64K blocks about every second or two on the machine I am running on.
I have tried pinning the code in memory, as well as pinning the spatial index and it's table in memory. None of this helps. I am continuing to experiment with this, but wanted to see if anyone had any ideas.
Thanks.
Matt.I have been able to reproduce the memory leak now using a very simple anonymous PL/SQL block. All it is doing is looping through a range of lon/lat and issuing a given spatial query. Here it is:
DECLARE
v_longitude NUMBER(15,10) := 0;
v_latitude NUMBER(15,10) := 0;
v_miprinx NUMBER;
v_lon_start NUMBER(15,10) := -150.0000000000;
v_lon_end NUMBER(15,10) := -30.0000000000;
v_lat_start NUMBER(15,10) := 20.0000000000;
v_lat_end NUMBER(15,10) := 70.0000000000;
CURSOR c_test IS
SELECT mi_prinx
FROM ion_info.ion_markets
WHERE mdsys.sdo_relate(geoloc,
mdsys.sdo_geometry(2001,
8265,
mdsys.sdo_point_type(v_longitude,
v_latitude,
NULL),
NULL,
NULL),
'mask=contains querytype=window') = 'TRUE';
BEGIN
FOR v_longitude IN v_lon_start..v_lon_end LOOP
FOR v_latitude IN v_lat_start .. v_lat_end LOOP
OPEN c_test;
LOOP
FETCH c_test
INTO v_miprinx;
EXIT WHEN c_test%NOTFOUND;
END LOOP;
CLOSE c_test;
END LOOP;
END LOOP;
END;
On my 8.1.7 database on NT 4.0 I get the same results on all three tables that have spatial indexes. I tried this on a different spatial table on 8.1.6 on NT 4.0 and saw no memory leak. It doesn't matter whether I execute the script using sqlplus or sqlplusw.
Matt. -
SSRS - SQL Server Spatial Query
Hi, I was hoping someone could help me.
I'm creating an SSRS report with Map and importing points via SQL Server Spatial query. I have a db table with 8,000 points bu the import only ever brings in the first 2,000 queried (no matter what the filter is). Is there a limitation in SSRS that can be
changed via a configuration setting?
Many thanks in advance for any help on this,
Steve.Really appreciate you coming back so quick Olaf.
No its a straightforward query (select AccountNum, Name, Address, Longitude, Lattitude, UrbanArea, County, MI_STYLE, MI_PRINX, SP_GEOMETRY from <table>)
Just to give the whole picture. I had 8,000 points in MapInfo version 10. I imported them to SQL Server 2012 via MapInfo Easy Loader.
The SQL Server spatial points import to SSRS and the Bing overlay map works great (so they import to correct space) but its only a subset of the points that import. I can pick any subset using the WHERE clause but I cannot get all 8,000 points.
I was hoping there was a configuration setting somewhere in SSRS that was causing the problem. -
Spatial query in a distributed environment
We want to compare two spatial tables.
We have (at present identical) tables on two computers GEOSRV0 and NB25.
On both we have Oracle 10.1.0.2. GEOSRV0 has the WINDOWS 2000 operating system installed, on NB25 there is WINDOWS XP Professional.
The table is EZG:
GEOMETRY MDSYS.SDO_GEOMETRY
GEOMETRY_SK VARCHAR2(15)
EZG_NR NOT NULL NUMBER
FLAECHE FLOAT(126)
The primary key is EZG_NR.
There is a private database link for the user WLKREP on NB25 to user WLKREP on GEOSRV0.
The USER_SDO_GEOM_METADATA are the same on both machines (same SRID, same DIMINFO).
The following query â we check, if for each record on NB25 is a record on GEOSRV0 - works normally:
SQL> select ezg_nr from
2 ezg a where not exists
3 (select 1 from wlkrep.ezg@wlk where ezg_nr=a.ezg_nr);
no rows selected
This is correct.
We can read the geometry on the remote database:
SQL> select * from wlkrep.ezg@wlk where rownum=1;
GEOMETRY(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
GEOMETRY_SK EZG_NR FLAECHE
SDO_GEOMETRY(3003, 1040001, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(182285.489, 405672.889, 0, 182248.701, 405644.889, 0, 182241.984, 405639.771, 0, 182171.753, 405538.805, 0, 182130.953, 405498.016, 0, 181971.1, 405274.91
6, 0, 182223.796, 405176.609, 0, 182292.701, 405204.37, 0, 182439.028, 405451.66
, 0, 182573.506, 405628.153, 0, 182643.64, 405726.59, 0, 182718.945, 405764.608,
0, 182780.371, 405805.57, 0, 182862.191, 405843.931, 0, 182966.69, 405933.13, 0
, 183131.065, 406064.852, 0, 183205.098, 406160.637, 0, 183231.535, 406220.959,
0, 183266.473, 406265.415, 0, 183308.669, 406303.524, 0, 183295.305, 406364.696,
0, 183204.283, 406331.35, 0, 183161.835, 406299.691, 0, 183134.554, 406243.403,
GEOMETRY(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
GEOMETRY_SK EZG_NR FLAECHE
0, 183080.454, 406171.548, 0, 183027.376, 406123.698, 0, 182914.558, 406039.291
, 0, 182770.335, 405973.138, 0, 182593.691, 405886.413, 0, 182443.506, 405795.85
2, 0, 182343.293, 405713.991, 0, 182285.489, 405672.889, 0))
13 304906.065
Now we want to compare the geometry and get
SQL> select a.ezg_nr from
2 wlkrep.ezg@wlk b, ezg a where a.ezg_nr=b.ezg_nr and
3 sdo_equal(a.geometry,b.geometry) != 'TRUE';
select a.ezg_nr from
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Only comparing two elements gives the same result
SQL> select a.ezg_nr from
2 wlkrep.ezg@wlk b, ezg a where a.ezg_nr=640 and
3 b.ezg_nr = 640 and
4 sdo_equal(a.geometry,b.geometry) = 'TRUE';
select a.ezg_nr from
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Even if we query a non existing element
select count(*) from ezg where ezg_nr=99999;
COUNT(*)
0
SQL> select a.ezg_nr from
2 wlkrep.ezg@wlk b, ezg a where a.ezg_nr=99999 and
3 b.ezg_nr = 99999 and
4 sdo_equal(a.geometry,b.geometry) = 'TRUE';
select a.ezg_nr from
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Is this a bug or is a distributed spatial query not supported?
The following statement works:
SQL> select a.ezg_nr from
2 wlkrep.ezg@wlk a where not exists
3 (select 1 from ezg b where
4 b.ezg_nr=a.ezg_nr and
5 sdo_equal(b.geometry,a.geometry)='TRUE');
no rows selected
Regards
KarlActually, I have filed a TAR to Oracle on this. I also spoke to Steve Muench about it at OracleWorld, briefly. As of today, I'm trying to add to DataScroller.java to make it implement java.io.Serializable (with no luck...maybe someone can comment on what I'm doing wrong).
Here's what I have done so far.
Changed DataScroller.java (located in bc4jhtmlsrc.zip) to the following:
public class DataScroller implements java.io.Serializable
I added the following members per the docs on java.io.Serializable
private void writeObject(java.io.ObjectOutputStream out)
throws IOException
// really don't need to save state. Next call will recompute what's necessary
private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException
// really don't need to load state. Next call will recompute what's necessary
I then used jar xvf to "unjar" datatags.jar, replaced DataScroller.class with my version and used
jar cv0Mf datatags.jar META-INF/* oracle/*
to recreate the datatags.jar. My file is not 100% the exact same as their file, but it looks to be right to me. I ended up doing it this way because the oracle\ord\* classes are not in the bc4jhtmlsrc.zip, only in the jar file and felt this was the "safest" way to include the correct contents of the file.
HOWEVER -- I'm sorry to say that I've then tried to run my app and get the same issue.
Thanks,
Jeff -
Spatial Query with multiple geometries from 2 tables
Hi,
I'm using Oracle 8.1.7. I am trying to do a spatial query on two tables with multiple geometries. There are two spatial tables. One made up of points and one made up of polygons. There are 829551 rows in the table of points and 1817795 rows in the table with polygons...
I want to find all polygons where one of this points is within it...
This query is pretty intensive querying two large spatial tables against each other and so I need to find the most efficient way of running this query. I've been running variations of my query for the last two week and every time it's bombed out with various errors after 12-24 hrs processing like out of memory, out of tablespace, out of processing, invalid index etc etc etc. I need to get this query run asap... Any tips would be gratefully appreciated..
For the session running the query I've allocated 16M sort area with
ALTER SESSION SET SORT_AREA_SIZE=16777216;
Below is the query I'm running... How can I improve this please? BTW PARCEL_OVERLAPS contains the points and TP$_PARCEL_AREAS the polygons.
SELECT lu.LNU_PARCEL_ID
FROM
seventy.PARCEL_OVERLAPS po,
imap_topol.TP$_PARCEL_AREAS pa,
TP$_PARCEL_CENTROID_AREA pca,
TDCR_LAND_UNIT lu
WHERE
SDO_FILTER(po.geometry, pa.area,
'querytype=WINDOW') = TRUE and
sdo_within_distance(po.geometry,pa.area,'distance=0')='TRUE' and
pa.delete_date is null and
Lu.LNU_LAND_UNIT_UNIQUE_NUM = pca.CENTROID_ID and
pa.AREA_ID = pca.AREA_ID and
pca.DELETE_DATE IS NULL and
pa.DELETE_DATE IS NULL;Albert,
Thanks for your reply and the tips you've given. The tp$_parcel_areas table will always be bigger so I've changed the order to sdo_within_distance(pa.area,po.geometry,'distance=0')='TRUE'. The requested counts for those queries are
12:26:29 [email protected]:SQL> select count(*)
13:46:22 2 from seventy.PARCEL_OVERLAPS;
COUNT(*)
612
13:48:12 [email protected]:SQL> select count(*)
13:48:17 2 from imap_topol.TP$_PARCEL_AREAS pa,
13:48:21 3 TP$_PARCEL_CENTROID_AREA pca
13:48:21 4 where pca.DELETE_DATE IS NULL
13:48:21 5 and pa.DELETE_DATE IS NULL
13:48:21 6 and pa.AREA_ID = pca.AREA_ID;
COUNT(*)
1310665
There was no reason for both filter and within_distance. I did try use the anyinteract but for some reason that does not return the desired results(I've added one id row as a test to make sure it returns desired results). Plus Oracle have recomended using the within distance for better performance..
so the explan plan for
14:38:37 [email protected]:SQL> EXPLAIN PLAN FOR
14:38:50 2 SELECT lu.LNU_PARCEL_ID
14:38:50 3 FROM
14:38:50 4 seventy.PARCEL_OVERLAPS po,
14:38:50 5 imap_topol.TP$_PARCEL_AREAS pa,
14:38:50 6 TP$_PARCEL_CENTROID_AREA pca,
14:38:50 7 TDCR_LAND_UNIT lu
14:38:50 8 WHERE
14:38:50 9 sdo_within_distance(pa.area,po.geometry,'distance=0')='TRUE' and
14:38:50 10 pa.delete_date is null and
14:38:50 11 Lu.LNU_LAND_UNIT_UNIQUE_NUM = pca.CENTROID_ID and
14:38:50 12 pa.AREA_ID = pca.AREA_ID and
14:38:50 13 pca.DELETE_DATE IS NULL and
14:38:50 14 pa.DELETE_DATE IS NULL;
is
Plan Table
| Operation | Name | Rows | Bytes| Cost | Pstart| Pstop |
| SELECT STATEMENT | | 4G|32920G| 547M| | |
| NESTED LOOPS | | 4G|32920G| 547M| | |
| MERGE JOIN | | 547M| 2029G| 230124 | | |
| SORT JOIN | | 1M| 36M| 85014 | | |
| MERGE JOIN | | 1M| 36M| 50019 | | |
| SORT JOIN | | 1M| 17M| 21650 | | |
| TABLE ACCESS FULL |TP$_PARCE | 1M| 17M| 485 | | |
| SORT JOIN | | 1M| 22M| 28369 | | |
| TABLE ACCESS FULL |TDCR_LAND | 1M| 22M| 2127 | | |
| SORT JOIN | | 42K| 160M| 145111 | | |
| TABLE ACCESS FULL |TP$_PARCE | 42K| 160M| 12697 | | |
| TABLE ACCESS FULL |PARCEL_OV | 817 | 3M| 1 | | |
14:43:14 [email protected]:SQL> explain plan for
14:43:23 2 SELECT pa.AREA_ID
14:43:23 3 FROM seventy.PARCEL_OVERLAPS po,
14:43:23 4 imap_topol.TP$_PARCEL_AREAS pa
14:43:23 5 WHERE SDO_RELATE(po.geometry, pa.area,'mask=ANTINTERACT querytype=WINDOW') = 'TRUE'
14:43:23 6 and pa.DELETE_DATE IS NULL;
Plan Table
| Operation | Name | Rows | Bytes| Cost | Pstart| Pstop |
| SELECT STATEMENT | | 6M| 50G| 10M| | |
| NESTED LOOPS | | 6M| 50G| 10M| | |
| TABLE ACCESS FULL |PARCEL_OV | 817 | 3M| 1 | | |
| TABLE ACCESS FULL |TP$_PARCE | 850K| 3G| 12697 | | |
14:45:03 [email protected]:SQL> explain plan for
14:45:04 2 SELECT pa.AREA_ID
14:45:05 3 FROM seventy.PARCEL_OVERLAPS po,
14:45:05 4 imap_topol.TP$_PARCEL_AREAS pa
14:45:05 5 WHERE SDO_RELATE(pa.area, po.geometry,'mask=ANTINTERACT querytype=WINDOW') = 'TRUE'
14:45:05 6 and pa.DELETE_DATE IS NULL;
Plan Table
| Operation | Name | Rows | Bytes| Cost | Pstart| Pstop |
| SELECT STATEMENT | | 6M| 50G| 863554 | | |
| NESTED LOOPS | | 6M| 50G| 863554 | | |
| TABLE ACCESS FULL |TP$_PARCE | 850K| 3G| 12697 | | |
| TABLE ACCESS FULL |PARCEL_OV | 817 | 3M| 1 | | |
-------------------------------------------------------------------------------- -
Export with embedded spatial query
I am trying to use the exp utility to export spatial data. I am using the "query" parameter to specify a spatial query based on another spatial layer.
I have two layers. Admin1 has lots of administrative boundaries. PE has three polygons in it over different sections of my data set. I want to get the data extracted from admin1 that exists in these areas to an export file(along with all the triggers and other related database objects). I was hoping this approach would work
I am getting errors saying that the identifier is too long.
Here is the par file:
file=1.exp
log=1.log
tables=(admin1, pe)
query="""WHERE mdsys.SDO_RELATE(GEOM1,pe.GEOM, 'MASK=INSIDE QUERYTYPE=WINDOW')='TRUE' OR SDO_RELATE(GEOM2,pe.GEOM, 'MASK=INSIDE QUERYTYPE=WINDOW')='TRUE'"""
I get:
Export: Release 10.2.0.1.0 - Production on Wed May 10 11:56:14 2006
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Produc
tion
With the Partitioning, OLAP and Data Mining options
Export done in WE8MSWIN1252 character set and AL16UTF16 NCHAR character set
About to export specified tables via Conventional Path ...
. . exporting table ADMIN1
EXP-00056: ORACLE error 972 encountered
ORA-00972: identifier is too long
. . exporting table PE
EXP-00056: ORACLE error 972 encountered
ORA-00972: identifier is too long
Export terminated successfully with warnings.
Is this even possible? Can you use the exp query parameter to perform a spatial operation? Did this work? I am accustom to seeing record counts next to the exported tables, and they are not present in the output from exp. The export file is not empty. It exported all the features, not the subset I had requested.
How can I structure the query differently so that I get the export file with just the lines that fall within the polygons?
Thanks,
JohnI am trying to use the exp utility to export spatial data. I am using the "query" parameter to specify a spatial query based on another spatial layer.
I have two layers. Admin1 has lots of administrative boundaries. PE has three polygons in it over different sections of my data set. I want to get the data extracted from admin1 that exists in these areas to an export file(along with all the triggers and other related database objects). I was hoping this approach would work
I am getting errors saying that the identifier is too long.
Here is the par file:
file=1.exp
log=1.log
tables=(admin1, pe)
query="""WHERE mdsys.SDO_RELATE(GEOM1,pe.GEOM, 'MASK=INSIDE QUERYTYPE=WINDOW')='TRUE' OR SDO_RELATE(GEOM2,pe.GEOM, 'MASK=INSIDE QUERYTYPE=WINDOW')='TRUE'"""
I get:
Export: Release 10.2.0.1.0 - Production on Wed May 10 11:56:14 2006
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Produc
tion
With the Partitioning, OLAP and Data Mining options
Export done in WE8MSWIN1252 character set and AL16UTF16 NCHAR character set
About to export specified tables via Conventional Path ...
. . exporting table ADMIN1
EXP-00056: ORACLE error 972 encountered
ORA-00972: identifier is too long
. . exporting table PE
EXP-00056: ORACLE error 972 encountered
ORA-00972: identifier is too long
Export terminated successfully with warnings.
Is this even possible? Can you use the exp query parameter to perform a spatial operation? Did this work? I am accustom to seeing record counts next to the exported tables, and they are not present in the output from exp. The export file is not empty. It exported all the features, not the subset I had requested.
How can I structure the query differently so that I get the export file with just the lines that fall within the polygons?
Thanks,
John -
Poor performance with Oracle Spatial when spatial query invoked remotely
Is anyone aware of any problems with Oracle Spatial (10.2.0.4 with patches 6989483 and 7003151 on Red Hat Linux 4) which might explain why a spatial query (SDO_WITHIN_DISTANCE) would perform 20 times worse when it was invoked remotely from another computer (using SQLplus) vs. invoking the very same query from the database server itself (also using SQLplus)?
Does Oracle Spatial have any known problems with servers which use SAN disk storage? That is the primary difference between a server in which I see this poor performance and another server where the performance is fine.
Thank you in advance for any thoughts you might share.OK, that's clearer.
Are you sure it is the SQL inside the procedure that is causing the problem? To check, try extracting the SQL from inside the procedure and run it in SQLPLUS with
set autotrace on
set timing on
SELECT ....If the plans and performance are the same then it may be something inside the procedure itself.
Have you profiled the procedure? Here is an example of how to do it:
Prompt Firstly, create PL/SQL profiler table
@$ORACLE_HOME/rdbms/admin/proftab.sql
Prompt Secondly, use the profiler to gather stats on execution characteristics
DECLARE
l_run_num PLS_INTEGER := 1;
l_max_num PLS_INTEGER := 1;
v_geom mdsys.sdo_geometry := mdsys.sdo_geometry(2002,null,null,sdo_elem_info_array(1,2,1),sdo_ordinate_array(0,0,45,45,90,0,135,45,180,0,180,-45,45,-45,0,0));
BEGIN
dbms_output.put_line('Start Profiler Result = ' || DBMS_PROFILER.START_PROFILER(run_comment => 'PARALLEL PROFILE')); -- The comment name can be anything: here it is related to the Parallel procedure I am testing.
v_geom := Parallel(v_geom,10,0.05,1); -- Put your procedure call here
dbms_output.put_line('Stop Profiler Result = ' || DBMS_PROFILER.STOP_PROFILER );
END;
SHOW ERRORS
Prompt Finally, report activity
COLUMN runid FORMAT 99999
COLUMN run_comment FORMAT A40
SELECT runid || ',' || run_date || ',' || run_comment || ',' || run_total_time
FROM plsql_profiler_runs
ORDER BY runid;
COLUMN runid FORMAT 99999
COLUMN unit_number FORMAT 99999
COLUMN unit_type FORMAT A20
COLUMN unit_owner FORMAT A20
COLUMN text FORMAT A100
compute sum label 'Total_Time' of total_time on runid
break on runid skip 1
set linesize 200
SELECT u.runid || ',' ||
u.unit_name,
d.line#,
d.total_occur,
d.total_time,
text
FROM plsql_profiler_units u
JOIN plsql_profiler_data d ON u.runid = d.runid
AND
u.unit_number = d.unit_number
JOIN all_source als ON ( als.owner = 'CODESYS'
AND als.type = u.unit_type
AND als.name = u.unit_name
AND als.line = d.line# )
WHERE u.runid = (SELECT max(runid) FROM plsql_profiler_runs)
ORDER BY d.total_time desc;Run the profiler in both environments and see if you can see where the slowdown exists.
regards
Simon
Maybe you are looking for
-
Windows 7 Acrobat Pro X conflict? Installed but won't open
I bought a new laptop and installed CS6 with Acrobat X Pro. AI and PS work fine, but Acrobat refuses to initialize. I suspect a conflict with trial installation software. Any ideas?
-
Move to next record in a LOOP!
I have to perform a loop on an internal table consisting of several records. within the LOOP there is an if-endif condition followed by some code. Now, in the else condition of the if-endif part, i have to move to the next record (i.e. next record in
-
A report that shows all the elements with their setting
Hi Is there a way to write a report in discoverer which will show all the elements set up in Oracle with there settings e.g. are they taxable or niable etc. Alternatively is there a standard report in HRMS which would give the same results. Thanks in
-
Show Error Message While binding
Hi Experts, I created a wda on which there is an alv with an input field on that. the input column is of type INT2. But when the user tries to enter a non numeric charecter to that field, ideally the wda will generate a message 'The E
-
How can i get rid of iCloud from iTunes why did it murge?
how can i delete iCloud from iTunes?