rodb informācijas objekti - web view8.11.2015 · objektu metožu izmantošana...

23
Objektu metožu izmantošana strādājot ar laika datiem create or replace type ALGA_T as object( ALGA number(7,2), DAT_NO date, DAT_LIDZ date); create or replace type ALGAS_T as table of ALGA_T; create table PERSONAS ( PERS_ID varchar2(11), UZV varchar2(20), VAR varchar2(20), PERS_ALGA ALGAS_T) nested table PERS_ALGA store as IEV_TABULA; begin insert into PERSONAS values('10108012345', 'Koks', 'Juris', ALGAS_T(ALGA_T(150, TO_DATE('10-JAN-2000'), TO_DATE('20-DEC -2000')), ALGA_T(180, TO_DATE('20-DEC-2000'), TO_DATE('15-APR-2001')), ALGA_T(250, TO_DATE('15-APR-2001'), TO_DATE('16-DEC-2001')))); Insert into PERSONAS values ('21078234567', 'Celms', 'Zane', ALGAS_T(ALGA_T(140, TO_DATE('01-JAN-2000'), TO_DATE('15-SEP -2000')), ALGA_T(180, TO_DATE('15-SEP-2000'), TO_DATE('10-MAR-2001')), ALGA_T(260, TO_DATE('10-MAR-2001'), TO_DATE('20-APR-2002')))); end; 1

Upload: hoangdang

Post on 10-Mar-2018

