25
Oracle – ORDMS lehetőségek UDT: - objektum típusok - kollekció típusok SQL> CREATE TYPE SZEMELY AS OBJECT ( 2 NEV VARCHAR2(20), 3 TEL VARCHAR2(14)); BLE MUNKA (LEIRAS CHAR(20), LOS SZEMELY); TO MUNKA VALUES ('PROBA MUNKA', ELY('PETER','123')); FROM MUNKA FELELOS(NEV, TEL) --------------------------------------------------- SZEMELY('PETER', '123')

Oracle – ORDMS lehetőségek

  • Upload
    chill

  • View
    33

  • Download
    1

Embed Size (px)

DESCRIPTION

Oracle – ORDMS lehetőségek. UDT:- objektum típusok - kollekció típusok. SQL> CREATE TYPE SZEMELY AS OBJECT ( 2 NEV VARCHAR2(20), 3 TEL VARCHAR2(14));. SQL> CREATE TABLE MUNKA (LEIRAS CHAR(20), FELELOS SZEMELY); SQL> INSERT INTO MUNKA VALUES ('PROBA MUNKA', - PowerPoint PPT Presentation

Citation preview

Page 1: Oracle – ORDMS lehetőségek

Oracle – ORDMS lehetőségek

UDT: - objektum típusok- kollekció típusok

SQL> CREATE TYPE SZEMELY AS OBJECT ( 2 NEV VARCHAR2(20), 3 TEL VARCHAR2(14));

SQL> CREATE TABLE MUNKA (LEIRAS CHAR(20), FELELOS SZEMELY);SQL> INSERT INTO MUNKA VALUES ('PROBA MUNKA', SZEMELY('PETER','123'));SQL> SELECT * FROM MUNKALEIRAS FELELOS(NEV, TEL)--------------------------------------------------------------------------------PROBA MUNKA SZEMELY('PETER', '123')

Page 2: Oracle – ORDMS lehetőségek

SQL> SELECT * FROM MUNKA M WHERE M.FELELOS.NEV LIKE 'PETER%';SQL> SELECT M.FELELOS.NEV FROM MUNKA M;FELELOS.NEV--------------------PETER

Alias név használata kötelező objektum attribútum hivatkozásoknál

SELECT FELELOS FROM MUNKA; ok SELECT FELELOS.NEV FROM MUNKA; nem SELECT MUNKA.FELELOS.NEV FROM MUNKA; nem SELECT M.FELELOS.NEV FROM MUNKA M; ok

Page 3: Oracle – ORDMS lehetőségek

SQL> CREATE TABLE SZEMELYEK OF SZEMELY;

Objektum tábla

SQL> INSERT INTO SZEMELYEK VALUES ('ANNA','3424');SQL> SELECT NEV FROM SZEMELYEK WHERE TEL LIKE '3424%';NEV--------------------ANNA

INSERT INTO SZEMELYEK VALUES(NULL) nemINSERT INTO SZEMELYEK VALUES(SZEMELY(NULL,NULL)) ok

Page 4: Oracle – ORDMS lehetőségek

Objektum view

SQL> CREATE TYPE NEZET AS OBJECT ( 2 NEV CHAR(30), 3 FIZ NUMBER(3));SQL> CREATE VIEW V OF NEZET WITH OBJECT IDENTIFIER (NEV) AS SELECT M.FELELOS.NEV NEV,

M.FIZETES FROM MUNKA M;SQL> SELECT * FROM V;

NEV FIZ-------------------- ----------PETER 200

SQL> CREATE VIEW V2 (F1,F2) AS SELECT M.LEIRAS, NEZET(M.FELELOS.NEV, M.FIZETES) FROM MUNKA M;SQL> SELECT V.F1, AVG(V.F2.FIZ) FROM V2 V

GROUP BY V.F1;

Page 5: Oracle – ORDMS lehetőségek

SELECT kifejezések szabadabb használata

SQL> SELECT LEIRAS, (SELECT MAX(FIZETES) FROM MUNKA) FROM MUNKA; okSQL> SELECT MAX(SELECT FIZETES FROM MUNKA) FROM DUAL; hibaSQL> SELECT MAX(AFIZ) FROM (SELECT LEIRAS, AVG(FIZETES) AFIZ FROM MUNKA GROUP BY LEIRAS); okSQL> INSERT INTO MUNKA VALUES ('PROBA',NULL, (SELECT MAX(FIZETES) + 1 FROM MUNKA));1 sor létrejött. okSQL> CREATE ASSERTION A1 CHECK (SELECT

MAX(FIZETES) FROM MUNKA) > 100); hibaSQL> UPDATE MUNKA SET FIZETES = (SELECT

MIN(FIZETES) FROM MUNKA) WHERE FIZETES < 150; ok

