1 / 25

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',

chill
Download Presentation

Oracle – ORDMS lehetőségek

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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. Alias név használata kötelező objektum attribútum hivatkozásoknál SQL> SELECT * FROM MUNKA M WHERE M.FELELOS.NEV LIKE 'PETER%'; SQL> SELECT M.FELELOS.NEV FROM MUNKA M; FELELOS.NEV -------------------- PETER 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. Objektum tábla SQL> CREATE TABLE SZEMELYEK OF SZEMELY; 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. Tábla típus SQL> INSERT INTO MUNKA VALUES ('UJABB', SZEMELY('KATI','3462'),301, NYELVEK( NYELV('ANGOL',1),NYELV('NEMET',2))); SQL> SELECT * FROM TABLE(SELECT NYSZINT FROM MUNKAWHERE 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';

  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) ------------------------------------------------------------------- ANNA0000280209447BAB1EDDE24A5886E9 C64B6BC741586786A61E89134C158795B6AE6 A5152000040C5820000

  9. Objektum hivatkozás SQL> INSERT INTO AUTOK VALUES('R11',(SELECT REF(P) FROM SZEMELYEK P WHERE P.NEV='ZOLI')); SQL> SELECT * FROM AUTOK; RSZTULAJ --------------------------------------------------------------- R11000022020884E1C92BF87047A48E8D41C…. 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;

  10. 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… )

  11. Objektum hivatkozás 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

  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. ADT öröklés SQL> SELECT * FROM T2; NEV ATLAG -------------------- ---------- ZOLI 2.3 SQL> SELECT * FROM T1; NEV -------------------- PETER

  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; 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. Metódusok 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');

  17. Metódusok 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 ')

  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. Metódusok 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;

  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; 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

More Related