Sunteți pe pagina 1din 12

Proiect

Oracle spatial

SCARLAT SIMONA ILEANA


1. Tema
Pentru realizarea proiectului Oracle Spatial am realizat diverse jucarii din forma geometrice de baza
in sistemul de coordonate XoY.

2. Descrierea
In acest proiect am folosit patru tabele si anume: AUXILIAR, JUCARII, FURNIZORI si
COMENZI. Tabela AUXILIAR contine informatii despre forme geometrice simple pe baza carora se pot
crea ulterior diferite jucarii. Tabela JUCARII contine informatii despre jucariile create pe baza formelor
geomtrice simple din tabela AUXILIAR. Tabela FURNIZORI contine informatii despre furnizorii jucariilor
din tabela JUCARII. Tabela COMENZI contine informatii despre comenzile jucariilor facute de utilizatori.
2.1 Schema conceptuala

2.2 Crearea tabelelor


CREATE TABLE AUXILIAR (ID_AUXILIARE number(5), NUME_FORMA
varchar2(40),FORMA_GEOMETRICA SDO_GEOMETRY)
ALTER TABLE AUXILIAR ADD CONSTRAINT PK_ID_AUXILIARE PRIMARY KEY
(ID_AUXILIARE)

CREATE TABLE JUCARII (ID_JUCARIE number(5), DENUMIRE varchar2(100), IMAGINE


sdo_geometry, PRET number(5,2))
ALTER TABLE JUCARII ADD CONSTRAINT PK_id_jucarie PRIMARY KEY (ID_JUCARIE)

CREATE TABLE FURNIZORI ( ID_FURNIZOR number(5), NUME_FURNIZOR varchar2(100),


ID_JUCARIE number(5), STOC number(7))
ALTER TABLE FURNIZORI ADD CONSTRAINT pk_id_furnizor PRIMARY KEY (ID_FURNIZOR)
ALTER TABLE FURNIZORI ADD CONSTRAINT fk_id_jucarie_f FOREIGN KEY (ID_JUCARIE)
REFERENCES JUCARII (ID_JUCARIE)

CREATE TABLE COMENZI (ID_COMANDA number(5), NUME_CLIENT varchar2(100),ID_JUCARIE


number(5),CANTITATE number(7), DATA_COMANDA DATE)
ALTER TABLE COMENZI ADD CONSTRAINT pk_id_comanda PRIMARY KEY (ID_COMANDA)
ALTER TABLE COMENZI ADD CONSTRAINT fk_id_jucarie_c FOREIGN KEY (ID_JUCARIE)
REFERENCES JUCARII (ID_JUCARIE)

2.3 Reprezentarea formelor geometrice in sistemul de coordinate XoY

2.4 Popularea tabelelor