Page 6: Oracle – ORDMS lehetőségek

Tábla típus

SQL> CREATE TYPE NYELV AS OBJECT ( NYNEV CHAR(20),

SZINT NUMBER(1));SQL> CREATE TYPE NYELVEK AS TABLE OF NYELV;

SQL> ALTER TABLE MUNKA ADD (NYSZINT NYELVEK) NESTED TABLE NYSZINT STORE AS NYTABLA;

Page 7: Oracle – ORDMS lehetőségek

SQL> INSERT INTO MUNKA VALUES ('UJABB',SZEMELY('KATI','3462'),301, NYELVEK(NYELV('ANGOL',1),NYELV('NEMET',2)));

SQL> SELECT * FROM TABLE (SELECT NYSZINT FROM MUNKA WHERE LEIRAS='UJABB');NYNEV SZINT-------------------- ----------ANGOL 1NEMET 2

SQL> INSERT INTO TABLE(SELECT NYSZINT FROM MUNKA WHERE LEIRAS='UJABB') VALUES ('FINN',3);SQL> UPDATE TABLE(SELECT NYSZINT FROM MUNKA WHERE LEIRAS='UJABB') SET SZINT = 4 WHERE NYNEV = 'FINN';

Tábla típus

Page 8: Oracle – ORDMS lehetőségek

Objektum azonosítás, hivatkozás

objektum azonosítás (OID) : - rendszer által generált - kulcsból képzett

indexelt hivatkozás : REF()

SQL> CREATE TYPE AUTO AS OBJECT ( RSZ CHAR(6), TULAJ REF SZEMELY);SQL> CREATE TABLE AUTOK OF AUTO;SQL> SELECT P.NEV, REF(P) FROM SZEMELYEK P;

NEV REF(P)-------------------------------------------------------------------

ANNA 0000280209447BAB1EDDE24A5886E9 C64B6BC741586786A61E89134C158795B6AE6 A5152000040C5820000

Page 9: Oracle – ORDMS lehetőségek

SQL> INSERT INTO AUTOK VALUES('R11', (SELECT REF(P) FROM SZEMELYEK P WHERE P.NEV='ZOLI'));

SQL> SELECT * FROM AUTOK;RSZ TULAJ

---------------------------------------------------------------R11 000022020884E1C92BF87047A48E8D41C….

SQL> SELECT A.RSZ, A.TULAJ.NEV FROM AUTOK A;RSZ TULAJ.NEV------ --------------------R11 ZOLI

SQL> CREATE TYPE CSOPREF AS TABLE OF REF SZEMELY;SQL> ALTER TYPE AUTO ADD ATTRIBUTE UTASOK CSOPREF CASCADE;

Objektum hivatkozás

Page 10: Oracle – ORDMS lehetőségek

Objektum hivatkozás

SQL> UPDATE AUTOK SET UTASOK = CSOPREF ((SELECT REF(S) FROM SZEMELYEK S WHERE S.NEV = 'ANNA'), (SELECT REF(S) FROM SZEMELYEK

S WHERE S.NEV = 'PETER'));