216 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: RODB informācijas objekti - Web view8.11.2015 · Objektu metožu izmantošana strādājot ar laika datiem. create or replace type ALGA_T as object(ALGA . number (7,2), DAT_NO . date,

Objektu metožu izmantošana strādājot ar laika datiemcreate or replace type ALGA_T as object(ALGA number(7,2),DAT_NO date,DAT_LIDZ date);

create or replace type ALGAS_T as table of ALGA_T;

create table PERSONAS (PERS_ID varchar2(11),UZV varchar2(20),VAR varchar2(20),PERS_ALGA ALGAS_T)nested table PERS_ALGA store as IEV_TABULA;

begininsert into PERSONAS values('10108012345', 'Koks', 'Juris',ALGAS_T(ALGA_T(150, TO_DATE('10-JAN-2000'), TO_DATE('20-DEC -2000')), ALGA_T(180, TO_DATE('20-DEC-2000'), TO_DATE('15-APR-2001')), ALGA_T(250, TO_DATE('15-APR-2001'), TO_DATE('16-DEC-2001'))));Insert into PERSONAS values ('21078234567', 'Celms', 'Zane',ALGAS_T(ALGA_T(140, TO_DATE('01-JAN-2000'), TO_DATE('15-SEP -2000')), ALGA_T(180, TO_DATE('15-SEP-2000'), TO_DATE('10-MAR-2001')), ALGA_T(260, TO_DATE('10-MAR-2001'), TO_DATE('20-APR-2002'))));end;

select A.PERS_ALGA from PERSONAS A;PERS_ALGA (ALGA, DAT_NO, DAT_LIDZ)-----------------------------------------------------------------------------ALGAS_T(ALGA_T(150, '10-JAN-00', '20-DEC-00'), ALGA_T(180, '20-DEC-00', '15-APR-01'), ALGA_T(250, '15-APR-01', '16-DEC-01'))ALGAS_T(ALGA_T(140, '01-JAN-00', '15-SEP-00'), ALGA_T(180, '15-SEP-00', '10-MAR-01'), ALGA_T(260, '10-MAR-01', '20-APR-02'))

1

Page 2: RODB informācijas objekti - Web view8.11.2015 · Objektu metožu izmantošana strādājot ar laika datiem. create or replace type ALGA_T as object(ALGA . number (7,2), DAT_NO . date,

select A.UZV, B.ALGA, B.DAT_NO, B.DAT_LIDZ from PERSONAS A, TABLE(A.PERS_ALGA) B;UZV ALGA DAT_NO DAT_LIDZ-------------------------------------------------------------------------Koks 150 10-JAN-00 20-DEC-00Koks 180 20-DEC-00 15-APR-01Koks 250 15-APR-01 16-DEC-01Celms 140 01-JAN-00 15-SEP-00Celms 180 15-SEP-00 10-MAR-01Celms 260 10-MAR-01 20-APR-02

select C.UZV, COUNT(C.ALGA) as SKAITSfrom (select A.UZV, B.ALGA from PERSONAS A, TABLE(A.PERS_ALGA) B) Cgroup by C.UZV;UZV SKAITS---------------------------------Celms 3Koks 3

2

Page 3: RODB informācijas objekti - Web view8.11.2015 · Objektu metožu izmantošana strādājot ar laika datiem. create or replace type ALGA_T as object(ALGA . number (7,2), DAT_NO . date,

Divu personu laika intervālu salīdzināšana

select C.DAT_NO as S1, C.DAT_LIDZ as B1from (select A.UZV, B.ALGA, B.DAT_NO, B.DAT_LIDZ from PERSONAS A, TABLE(A.PERS_ALGA) B) Cwhere C.UZV='Koks' and C.ALGA = 180;S1 B1---------------------------------20-DEC-00 15-APR-01

select D.SA1, D.BE1, E.SA2, E.BE2, 'Ir pārklāšanās’ REZULTĀTSfrom (select C.DAT_NO as SA1, C.DAT_LIDZ as BE1 from (select A.UZV, B.ALGA, B.DAT_NO, B.DAT_LIDZ from PERSONAS A, TABLE(A.PERS_ALGA) B) C where C.UZV='Koks' and C.ALGA = 180) D, (select C1.DAT_NO as SA2, C1.DAT_LIDZ as BE2 from (select A1.UZV, B1.ALGA, B1.DAT_NO, B1.DAT_LIDZ from PERSONAS A1, TABLE(A1.PERS_ALGA) B1) C1 where C1.UZV='Celms' and C1.ALGA = 180) Ewhere (SA2 >= SA1 and SA2 < BE1) or (SA1 >= SA2 and SA1 < BE2);

SA1 BE1 SA2 BE2 REZULTĀTS ---------------------------------------------------------------------------------------------20-DEC-00 15-APR-01 15-SEP-00 10-MAR-01 Ir pārklāšanās

3

Page 4: RODB informācijas objekti - Web view8.11.2015 · Objektu metožu izmantošana strādājot ar laika datiem. create or replace type ALGA_T as object(ALGA . number (7,2), DAT_NO . date,

Objekta skata izveidošana un izmantošana

select A.UZV, B.ALGA, B.DAT_NO, B.DAT_LIDZ from PERSONAS A, TABLE(A.PERS_ALGA) B;UZV ALGA DAT_NO DAT_LIDZ-------------------------------------------------------------------Koks 150 10-JAN-00 20-DEC-00Koks 180 20-DEC-00 15-APR-01Koks 250 15-APR-01 16-DEC-01Celms 140 01-JAN-00 15-SEP-00Celms 180 15-SEP-00 10-MAR-01Celms 260 10-MAR-01 20-APR-02

create or replace type OBJ_TIPS_1 as object(UZV varchar2(10),ALGA number(10,2),DAT_NO date,DAT_LIDZ date);

create or replace view O_SKATS_1 OF OBJ_TIPS_1 with object identifier(UZV, ALGA) asselect A.UZV, B.ALGA, B.DAT_NO, B.DAT_LIDZ from PERSONAS A, TABLE(A.PERS_ALGA) B;

select VALUE(A) from O_SKATS_1 A;VALUE(A)(UZV, ALGA, DAT_NO, DAT_LIDZ)---------------------------------------------------------------------------OBJ_TIPS_1('Koks', 150, '10-JAN-00', '20-DEC-00')OBJ_TIPS_1 ('Koks', 180, '20-DEC-00', '15-APR-01')OBJ_TIPS_1 ('Koks', 250, '15-APR-01', '16-DEC-01')OBJ_TIPS_1 ('Celms', 140, '01-JAN-00', '15-SEP-00')OBJ_TIPS_1 ('Celms', 180, '15-SEP-00', '10-MAR-01')OBJ_TIPS_1 ('Celms', 260, '10-MAR-01', '20-APR-02')

select VALUE(A) FROM O_SKATS_1 A where VALUE(A).ALGA = 180;VALUE(A)(UZV, ALGA, DAT_NO, DAT_LIDZ)--------------------------------------------------------------------------------OBJ_TIPS_1('Koks', 180, '20-DEC-00', '15-APR-01')OBJ_TIPS_1('Celms', 180, '15-SEP-00', '10-MAR-01')

4

Page 5: RODB informācijas objekti - Web view8.11.2015 · Objektu metožu izmantošana strādājot ar laika datiem. create or replace type ALGA_T as object(ALGA . number (7,2), DAT_NO . date,

ORDER tipa metodes izveidošana objektu skatam

create or replace type OBJ_TIPS_1 as object(UZV varchar2(10),ALGA number(10,2),DAT_NO date,DAT_LIDZ date,ORDER member function PARKLAJAS(AA OBJ_TIPS_1) return integer);

create or replace type body OBJ_TIPS_1 T asORDER member function PARKLAJAS(AA OBJEKTS_1_T) return integer isbegin if (DAT_NO >= AA.DAT_NO and DAT_NO < AA.DAT_LIDZ) or (AA.DAT_NO >= SELF.DAT_NO and AA.DAT_NO < SELF.DAT_LIDZ) then return 1; else return 0; end if;end;end;

create or replace view O_SKATS_1 of OBJ_TIPS_1 with object identifier(UZV, ALGA) asSELECT A.UZV, B.ALGA, B.DAT_NO, B.DAT_LIDZ FROM PERSONAS A, TABLE(A.PERS_ALGA) B;

SELECT VALUE(B) AS O1, (SELECT VALUE(A) FROM O_SKATS_1 A WHERE A.UZV = 'Koks' AND A.ALGA = 180) AS O2 FROM O_SKATS_1 BWHERE VALUE(B).UZV <> 'Koks' ;O1(UZV, ALGA, DAT_NO, DAT_LIDZ) O2(UZV, ALGA, DAT_NO, DAT_LIDZ)----------------------------------------------------------------------------------------------------------OBJEKTS_1_T('Celms', 140, '01-JAN-00', '15-SEP-00') OBJEKTS_1_T('Koks', 180, '20-DEC-00', '15-APR-01')OBJEKTS_1_T('Celms', 180, '15-SEP-00', '10-MAR-01') OBJEKTS_1_T('Koks', 180, '20-DEC-00', '15-APR-01')OBJEKTS_1_T('Celms', 260, '10-MAR-01', '20-APR-02') OBJEKTS_1_T('Koks', 180, '20-DEC-00', '15-APR-01')

5

Page 6: RODB informācijas objekti - Web view8.11.2015 · Objektu metožu izmantošana strādājot ar laika datiem. create or replace type ALGA_T as object(ALGA . number (7,2), DAT_NO . date,

select C.O1, C.O2from (select VALUE(B) as O1, (select VALUE(A) from O_SKATS_1 A where A.UZV = 'Koks' and A.ALGA = 180) as O2 from O_SKATS_1 B where VALUE(B).UZV <> 'Koks' AND VALUE(B).ALGA = 180 ) Cwhere C.O1.PARKLAJAS(C.O2) = 1;

O1(UZV, ALGA, DAT_NO, DAT_LIDZ) O2(UZV, ALGA, DAT_NO, DAT_LIDZ) ----------------------------------------------------------------------------------------------------------OBJEKTS_1_T('Celms', 180, '15-SEP-00', '10-MAR-01') OBJEKTS_1_T('Koks', 180, '20-DEC-00', '15-APR-01')

SELECT VALUE(B)FROM O_SKATS_1 BWHERE VALUE(B).PARKLAJAS( SELECT VALUE(A) FROM O_SKATS_1 A WHERE A.UZV = 'Koks' AND A.ALGA = 180) = 1;ERROR at line 4:ORA-00936: missing expression

6

Page 7: RODB informācijas objekti - Web view8.11.2015 · Objektu metožu izmantošana strādājot ar laika datiem. create or replace type ALGA_T as object(ALGA . number (7,2), DAT_NO . date,

MEMBER tipa metodes izveidošana objektu skatamMetode PARKLAJAS pārbaudīs, vai divi laika intervāli pārklājas

CREATE OR REPLACE TYPE OBJEKTS_1_T AS OBJECT(UZV VARCHAR2(10),ALGA NUMBER(10,2),DAT_NO DATE,DAT_LIDZ DATE,MEMBER FUNCTION PARKLAJAS( P_UZV VARCHAR2, P_ALGA NUMBER) RETURN NUMBER);

CREATE OR REPLACE VIEW O_SKATS_1 OF OBJEKTS_1_T WITH OBJECT IDENTIFIER(UZV, ALGA) ASSELECT A.UZV, B.ALGA, B.DAT_NO, B.DAT_LIDZ FROM PERSONAS A, TABLE(A.PERS_ALGA) B;

CREATE OR REPLACE TYPE BODY OBJEKTS_1_T ASMEMBER FUNCTION PARKLAJAS(P_UZV VARCHAR2, P_ALGA NUMBER) RETURN NUMBER IS m_obj OBJEKTS_1_T;BEGINSELECT VALUE(A) INTO m_obj FROM O_SKATS_1 AWHERE A.UZV = P_UZV AND A.ALGA = P_ALGA; IF ((SELF.DAT_NO >= m_obj.DAT_NO AND SELF.DAT_NO < m_obj.DAT_LIDZ) OR (m_obj.DAT_NO >= SELF.DAT_NO AND m_obj.DAT_NO < SELF.DAT_LIDZ)) AND SELF.ALGA = P_ALGA AND SELF.UZV <> P_UZV THEN RETURN 1; ELSE RETURN 0; END IF;END;END;

7

Page 8: RODB informācijas objekti - Web view8.11.2015 · Objektu metožu izmantošana strādājot ar laika datiem. create or replace type ALGA_T as object(ALGA . number (7,2), DAT_NO . date,

SELECT A.UZV, A.ALGA, A.DAT_NO, A.DAT_LIDZ, VALUE(A).PARKLAJAS('Koks', 180) FROM O_SKATS_1 A;

UZV ALGA DAT_NO DAT_LIDZ VALUE(A).PARKLAJAS('KOKS',180)----------------------------------------------------------------------------------------------------------Koks 150 10-JAN-00 20-DEC-00 0Koks 180 20-DEC-00 15-APR-01 0Koks 250 15-APR-01 16-DEC-01 0Celms 140 01-JAN-00 15-SEP-00 0Celms 180 15-SEP-00 10-MAR-01 1Celms 260 10-MAR-01 20-APR-02 0

select A.UZV, A.ALGA, A.DAT_NO, A.DAT_LIDZfrom O_SKATS_1 Awhere VALUE(A).PARKLAJAS('Koks', 180) = 1;

UZV ALGA DAT_NO DAT_LIDZ--------------------------------------------------------------Celms 180 15-SEP-00 10-MAR-01

8

Page 9: RODB informācijas objekti - Web view8.11.2015 · Objektu metožu izmantošana strādājot ar laika datiem. create or replace type ALGA_T as object(ALGA . number (7,2), DAT_NO . date,

Temporālas datu bāzes piemērscreate table DARBINIEKI (UZV varchar2(20),AMATS varchar2(20),DAT_NO date,DAT_LIDZ date);

alter session set NLS_DATE_FORMAT = 'DD-MM-RRRR' ;insert into DARBINIEKI values ('Koks', 'asistents', TO_DATE('16-05-2001'), TO_DATE('21-07- 2007'));insert into DARBINIEKI values ('Koks', 'lektors', TO_DATE('21-07-2007'), TO_DATE('28-08-2008'));insert into DARBINIEKI values ('Koks', 'docents', TO_DATE('28-08-2008'), TO_DATE('11-05-2010'));insert into DARBINIEKI values ('Celms', 'asistents', TO_DATE('10-04-2000'), TO_DATE('28-06-2005'));insert into DARBINIEKI values ('Celms', 'lektors', TO_DATE('28-06-2007'), TO_DATE('02-03-2009'));insert into DARBINIEKI values ('Celms', 'docents', TO_DATE('02-03-2009'), TO_DATE('21-07-2010'));

create table ATALGOJUMS (AMATS varchar2(20),ALGA number(8,2),DAT_NO date,DAT_LIDZ date);insert into ATALGOJUMS values('asistents', 150, TO_DATE('01-01-2000'), TO_DATE('01-01-2003'));insert into ATALGOJUMS values('asistents', 200, TO_DATE('01-01-2003'), TO_DATE('01-01-2006'));insert into ATALGOJUMS values('asistents', 250, TO_DATE('01-01-2006'), TO_DATE('01-01-2011'));insert into ATALGOJUMS values('lektors', 300, TO_DATE('01-01-2000'), TO_DATE('01-01-2003'));insert into ATALGOJUMS values('lektors', 350, TO_DATE('01-01-2003'), TO_DATE('01-01-2006'));insert into ATALGOJUMS values('lektors', 400, TO_DATE('01-01-2006'), TO_DATE('01-01-2011'));insert into ATALGOJUMS values('docents', 500, TO_DATE('01-01-2000'), TO_DATE('01-01-2003'));insert into ATALGOJUMS values('docents', 550, TO_DATE('01-01-2003'), TO_DATE('01-01-2006'));insert into ATALGOJUMS values('docents', 600, TO_DATE('01-01-2006'), TO_DATE('01-01-2011'));

select a.UZV, a.AMATS, b.ALGA, a.DAT_NO, a.DAT_LIDZ, b.DAT_NO, b.DAT_LIDZfrom DARBINIEKI a, ATALGOJUMS bwhere a.AMATS = b.AMATS and(((a.DAT_NO <= b.DAT_NO) and (a.DAT_LIDZ >= b.DAT_NO)) or((b.DAT_NO <= a.DAT_NO) and (b.DAT_LIDZ >= a.DAT_NO)))order by a.UZV, a.AMATS, a.DAT_NO;

UZV AMATS ALGA DAT_NO DAT_LIDZ DAT_NO DAT_LIDZ-------------------------------------------------------------------------------------------------------------Celms asistents 150 10-04-2000 28-06-2005 01-01-2000 01-01-2003Celms asistents 200 10-04-2000 28-06-2005 01-01-2003 01-01-2006Celms docents 600 02-03-2009 21-07-2010 01-01-2006 01-01-2011Celms lektors 400 28-06-2007 02-03-2009 01-01-2006 01-01-2011Koks asistents 150 16-05-2001 21-07-2007 01-01-2000 01-01-2003Koks asistents 200 16-05-2001 21-07-2007 01-01-2003 01-01-2006Koks asistents 250 6-05-2001 21-07-2007 01-01-2006 01-01-2011Koks docents 600 28-08-2008 11-05-2010 01-01-2006 01-01-2011Koks lektors 400 21-07-2007 28-08-2008 01-01-2006 01-01-2011

9

Page 10: RODB informācijas objekti - Web view8.11.2015 · Objektu metožu izmantošana strādājot ar laika datiem. create or replace type ALGA_T as object(ALGA . number (7,2), DAT_NO . date,

select c.UZV, c.AMATS, c.ALGA, case when c.D1 > c.D3 then c.D1 else c.D3 end as SAKUMS, case when c.D2 < c.D4 then c.D2 else c.D4 end as BEIGASfrom(select a.UZV, a.AMATS, b.ALGA, a.DAT_NO as D1, a.DAT_LIDZ as D2, b.DAT_NO as D3, b.DAT_LIDZ as D4from DARBINIEKI a, ATALGOJUMS bwhere a.AMATS = b.AMATS and(((a.DAT_NO <= b.DAT_NO) and (a.DAT_LIDZ >= b.DAT_NO)) or((b.DAT_NO <= a.DAT_NO) and (b.DAT_LIDZ >= a.DAT_NO)))order by a.UZV, a.AMATS, a.DAT_NO) c;

UZV AMATS ALGA SAKUMS BEIGAS-------------------------------------------------------------------------Celms asistents 150 10-04-2000 01-01-2003Celms asistents 200 01-01-2003 28-06-2005Celms docents 600 02-03-2009 21-07-2010Celms lektors 400 28-06-2007 02-03-2009Koks asistents 150 16-05-2001 01-01-2003Koks asistents 200 01-01-2003 01-01-2006Koks asistents 250 01-01-2006 21-07-2007Koks docents 600 28-08-2008 11-05-2010Koks lektors 400 21-07-2007 28-08-2008

create or replace type DARBINIEKS as object(UZV varchar2(20),AMATS varchar2(20),DAT_NO date,DAT_LIDZ date,order member function ALGA(aa DARBINIEKS) return number);

create or replace type body DARBINIEKS asorder member function ALGA(aa DARBINIEKS) return number isbegin IF (DAT_NO >= AA.DAT_NO AND DAT_NO < AA.DAT_LIDZ) OR (AA.DAT_NO >= SELF.DAT_NO AND AA.DAT_NO < SELF.DAT_LIDZ) THEN RETURN 1; ELSE RETURN 0; END IF;end;end;

create or replace view O_SKATS of DARBINIEKS with object identifier(UZV) asselect a.UZV, a.AMATS, a.DAT_NO, a.DAT_LIDZ from DARBINIEKI a,

10

Page 11: RODB informācijas objekti - Web view8.11.2015 · Objektu metožu izmantošana strādājot ar laika datiem. create or replace type ALGA_T as object(ALGA . number (7,2), DAT_NO . date,

Piemērs. Objektu metodes1. Tabulas PERSONAS ar iekļauto tabulu izveidošana

CREATE OR REPLACE TYPE ALGA_T AS OBJECT ( ALGA NUMBER(7,2), DAT_NO DATE, DAT_LIDZ DATE);

CREATE OR REPLACE TYPE ALGAS_T AS TABLE OF ALGA_T;

CREATE TABLE PERSONAS ( PERS_ID VARCHAR2(11), UZV VARCHAR2(20), VAR VARCHAR2(20), PERS_ALGA ALGAS_T) NESTED TABLE PERS_ALGA STORE AS IEV_TABULA;

BEGININSERT INTO PERSONAS VALUES ('10108012345', 'Koks', 'Juris',ALGAS_T(ALGA_T(150, TO_DATE('10-JAN-2000'), TO_DATE('20-DEC -2000')), ALGA_T(180, TO_DATE('20-DEC-2000'), TO_DATE('15-APR-2001')), ALGA_T(250, TO_DATE('15-APR-2001'), TO_DATE('16-DEC-2001'))));INSERT INTO PERSONAS VALUES ('21078234567', 'Celms', 'Zane',ALGAS_T(ALGA_T(140, TO_DATE('01-JAN-2000'), TO_DATE('15-SEP -2000')), ALGA_T(180, TO_DATE('15-SEP-2000'), TO_DATE('10-MAR-2001')), ALGA_T(260, TO_DATE('10-MAR-2001'), TO_DATE('20-APR-2002'))));END;

SELECT * FROM PERSONAS;

PERS_ID UZV VAR PERS_ALGA(ALGA, DAT_NO, DAT_LIDZ)----------------------------------------------------------------------------------------------------------------10108012345 Koks Juris ALGAS_T(ALGA_T(150, '10-JAN-00', '20-DEC-00'), ALGA_T(180, '20-DEC-00', '15-APR-01'), ALGA_T(250, '15-APR-01', '16-DEC-01'))21078234567 Celms Zane ALGAS_T(ALGA_T(140, '01-JAN-00', '15-SEP-00'), ALGA_T(180, '15-SEP-00', '10-MAR-01'), ALGA_T(260, '10-MAR-01', '20-APR-02'))

11

Page 12: RODB informācijas objekti - Web view8.11.2015 · Objektu metožu izmantošana strādājot ar laika datiem. create or replace type ALGA_T as object(ALGA . number (7,2), DAT_NO . date,

SELECT A.UZV, B.ALGA, B.DAT_NO, B.DAT_LIDZ FROM PERSONAS A, TABLE(A.PERS_ALGA) B;

UZV ALGA DAT_NO DAT_LIDZ-------------------------------------------------------------------------Koks 150 10-JAN-00 20-DEC-00Koks 180 20-DEC-00 15-APR-01Koks 250 15-APR-01 16-DEC-01Celms 140 01-JAN-00 15-SEP-00Celms 180 15-SEP-00 10-MAR-01Celms 260 10-MAR-01 20-APR-02

2. Objekta skata izveidošana un izmantošana

CREATE OR REPLACE TYPE OBJEKTS_1_T AS OBJECT(UZV VARCHAR2(10),ALGA NUMBER(10,2),DAT_NO DATE,DAT_LIDZ DATE);

CREATE OR REPLACE VIEW O_SKATS_1 OF OBJEKTS_1_T WITH OBJECT IDENTIFIER(UZV, ALGA) AS

SELECT A.UZV, B.ALGA, B.DAT_NO, B.DAT_LIDZ FROM PERSONAS A, TABLE(A.PERS_ALGA) B;

SELECT VALUE(A) FROM O_SKATS_1 A;

VALUE(A)(UZV, ALGA, DAT_NO, DAT_LIDZ)---------------------------------------------------------------------------OBJEKTS_1_T('Koks', 150, '10-JAN-00', '20-DEC-00')OBJEKTS_1_T('Koks', 180, '20-DEC-00', '15-APR-01')OBJEKTS_1_T('Koks', 250, '15-APR-01', '16-DEC-01')OBJEKTS_1_T('Celms', 140, '01-JAN-00', '15-SEP-00')OBJEKTS_1_T('Celms', 180, '15-SEP-00', '10-MAR-01')OBJEKTS_1_T('Celms', 260, '10-MAR-01', '20-APR-02')

SELECT VALUE(A) FROM O_SKATS_1 A WHERE VALUE(A).ALGA = 180;

VALUE(A)(UZV, ALGA, DAT_NO, DAT_LIDZ)--------------------------------------------------------------------------------OBJEKTS_1_T('Koks', 180, '20-DEC-00', '15-APR-01')OBJEKTS_1_T('Celms', 180, '15-SEP-00', '10-MAR-01')

12

Page 13: RODB informācijas objekti - Web view8.11.2015 · Objektu metožu izmantošana strādājot ar laika datiem. create or replace type ALGA_T as object(ALGA . number (7,2), DAT_NO . date,

3. Objekta skata ar ORDER tipa metodi izveidošana un izmantošana

CREATE OR REPLACE TYPE OBJEKTS_1_T AS OBJECT(UZV VARCHAR2(10),ALGA NUMBER(10,2),DAT_NO DATE,DAT_LIDZ DATE,ORDER MEMBER FUNCTION PARKLAJAS( AA OBJEKTS_1_T ) RETURN INTEGER);

CREATE OR REPLACE TYPE BODY OBJEKTS_1_T ASORDER MEMBER FUNCTION PARKLAJAS(AA OBJEKTS_1_T) RETURN INTEGER ISBEGIN IF (DAT_NO >= AA.DAT_NO AND DAT_NO < AA.DAT_LIDZ) OR (AA.DAT_NO >= SELF.DAT_NO AND AA.DAT_NO < SELF.DAT_LIDZ) THEN RETURN 1; ELSE RETURN 0; END IF;END;END;

CREATE OR REPLACE VIEW O_SKATS_1 OF OBJEKTS_1_T WITH OBJECT IDENTIFIER(UZV, ALGA) ASSELECT A.UZV, B.ALGA, B.DAT_NO, B.DAT_LIDZ FROM PERSONAS A, TABLE(A.PERS_ALGA) B;

SELECT VALUE(B) AS O1, (SELECT VALUE(A) FROM O_SKATS_1 A WHERE A.UZV = 'Koks' AND A.ALGA = 180) AS O2 FROM O_SKATS_1 BWHERE VALUE(B).UZV <> 'Koks' ; O1(UZV, ALGA, DAT_NO, DAT_LIDZ) O2(UZV, ALGA, DAT_NO, DAT_LIDZ)------------------------------------------------------------------------------------------------------------------OBJEKTS_1_T('Celms', 140, '01-JAN-00', '15-SEP-00') OBJEKTS_1_T('Koks', 180, '20-DEC-00', '15-APR-01')OBJEKTS_1_T('Celms', 180, '15-SEP-00', '10-MAR-01') OBJEKTS_1_T('Koks', 180, '20-DEC-00', '15-APR-01')OBJEKTS_1_T('Celms', 260, '10-MAR-01', '20-APR-02') OBJEKTS_1_T('Koks', 180, '20-DEC-00', '15-APR-01')

13

Page 14: RODB informācijas objekti - Web view8.11.2015 · Objektu metožu izmantošana strādājot ar laika datiem. create or replace type ALGA_T as object(ALGA . number (7,2), DAT_NO . date,

SELECT C.O1, C.O2FROM (SELECT VALUE(B) AS O1, (SELECT VALUE(A) FROM O_SKATS_1 A WHERE A.UZV = 'Koks' AND A.ALGA = 180) AS O2 FROM O_SKATS_1 B WHERE VALUE(B).UZV <> 'Koks' AND VALUE(B).ALGA = 180 ) CWHERE C.O1.PARKLAJAS(C.O2) = 1;

O1(UZV, ALGA, DAT_NO, DAT_LIDZ) O2(UZV, ALGA, DAT_NO, DAT_LIDZ) ---------------------------------------------------------------------------------------------------------------------------OBJEKTS_1_T('Celms', 180, '15-SEP-00', '10-MAR-01') OBJEKTS_1_T('Koks', 180, '20-DEC-00', '15-APR-01')

SELECT VALUE(B)FROM O_SKATS_1 BWHERE VALUE(B).PARKLAJAS( SELECT VALUE(A) FROM O_SKATS_1 A WHERE A.UZV = 'Koks' AND A.ALGA = 180) = 1;

ERROR at line 4:ORA-00936: missing expression

14