INSERT INTO AUXILIAR (ID_AUXILIARE, NUME_FORMA,FORMA_GEOMETRICA) VALUES
(1,'Dreptunghi',SDO_GEOMETRY(2003,NULL,NULL,
SDO_ELEM_INFO_ARRAY(1,1003,3),SDO_ORDINATE_ARRAY(3,4, 7,6));
INSERT INTO AUXILIAR (ID_AUXILIARE, NUME_FORMA,FORMA_GEOMETRICA) VALUES
(2,'Triunghi',SDO_GEOMETRY(2003,NULL,NULL,
SDO_ELEM_INFO_ARRAY(1,1003,1),SDO_ORDINATE_ARRAY(2,6,8,6,5,8)));
INSERT INTO AUXILIAR (ID_AUXILIARE, NUME_FORMA,FORMA_GEOMETRICA) VALUES
(3,'Cerc',SDO_GEOMETRY(2003,NULL,NULL,
SDO_ELEM_INFO_ARRAY(1,1003,4),SDO_ORDINATE_ARRAY(4,11,7,13,4,15)));
INSERT INTO AUXILIAR (ID_AUXILIARE, NUME_FORMA,FORMA_GEOMETRICA) VALUES
(4,'Cerc top',SDO_GEOMETRY(2003,NULL,NULL,
SDO_ELEM_INFO_ARRAY(1,1003,4),SDO_ORDINATE_ARRAY(5,14,8,16,5,18)));
INSERT INTO AUXILIAR (ID_AUXILIARE, NUME_FORMA,FORMA_GEOMETRICA) VALUES
(5,'Cerc middle',SDO_GEOMETRY(2003,NULL,NULL,
SDO_ELEM_INFO_ARRAY(1,1003,4),SDO_ORDINATE_ARRAY(12,13, 14,14.5, 12,16)));
INSERT INTO AUXILIAR (ID_AUXILIARE, NUME_FORMA,FORMA_GEOMETRICA) VALUES
(6,'Cerc middle-right',SDO_GEOMETRY(2003,NULL,NULL,
SDO_ELEM_INFO_ARRAY(1,1003,4),SDO_ORDINATE_ARRAY(13.5,15,14,15.5,13.5,16)));
INSERT INTO AUXILIAR (ID_AUXILIARE, NUME_FORMA,FORMA_GEOMETRICA) VALUES
(7,'Cerc middle-left',SDO_GEOMETRY(2003,NULL,NULL,
SDO_ELEM_INFO_ARRAY(1,1003,4),SDO_ORDINATE_ARRAY(10.5,15,11,15.5,10.5,16)));
INSERT INTO AUXILIAR (ID_AUXILIARE, NUME_FORMA,FORMA_GEOMETRICA) VALUES
(8,'Poligon',SDO_GEOMETRY(2003,NULL,NULL,
SDO_ELEM_INFO_ARRAY(1,1003,1),SDO_ORDINATE_ARRAY(11,12, 10,12, 10,13, 14,13, 14,12,
13,12, 13,9, 12.5,9, 12.5,10, 11.5,10, 11.5,9, 11,9, 11,12)));
INSERT INTO AUXILIAR (ID_AUXILIARE, NUME_FORMA,FORMA_GEOMETRICA) VALUES
(9,'Poligon',SDO_GEOMETRY(2003,NULL,NULL,
SDO_ELEM_INFO_ARRAY(1,1003,1),SDO_ORDINATE_ARRAY(13,17 , 13,8 , 14,18, 14,19 , 15,19,
15,20 , 17,20, 17,19, 18,19, 18,18, 19,18, 19,17, 13,17)));
INSERT INTO AUXILIAR (ID_AUXILIARE, NUME_FORMA,FORMA_GEOMETRICA) VALUES
(10,'Poligon',SDO_GEOMETRY(2003,NULL,NULL,
SDO_ELEM_INFO_ARRAY(1,1003,1),SDO_ORDINATE_ARRAY(13,17 , 13,18 , 14,18, 14,19 , 15,19,
15,20 , 17,20, 17,19, 18,19, 18,18, 19,18, 19,17, 13,17)));
INSERT INTO AUXILIAR (ID_AUXILIARE, NUME_FORMA,FORMA_GEOMETRICA) VALUES
(11,'Triunghi',SDO_GEOMETRY(2003,NULL,NULL,
SDO_ELEM_INFO_ARRAY(1,1003,1),SDO_ORDINATE_ARRAY(17,8, 17,7, 16,7, 16,6, 17,6, 17,5,
16,5, 16,4, 20,4, 20,5, 19,5, 19,6, 20,6, 20,7, 19,7, 19,8, 17,8)));
INSERT INTO AUXILIAR (ID_AUXILIARE, NUME_FORMA,FORMA_GEOMETRICA) VALUES
(12,'Triunghi',SDO_GEOMETRY(2003,NULL,NULL,
SDO_ELEM_INFO_ARRAY(1,1003,1),SDO_ORDINATE_ARRAY(16,8, 18,11, 20,8, 16,8 )));

INSERT INTO AUXILIAR (ID_AUXILIARE, NUME_FORMA,FORMA_GEOMETRICA) VALUES


(15,'Poligon ',SDO_GEOMETRY(2003,NULL,NULL,
SDO_ELEM_INFO_ARRAY(1,1003,1),SDO_ORDINATE_ARRAY(7,2, 7,3, 9,3, 9,4, 12,4, 12,3, 13,3,
13,2, 7,2)));
INSERT INTO AUXILIAR (ID_AUXILIARE, NUME_FORMA,FORMA_GEOMETRICA) VALUES
(13,'Cerc ',SDO_GEOMETRY(2003,NULL,NULL,
SDO_ELEM_INFO_ARRAY(1,1003,4),SDO_ORDINATE_ARRAY(7.5,1, 8,1.5, 7.5, 2)));
INSERT INTO AUXILIAR (ID_AUXILIARE, NUME_FORMA,FORMA_GEOMETRICA) VALUES
(14,'Cerc ',SDO_GEOMETRY(2003,NULL,NULL,
SDO_ELEM_INFO_ARRAY(1,1003,4),SDO_ORDINATE_ARRAY(12.5,1, 13,1.5, 12.5, 2)));

INSERT INTO JUCARII (ID_JUCARIE, DENUMIRE,IMAGINE,PRET) VALUES (1,'Casuta SCARLAT


SIMONA',
(SDO_GEOMETRY(2003,NULL,NULL,
SDO_ELEM_INFO_ARRAY(1,1003,1),SDO_ORDINATE_ARRAY(3,4, 3,6, 2,6, 5,8, 8,6, 7,6, 7,4, 3,4 )))
,79);
INSERT INTO JUCARII (ID_JUCARIE, DENUMIRE,IMAGINE,PRET) VALUES (2,'Racheta de plastic',
(SELECT sdo_geom.sdo_union(a1.forma_geometrica,a2.forma_geometrica,0.005)
from auxiliar a1, auxiliar a2 where a1.id_auxiliare=10 and a2.id_auxiliare=12)
,35);
INSERT INTO JUCARII (ID_JUCARIE, DENUMIRE,IMAGINE,PRET) VALUES (3,'Minge de basket',
(select forma_geometrica from auxiliar where id_auxiliare=4)
,15);
INSERT INTO JUCARII (ID_JUCARIE, DENUMIRE,IMAGINE,PRET) VALUES (4,'Minge de fotbal',
(select forma_geometrica from auxiliar where id_auxiliare=3)
,14);
INSERT INTO JUCARII (ID_JUCARIE, DENUMIRE,IMAGINE,PRET) VALUES (5,'Ursulet de plus',
(SELECT SDO_AGGR_UNION(
SDOAGGRTYPE(c.forma_geometrica, 0.005))
FROM auxiliar c
WHERE c.id_auxiliare = 5 or c.id_auxiliare = 8 or c.id_auxiliare=7 or c.id_auxiliare=6),35);
INSERT INTO JUCARII (ID_JUCARIE, DENUMIRE,IMAGINE,PRET) VALUES (6,'SCARLAT
SIMONA',
NULL,79);
INSERT INTO JUCARII (ID_JUCARIE, DENUMIRE,IMAGINE,PRET) VALUES (7,'Piramida',
(SELECT FORMA_GEOMETRICA FROM auxiliar WHERE ID_AUXILIARE = 9),150);
INSERT INTO JUCARII (ID_JUCARIE, DENUMIRE,IMAGINE,PRET) VALUES (8,'Masinuta',
(SELECT SDO_AGGR_UNION(
SDOAGGRTYPE(c.forma_geometrica, 0.005))
FROM auxiliar c
WHERE c.id_auxiliare = 15 or c.id_auxiliare = 13 or c.id_auxiliare=14 ),234);

2.5 Actualizarea tabelelor de metadata


INSERT INTO user_sdo_geom_metadata (TABLE_NAME,COLUMN_NAME,DIMINFO, SRID)
VALUES ('auxiliar','forma_geometrica',SDO_DIM_ARRAY(SDO_DIM_ELEMENT('X' , 0, 20, 0.005 ),
SDO_DIM_ELEMENT('Y', 0, 20, 0.005)), NULL);
INSERT INTO user_sdo_geom_metadata (TABLE_NAME,COLUMN_NAME,DIMINFO, SRID)
VALUES ('jucarii','imagine',SDO_DIM_ARRAY(SDO_DIM_ELEMENT('X' , 0, 20, 0.005 ),
SDO_DIM_ELEMENT('Y', 0, 20, 0.005)), NULL);

2.6 Creare indecsi spatiali


CREATE INDEX idx_forma_geo ON auxiliar(forma_geometrica) INDEXTYPE IS
MDSYS.SPATIAL_INDEX;
CREATE INDEX idx_imagine ON jucarii(imagine) INDEXTYPE IS MDSYS.SPATIAL_INDEX;
2.7 Vizualizare date spatiale si interogari spatiale

a) Sa se afiseze intersectia dintre formele cu id-urile 3 si 4.

