Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaLídia Borbélyné Megváltozta több, mint 10 éve
1
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 MUNKA LEIRASFELELOS(NEV, TEL) -------------------------------------------------------------------------------- PROBA MUNKASZEMELY('PETER', '123')
2
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
3
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) nem INSERT INTO SZEMELYEK VALUES(SZEMELY(NULL,NULL))ok
4
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;
5
SELECT kifejezések szabadabb használata SQL> SELECT LEIRAS, (SELECT MAX(FIZETES) FROM MUNKA) FROM MUNKA;ok SQL> SELECT MAX(SELECT FIZETES FROM MUNKA) FROM DUAL;hiba SQL> SELECT MAX(AFIZ) FROM (SELECT LEIRAS, AVG(FIZETES) AFIZ FROM MUNKA GROUP BY LEIRAS);ok SQL> INSERT INTO MUNKA VALUES ('PROBA',NULL, (SELECT MAX(FIZETES) + 1 FROM MUNKA)); 1 sor létrejött.ok SQL> CREATE ASSERTION A1 CHECK (SELECT MAX(FIZETES) FROM MUNKA) > 100);hiba SQL> UPDATE MUNKA SET FIZETES = (SELECT MIN(FIZETES) FROM MUNKA) WHERE FIZETES < 150;ok
6
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;
7
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 1 NEMET 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
8
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
9
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
10
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 TULAJUTASOK --------------------------------------------------------------- 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… )
11
SQL> SELECT * FROM TABLE (SELECT UTASOK FROM AUTOK); COLUMN_VALUE -------------------------------------------------------------- 0000220208447BAB1EDDE24A5886E9C64B6BC7415 0000220208A49BCCF9F8874A1DB7F287F8D315B57 SQL> SELECT P.COLUMN_VALUE.NEV FROM TABLE(SELECT UTASOK FROM AUTOK) P; COLUMN_VALUE.NEV -------------------- ANNA PETER Objektum hivatkozás
12
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);
13
SQL> SELECT * FROM T2; NEV ATLAG -------------------- ---------- ZOLI 2.3 SQL> SELECT * FROM T1; NEV -------------------- PETER ADT öröklés
14
Metódusok implementáció : PL/SQL, Java, C++,.. típus : objektum, osztály szint megadá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;
15
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 );
16
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; SQL> CREATE TABLE T1 OF EMBER; SQL> INSERT INTO T1 VALUES('GABOR'); SQL> INSERT INTO T1 VALUES(‘ANNA'); Metódusok
17
SQL> SELECT P.* FROM T1 P; NEV -------------------- ANNA GABOR 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
18
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
19
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
20
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;
21
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
22
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;
23
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);
24
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;
25
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ŐK KB 1 SEC
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.