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