select sdo_geom.sdo_intersection(a1.forma_geometrica, a2.forma_geometrica,0.005) from auxiliar a1,


auxiliar a2 where a1.id_auxiliare=3 and a2.id_auxiliare=4;
b) Sa se afiseze suprafata jucariei: 'Casuta SCARLAT SIMONA' .

select sdo_geom.sdo_area(imagine, 0.005) from jucarii where denumire like '%Casuta SCARLAT
SIMONA%’;

c) Sa se genereze un buffer de dimensiune 1 in exteriorul jucariei cu id-ul 1 si sa se actualizeze


imaginea jucariei cu id-ul 1 cu rezultatul obtinut.

UPDATE JUCARII SET IMAGINE = (SELECT sdo_geom.sdo_buffer(j.imagine,m.diminfo,1) from jucarii


j, user_sdo_geom_metadata m where m.table_name='JUCARII'
AND m.column_name='IMAGINE' and j.id_jucarie=1)
WHERE ID_JUCARIE = 1

select * from jucarii where id_jucarie = 1

d) Sa se afiseze comprimarile triunghiulare ale jucariilor cu id-urile 1 si 2.

select SDO_GEOM.SDO_TRIANGULATE(j.imagine,0.005) from jucarii j


where j.id_jucarie in (1,2)
e) Sa se afiseze distanta minima dintre jucariile 8 si 5.