SQL> SELECT * FROM AUTOK;RSZ TULAJ UTASOK---------------------------------------------------------------R11 000022020 CSOPREF(0000220208447B..

SQL> SELECT A.RSZ, A.TULAJ.NEV, A.UTASOK.NEV FROM AUTOK A; hiba

SQL> SELECT P.UTASOK FROM AUTOK P;UTASOK----------------------------------------------------------------CSOPREF(00002202084…, 0000220208A49BC… )

Page 11: Oracle – ORDMS lehetőségek

SQL> SELECT * FROM TABLE (SELECT UTASOK FROM AUTOK);

COLUMN_VALUE--------------------------------------------------------------0000220208447BAB1EDDE24A5886E9C64B6BC74150000220208A49BCCF9F8874A1DB7F287F8D315B57

SQL> SELECT P.COLUMN_VALUE.NEV FROM TABLE(SELECT UTASOK FROM AUTOK) P;

COLUMN_VALUE.NEV--------------------ANNAPETER

Objektum hivatkozás

Page 12: Oracle – ORDMS lehetőségek

ADT öröklés

az öröklés nem támogatott teljes mértékben

SQL> CREATE TYPE EMBER AS OBJECT ( NEV VARCHAR2(20)

) NOT FINAL;SQL> CREATE TABLE T1 OF EMBER;SQL> INSERT INTO T1 VALUES('PETER');

SQL> CREATE TYPE DIAK UNDER EMBER ( ATLAG NUMBER(4,2)

);SQL> CREATE TABLE T2 OF DIAK;SQL> INSERT INTO T2 VALUES ('ZOLI',2.3);

Page 13: Oracle – ORDMS lehetőségek

SQL> SELECT * FROM T2;NEV ATLAG-------------------- ----------ZOLI 2.3

SQL> SELECT * FROM T1;NEV--------------------PETER

ADT öröklés

Page 14: Oracle – ORDMS lehetőségek

Metódusok

implementáció : PL/SQL, Java, C++,..típus : objektum, osztály szintmegadás : deklaráció, definíció

SQL> CREATE TYPE EMBER AS OBJECT (NEV CHAR(20),MEMBER FUNCTION GET_NEV RETURN CHAR

);

SQL> CREATE TYPE BODY EMBER AS MEMBER FUNCTION GET_NEV RETURN CHAR IS BEGIN RETURN SELF.NEV; END; END;

Page 15: Oracle – ORDMS lehetőségek

Metódusok

SQL> CREATE TABLE T1 OF EMBER;SQL> INSERT INTO T1 VALUES('PETER');SQL> SELECT P.GET_NEV() FROM T1 P;

P.GET_NEV()-----------------------------------PETER

SQL> CREATE TYPE EMBER AS OBJECT ( 2 NEV CHAR(20), 3 MEMBER FUNCTION GET_NEV RETURN CHAR, 4 MEMBER PROCEDURE SET_NEV(UN IN CHAR) 5 );

Page 16: Oracle – ORDMS lehetőségek

SQL> CREATE TYPE BODY EMBER AS MEMBER FUNCTION GET_NEV RETURN CHAR IS BEGIN RETURN SELF.NEV; END; MEMBER PROCEDURE SET_NEV (UN IN CHAR) IS BEGIN SELF.NEV := UN; END; END;SQL> CREATE TABLE T1 OF EMBER;SQL> INSERT INTO T1 VALUES('GABOR');SQL> INSERT INTO T1 VALUES(‘ANNA');

Metódusok

Page 17: Oracle – ORDMS lehetőségek

SQL> SELECT P.* FROM T1 P;NEV--------------------ANNAGABOR

SQL> SELECT REF(P) FROM T1 P;REF(P)-------------------------------------------------------------000028020992A57F97C14B4425A22249F…..000028020914FF76ACCFC4428592784D7….

SQL> SELECT DEREF(REF(P)) FROM T1 P;DEREF(REF(P))(NEV)----------------------------------------EMBER('ANNA ')EMBER('GABOR ')

Metódusok

Page 18: Oracle – ORDMS lehetőségek

DECLARE CURSOR C1 IS SELECT REF(P) FROM T1 P; E1 REF EMBER; E EMBER;BEGIN OPEN C1; LOOP FETCH C1 INTO E1; EXIT WHEN C1%NOTFOUND; SELECT DEREF(E1) INTO E FROM DUAL; DBMS_OUTPUT.PUT_LINE(‘ NEV = ' || E.GET_NEV()); -- DEREF(E1).SET_NEV(‘ZOLI’) -- hiba END LOOP; CLOSE C1;END;

SQL> SET SERVEROUTPUT ON

Page 19: Oracle – ORDMS lehetőségek

SQL> UPDATE T1 T SET T = EMBER('GABI') WHERE NEV = 'GABOR';

DECLARE CURSOR C1 IS SELECT DEREF(REF(P)) FROM T1 P FOR UPDATE; E EMBER;BEGIN OPEN C1; LOOP FETCH C1 INTO E; EXIT WHEN C1%NOTFOUND; E.SET_NEV('ZOLI'); UPDATE T1 T SET T = E WHERE CURRENT OF C1 ; END LOOP; CLOSE C1;END;

Metódusok

Page 20: Oracle – ORDMS lehetőségek

Osztály metódusok

SQL> CREATE TYPE DOBOZ AS OBJECT ( ELHOSSZ NUMBER(3), SZIN CHAR(20), STATIC FUNCTION DARAB(SZI IN CHAR) RETURN NUMBER );SQL> CREATE TABLE DOBOZOK OF DOBOZ;SQL> CREATE TYPE BODY DOBOZ AS STATIC FUNCTION DARAB (SZI IN CHAR) RETURN NUMBER IS DB NUMBER; BEGIN SELECT COUNT(*) INTO DB FROM DOBOZOK WHERE SZIN = SZI; RETURN DB; END; END;

Page 21: Oracle – ORDMS lehetőségek

SQL> INSERT INTO DOBOZOK VALUES(DOBOZ(12,'KEK'));SQL> INSERT INTO DOBOZOK VALUES(DOBOZ(43,‘ZOLD’));SQL> INSERT INTO DOBOZOK VALUES(DOBOZ(22,'KEK'));

SQL> SELECT DOBOZ.DARAB('KEK') FROM DUAL;DOBOZ.DARAB('KEK')------------------

2

Page 22: Oracle – ORDMS lehetőségek

DROP TABLE KONYVEK1;DROP TABLE KIADOK1;

CREATE TABLE KIADOK1 (KKOD NUMBER(3) PRIMARY KEY, NEV CHAR(20));CREATE TABLE KONYVEK1 (KOD NUMBER(5) PRIMARY KEY, CIM CHAR(20), AR NUMBER(3), KIAD REFERENCES KIADOK1);

DECLARE I NUMBER(5);BEGIN FOR I IN 1..1000 LOOP INSERT INTO KIADOK1 VALUES(I,'KIADO' || TO_CHAR(I)); END LOOP;END;COMMIT;

Page 23: Oracle – ORDMS lehetőségek

DECLARE I NUMBER(5);BEGIN FOR I IN 1..100000 LOOP INSERT INTO KONYVEK1 VALUES(I,'CIM' || TO_CHAR(I), NULL,MOD(I,100)+1); END LOOP;END;COMMIT;CREATE TYPE KIADO AS OBJECT ( KKOD NUMBER(3), NEV CHAR(20));CREATE TYPE KONYV AS OBJECT ( KOD NUMBER(5), CIM CHAR(20), AR NUMBER(3), KIAD REF KIADO);

Page 24: Oracle – ORDMS lehetőségek

DECLARE I NUMBER(5);BEGIN FOR I IN 1..1000 LOOP INSERT INTO KIADOK2 VALUES(KIADO(I,'KIADO' || TO_CHAR(I))); END LOOP;END;DECLARE I NUMBER(5); E REF KIADO;BEGIN FOR I IN 1..100000 LOOP SELECT REF(T) INTO E FROM KIADOK2 T WHERE T.KKOD = MOD(I,100)+1; INSERT INTO KONYVEK2 VALUES(KONYV(I, 'CIM' || TO_CHAR(I),NULL,E)); END LOOP;END;

Page 25: Oracle – ORDMS lehetőségek

SELECT TO_CHAR(SYSDATE,'HH:MI:SS') FROM DUAL;CREATE VIEW V1 AS SELECT A.NEV, B.CIM FROM KIADOK1 A, KONYVEK1 B WHERE KIAD = KKOD;SELECT COUNT(*) FROM V1;SELECT TO_CHAR(SYSDATE,'HH:MI:SS') FROM DUAL;CREATE VIEW V2 AS SELECT A.CIM CIM ,A.KIAD.NEV NEV FROM KONYVEK2 A;SELECT COUNT(*) FROM V2;SELECT TO_CHAR(SYSDATE,'HH:MI:SS') FROM DUAL;

HASONLÓ VÉGREHAJTÁSI IDŐKKB 1 SEC