select SDO_GEOM.sdo_distance(j1.imagine,j2.imagine,0.005) from jucarii j1, jucarii j2


where j1.id_jucarie = 8 and j2.id_jucarie = 5

f) Sa se afiseze perimetrul jucariilor 1 si 7.

select denumire,SDO_GEOM.sdo_length(imagine,0.005) from jucarii where id_jucarie in (1,7)

g) Sa se afiseze forma concava a jucariilor care au pretul mai mare de 80.

select denumire,SDO_GEOM.SDO_CONCAVEHULL(imagine,0.005) from jucarii where pret > 80


h) Sa se afiseze forma geometrica rezultata din intersectia intre formele geometrice 7 si 5.

select sdo_geom.sdo_intersection (a1.forma_geometrica, a2.forma_geometrica, 0.005) from auxiliar


a1, auxiliar a2 where a1.id_auxiliare = 5 and a2.id_auxiliare=7 si intre formele 8 si 5.

select sdo_geom.sdo_difference (a1.forma_geometrica, a2.forma_geometrica, 0.005) from auxiliar a1,


auxiliar a2 where a1.id_auxiliare = 8 and a2.id_auxiliare=5
i) Sa se afiseze forma geometrica rezultata din diferenta dintre formele geometrice 3 si 4.

select sdo_geom.sdo_difference (a1.forma_geometrica, a2.forma_geometrica, 0.005) from auxiliar a1,


auxiliar a2
where a1.id_auxiliare = 3 and a2.id_auxiliare=4

j) Sa se afiseze forma geometrica rezultata din diferenta XOR intre formele 3 si 4 si intre 5 si 7.

select SDO_GEOM.SDO_XOR (a1.forma_geometrica, a2.forma_geometrica, 0.005) from auxiliar a1,


auxiliar a2 where a1.id_auxiliare = 3 and a2.id_auxiliare=4

select SDO_GEOM.SDO_XOR (a1.forma_geometrica, a2.forma_geometrica, 0.005) from auxiliar a1,


auxiliar a2 where a1.id_auxiliare = 7 and a2.id_auxiliare=5
k) Sa se creeze un triunghi ale carui coordonate sunt introduse de la tastatura si sa se insereze in tabela
AUXILIAR.

SET SERVEROUTPUT ON
DECLARE
v_id_generat number;
x1 number;
y1 number;
BEGIN
x1 := &X1;
y1 := &Y1;
SELECT dbms_random.value(100,10000) num INTO v_id_generat from dual;

INSERT INTO auxiliar (id_auxiliare,nume_forma,forma_geometrica) VALUES

(v_id_generat,'Triunghi',(SDO_GEOMETRY(2003,NULL,NULL,SDO_ELEM_INFO_ARRAY(1,1003,1),S
DO_ORDINATE_ARRAY(x1,y1,&X2,&Y2,&X3,&Y3,x1,y1))));
DBMS_OUTPUT.PUT_LINE('A fost inserat triunghiul cu id-ul ' || v_id_generat);
END;
/

S-ar putea să vă placă și