24
SQL valodas paplašinājums relāciju – objektu datu bāzei Funkcijas un operatori, kurus izmanto objektu SQL vaicājumos 1. Funkcija VALUE () 2. Funkcija TABLE() 3. Operators SUBMULTISET [OF] 4. Operators [NOT] MEMBER [OF] 5. Operators IS [NOT] A SET 6. Funkcija CARDINALITY() 7. Funkcija [ALL] vai [DISTINCT] MULTISET EXCEPT() 8. Funkcija [ALL] vai [DISTINCT] MULTISET INTERSECT 9. Funkcija [ALL] vai [DISTINCT] MULTISET UNION() 10. Funkcija POWERMULTISET() 11. Funkcija POWERMULTISET_BY_CARDINALITY(0 12. Funkcija SET() 13. Funkcijas TABLE() izmantošana, lietojot kā parametru apakšvaicājumu 14. Kursora izteiksmes CURSOR izmantošana 15. Funkcijas CAST un MULTISET 16. REF() 17. DEREF() 18. IS OF TYPE() 19. SYS_TYPEID() 5. TREAT() 1

SQL valodas paplašinājums relāciju – objektu datu bāzei · Web viewFAK_NUM NUMBER, KAT_1 Personas_t, KAT_2 Personas_t) nested table KAT_1 store as Katedra_1

Embed Size (px)

Citation preview

Page 1: SQL valodas paplašinājums relāciju – objektu datu bāzei · Web viewFAK_NUM NUMBER, KAT_1 Personas_t, KAT_2 Personas_t) nested table KAT_1 store as Katedra_1

SQL valodas paplašinājums relāciju – objektu datu bāzeiFunkcijas un operatori, kurus izmanto objektu SQL vaicājumos

1. Funkcija VALUE ()2. Funkcija TABLE()3. Operators SUBMULTISET [OF]4. Operators [NOT] MEMBER [OF]5. Operators IS [NOT] A SET6. Funkcija CARDINALITY()7. Funkcija [ALL] vai [DISTINCT] MULTISET EXCEPT()8. Funkcija [ALL] vai [DISTINCT] MULTISET INTERSECT9. Funkcija [ALL] vai [DISTINCT] MULTISET UNION()10. Funkcija POWERMULTISET() 11. Funkcija POWERMULTISET_BY_CARDINALITY(0 12. Funkcija SET() 13. Funkcijas TABLE() izmantošana, lietojot kā parametru apakšvaicājumu14. Kursora izteiksmes CURSOR izmantošana15. Funkcijas CAST un MULTISET16. REF() 17. DEREF()18. IS OF TYPE()19. SYS_TYPEID()5. TREAT()

1

Page 2: SQL valodas paplašinājums relāciju – objektu datu bāzei · Web viewFAK_NUM NUMBER, KAT_1 Personas_t, KAT_2 Personas_t) nested table KAT_1 store as Katedra_1

Tabula ar divām objektu kolekciju kolonām

create type Persona_t AS OBJECT(NUM NUMBER,VAR varchar2(10),UZV varchar2(10));

create type Personas_t AS TABLE OF Persona_t;

create table Studenti(FAK_NUM NUMBER,KAT_1 Personas_t,KAT_2 Personas_t)nested table KAT_1 store as Katedra_1nested table KAT_2 store as Katedra_2;

insert into STUDENTI values(10, Personas_t(Persona_t(1, 'Rasma', 'Koks'), Persona_t(2, 'Anita', 'Zars'), Persona_t(3, 'Juris', 'Celms')), Personas_t(Persona_t(4, 'Liene', 'Lapa'), Persona_t(2, 'Anita', 'Zars'), Persona_t(5, 'Varis', 'Ozols')));insert into STUDENTI values (20, Personas_t(Persona_t(6, 'Inese', 'Sakne'), Persona_t(7, 'Andris', 'Liepa')), Personas_t(Persona_t(8, 'Rota', 'Alksnis')));

2

Page 3: SQL valodas paplašinājums relāciju – objektu datu bāzei · Web viewFAK_NUM NUMBER, KAT_1 Personas_t, KAT_2 Personas_t) nested table KAT_1 store as Katedra_1

Kat_2

Kat_2

1. Operators SUBMULTISET [OF]Nosaka vai viena kolekcija ir citas kolekcijas apakškopa.

SELECT A.FAK_NUMFROM STUDENTI AWHERE NOT(A.KAT_1 SUBMULTISET OF A.KAT_2); FAK_NUM------------------------ 10 20

2. Operators [NOT] MEMBER [OF]Nosaka vai elements (objekts) ir kolekcijas loceklis.

SELECT A.FAK_NUMFROM STUDENTI AWHERE PERSONA_T(4, 'Liene', 'Lapa') MEMBER OF KAT_2; FAK_NUM-------------------- 10

Kat_1

3

Page 4: SQL valodas paplašinājums relāciju – objektu datu bāzei · Web viewFAK_NUM NUMBER, KAT_1 Personas_t, KAT_2 Personas_t) nested table KAT_1 store as Katedra_1

3. Operators IS [NOT] A SETNosaka vai kolekcija ir [nav] veidota no unikāliem elementiem.

SELECT A.FAK_NUMFROM STUDENTI AWHERE A.KAT_1 IS NOT A SET;

4. Funkcija CARDINALITY Atgriež masīva vai kolekcijas elementu skaitu.

SELECT CARDINALITY(A.KAT_1)FROM STUDENTI A;

CARDINALITY(A.KAT_1)-------------------------------------- 3 2

Kat_1

Kat_1

Kat_1

4

Page 5: SQL valodas paplašinājums relāciju – objektu datu bāzei · Web viewFAK_NUM NUMBER, KAT_1 Personas_t, KAT_2 Personas_t) nested table KAT_1 store as Katedra_1

Kat_2

5. Funkcija [ALL] [DISTINCT] MULTISET EXCEPTAnalizē divas kolekcijas un atgriež kolekciju ar elementiem, kuri ir pirmajā kolekcijā, bet nav otrajā. Kolekciju elementu tipiem jābūt vienādiem. SELECT A.KAT_1 MULTISET EXCEPT A.KAT_2FROM STUDENTI A;

A.KAT_1 MULTISET EXCEPTA.KAT_2(NUM, VAR, UZV)-----------------------------------------------------------------------------------PERSONAS_T (PERSONA_T(1, 'Rasma', 'Koks'), PERSONA_T(3, 'Juris', 'Celms'))

RezultātsKat_1

5

Page 6: SQL valodas paplašinājums relāciju – objektu datu bāzei · Web viewFAK_NUM NUMBER, KAT_1 Personas_t, KAT_2 Personas_t) nested table KAT_1 store as Katedra_1

Kat_1RezultātsKat_2

6. Funkcija [ALL] [DISTINCT] MULTISET INTERSECTSalīdzina divas kolekcijas un atgriež kolekciju ar elementiem, kuri ir gan pirmajā tabulā, gan otrajā. Tipiem jābūt vienādiem.

SELECT ALL A.KAT_1 MULTISET INTERSECT A.KAT_2FROM STUDENTI A;

A.KAT_1 MULTISET INTERSECT A.KAT_2(NUM, VAR, UZV)-------------------------------------------------------------------------------------PERSONAS_T(PERSONA_T(2, 'Anita', 'Zars'))PERSONAS_T()

6

Page 7: SQL valodas paplašinājums relāciju – objektu datu bāzei · Web viewFAK_NUM NUMBER, KAT_1 Personas_t, KAT_2 Personas_t) nested table KAT_1 store as Katedra_1

7. Funkcija [ALL] [DISTINCT] MULTISET UNIONAtgriež divu iekļauto tabulu elementus. Gan pirmās tabulas, gan otrās tabulas elementus. Tipiem jābūt vienādiem.

SELECT A.KAT_1 MULTISET UNION A.KAT_2FROM STUDENTI A;

A.KAT_1MULTISETUNIONA.KAT_2(NUM, VAR, UZV)---------------------------------------------------------------------------------------PERSONAS_T(PERSONA_T(1, 'Rasma', 'Koks'),

PERSONA_T(2, 'Anita', 'Zars'), PERSONA_T(3, 'Juris', 'Celms'),

PERSONA_T(4, 'Liene', 'Lapa'), PERSONA_T(2, 'Anita', 'Zars'), PERSONA_T(5, 'Varis', 'Ozols'))

7

Page 8: SQL valodas paplašinājums relāciju – objektu datu bāzei · Web viewFAK_NUM NUMBER, KAT_1 Personas_t, KAT_2 Personas_t) nested table KAT_1 store as Katedra_1

8. Funkcija POWERMULTISET Veido visas iespējamās apakškopas no dotās kolekcijas pa 1, 2, 3, ... objektiem.

SELECT * FROM TABLE(POWERMULTISET(PERSONAS_T( PERSONA_T(1, 'Rasma', 'Koks'), PERSONA_T(2, 'Anita', 'Zars'), PERSONA_T(3, 'Juris', 'Celms'))));

COLUMN_VALUE(NUM, VAR, UZV)-------------------------------------------------------------------------------------------PERSONAS_T (PERSONA_T(1, 'Rasma', 'Koks'))PERSONAS_T (PERSONA_T(2, 'Anita', 'Zars'))PERSONAS_T (PERSONA_T(3, 'Juris', 'Celms'))

PERSONAS_T (PERSONA_T(1,'Rasma', 'Koks'), PERSONA_T(2, 'Anita', 'Zars'))PERSONAS_T (PERSONA_T(1,'Rasma','Koks'), PERSONA_T(3,'Juris', 'Celms'))PERSONAS_T (PERSONA_T(2, 'Anita', 'Zars'), PERSONA_T(3, 'Juris', 'Celms'))

PERSONAS_T (PERSONA_T(1, 'Rasma', 'Koks'), PERSONA_T(2, 'Anita', 'Zars'), PERSONA_T(3, 'Juris', 'Celms'))

8

Page 9: SQL valodas paplašinājums relāciju – objektu datu bāzei · Web viewFAK_NUM NUMBER, KAT_1 Personas_t, KAT_2 Personas_t) nested table KAT_1 store as Katedra_1

SELECT B.* FROM STUDENTI A, TABLE(POWERMULTISET(A.KAT_1)) BWHERE A.FAK_NUM =20;

COLUMN_VALUE(NUM, VAR, UZV)------------------------------------------------------------------------------------------PERSONAS_T (PERSONA_T(6, 'Inese', 'Sakne'))PERSONAS_T (PERSONA_T(7, 'Andris', 'Liepa'))

PERSONAS_T (PERSONA_T(6,'Inese','Sakne'), PERSONA_T(7,'Andris', 'Liepa'))

9

Page 10: SQL valodas paplašinājums relāciju – objektu datu bāzei · Web viewFAK_NUM NUMBER, KAT_1 Personas_t, KAT_2 Personas_t) nested table KAT_1 store as Katedra_1

9. Funkcija POWERMULTISET_BY_CARDINALITY Veido apakškopas ar norādīto kardinalitāti no dotās kolekcijas.

SELECT * FROM TABLE(POWERMULTISET_BY_CARDINALITY(PERSONAS_T( PERSONA_T(1, 'Rasma', 'Koks'), PERSONA_T(2, 'Anita', 'Zars'), PERSONA_T(3, 'Juris', 'Celms')), 2));

COLUMN_VALUE(NUM, VAR, UZV)--------------------------------------------------------------------------------PERSONAS_T (PERSONA_T(1,'Rasma', 'Koks'), PERSONA_T(2, 'Anita', 'Zars'))

PERSONAS_T (PERSONA_T(1,'Rasma','Koks'), PERSONA_T(3,'Juris', 'Celms'))

PERSONAS_T (PERSONA_T(2, 'Anita', 'Zars'), PERSONA_T(3, 'Juris', 'Celms'))

10

Page 11: SQL valodas paplašinājums relāciju – objektu datu bāzei · Web viewFAK_NUM NUMBER, KAT_1 Personas_t, KAT_2 Personas_t) nested table KAT_1 store as Katedra_1

Kat_2Kat_1

10. Funkcija SET Atmet dublējošos locekļus kolekcijās. SELECT SET(C.REZ)FROM (

SELECT A.KAT_1 MULTISET UNION A.KAT_2 AS REZ FROM STUDENTI A) C;

SET(C.REZ)(NUM, VAR, UZV)----------------------------------------------------------------------------------------------------------PERSONAS_T(PERSONA_T(1, 'Rasma', 'Koks'), PERSONA_T(2, 'Anita', 'Zars'), PERSONA_T(3, 'Juris', 'Celms'), PERSONA_T(4, 'Liene', 'Lapa'), PERSONA_T(5, 'Varis', 'Ozols'))PERSONAS_T(PERSONA_T(6, 'Inese', 'Sakne'), PERSONA_T(7,'Andris',Liepa'), PERSONA_T(8, 'Rota', 'Alksnis'))

11. Funkcijas TABLE izmantošana, lietojot kā parametru apakšvaicājumu

SELECT B.*FROM TABLE(SELECT A.KAT_1 FROM STUDENTI A) B;

NUM VAR UZV-------------------------------------- 1 Rasma Koks 2 Anita Zars 3 Juris Celms

Rezultāts

11

Page 12: SQL valodas paplašinājums relāciju – objektu datu bāzei · Web viewFAK_NUM NUMBER, KAT_1 Personas_t, KAT_2 Personas_t) nested table KAT_1 store as Katedra_1

12. Kursora izteiksmes CURSOR izmantošana CURSOR izteiksme atgriež iekļautu kursoru (nested cursor). To var iekļaut kā REF CURSOR tipa mainīgo funkcijas argumentos.

SELECT A.FAK_NUM, CURSOR(SELECT * FROM TABLE(A.KAT_1)) AS KURSORS_1,CURSOR(SELECT * FROM TABLE(A.KAT_2)) AS KURSORS_2FROM Studenti AWHERE A.FAK_NUM = 10;

FAK_NUM KURSORS_1 KURSORS_2-----------------------------------------------------------------------------------------10 CURSOR STATEMENT : 2 CURSOR STATEMENT : 3

CURSOR STATEMENT : 2 NUM VAR UZV--------------------------------------- 1 Rasma Koks 2 Anita Zars 3 Juris Celms

CURSOR STATEMENT : 3 NUM VAR UZV--------------------------------------- 4 Liene Lapa 2 Anita Zars 5 Varis Ozols

12

Page 13: SQL valodas paplašinājums relāciju – objektu datu bāzei · Web viewFAK_NUM NUMBER, KAT_1 Personas_t, KAT_2 Personas_t) nested table KAT_1 store as Katedra_1

13. Pārveidojumu funkcijas CAST izmantošana

CAST converts one built-in datatype or collection-typed value into another:

1) built-in datatype;2) collection-typed value.

Viena datu tipa pārveidošana citā

select CAST(SUBSTR(A.PERS_KODS,1,6) as number(6)) from CILVEKI A;

CAST(SUBSTR(A.PERS_KODS,1,6) as NUMBER(6))-------------------------------------------------------------------------------------- 120381 220985 121284 231172

13

Page 14: SQL valodas paplašinājums relāciju – objektu datu bāzei · Web viewFAK_NUM NUMBER, KAT_1 Personas_t, KAT_2 Personas_t) nested table KAT_1 store as Katedra_1

You can cast an unnamed operand (such as a date or the result set of a subquery) or a named collection (such as a varray or a nested table) into a type-compatible datatype or named collection. The type_name must be the name of a built-in datatype or collection type and the operand must be a built-in datatype or must evaluate to a collection value.For the operand, expr can be either a built-in datatype, a collection type, or an instance of an AnyData type. If expr is an instance of an AnyData type, CAST will try to extract the value of the AnyData instance and return it if it matches the cast target type, otherwise, null will be returned. MULTISET informs Oracle Database to take the result set of the subquery and return a collection value.

Iebūvēto datu tipu pārveidojumi

BINARY_FLOAT, BINARY_DOUBLE

CHAR, VARCHAR2 NUMBER

DATETIME INTERVAL RAW

ROWID, UROWID

NCHAR, NVARCHAR2

BINARY_FLOAT, BINARY_DOUBLE

X X X — — — X

CHAR, VARCHAR2

X X X X X X —

NUMBER X X X — — — X

DATE, TIMESTAMP, INTERVAL

— X — X — — —

RAW — X — — X — —

ROWID, UROWID — X — — — X —

NCHAR, NVARCHAR2

X — X X X X X

If you want to cast a named collection type into another named collection type, then the elements of both collections must be of the same type.If the result set of subquery can evaluate to multiple rows, then you must specify the MULTISET keyword. The rows resulting from the subquery form the elements of the collection value into which they are cast. Without the MULTISET keyword, the subquery is treated as a scalar subquery.

SELECT CAST('22-10-1997' AS TIMESTAMP WITH LOCAL TIME ZONE) FROM dual;

SELECT product_id, CAST(ad_sourcetext AS VARCHAR2(30))FROM print_media;

14

Page 15: SQL valodas paplašinājums relāciju – objektu datu bāzei · Web viewFAK_NUM NUMBER, KAT_1 Personas_t, KAT_2 Personas_t) nested table KAT_1 store as Katedra_1

2 31

1

2

3

14. Kolekcijas izveidošana no elementiem vai citas kolekcijas

SELECT B.NUM FROM Studenti A, TABLE(A.KAT_1) B;

NUM--------------- 1 2 3

CREATE TYPE Numurs_t as OBJECT(NUM NUMBER);

CREATE TYPE Numuri_t as TABLE OF Numurs_t;

SELECT CAST(MULTISET( SELECT B.NUM FROM Studenti A, TABLE(A.KAT_1) B) as Numuri_t) asKOLEKCIJAFROM DUAL;

KOLEKCIJA(NUM)-----------------------------------------------------------------------NUMURI_T(Numurs_t(1), Numurs_t(2), Numurs_t(3))

15

Page 16: SQL valodas paplašinājums relāciju – objektu datu bāzei · Web viewFAK_NUM NUMBER, KAT_1 Personas_t, KAT_2 Personas_t) nested table KAT_1 store as Katedra_1

16

Page 17: SQL valodas paplašinājums relāciju – objektu datu bāzei · Web viewFAK_NUM NUMBER, KAT_1 Personas_t, KAT_2 Personas_t) nested table KAT_1 store as Katedra_1

Collection Examples

The CAST examples that follow build on the cust_address_typ found in the sample order entry schema, oe.CREATE TYPE address_book_t AS TABLE OF cust_address_typ;

CREATE TYPE address_array_t AS VARRAY(3) OF cust_address_typ;

CREATE TABLE cust_address ( custno NUMBER, street_address VARCHAR2(40), postal_code VARCHAR2(10), city VARCHAR2(30), state_province VARCHAR2(10), country_id CHAR(2));

CREATE TABLE cust_short (custno NUMBER, name VARCHAR2(31));

CREATE TABLE states (state_id NUMBER, addresses address_array_t);

This example casts a subquery:

SELECT s.custno, s.name, CAST(MULTISET(SELECT ca.street_address, ca.postal_code, ca.city, ca.state_province, ca.country_id FROM cust_address ca WHERE s.custno = ca.custno) AS address_book_t)FROM cust_short s;

CAST converts a varray type column into a nested table:

SELECT CAST(s.addresses AS address_book_t) FROM states s WHERE s.state_id = 111;

17

Page 18: SQL valodas paplašinājums relāciju – objektu datu bāzei · Web viewFAK_NUM NUMBER, KAT_1 Personas_t, KAT_2 Personas_t) nested table KAT_1 store as Katedra_1

18

Page 19: SQL valodas paplašinājums relāciju – objektu datu bāzei · Web viewFAK_NUM NUMBER, KAT_1 Personas_t, KAT_2 Personas_t) nested table KAT_1 store as Katedra_1

The following objects create the basis of the example that follows:CREATE TABLE projects (employee_id NUMBER, project_name VARCHAR2(10));

CREATE TABLE emps_short (employee_id NUMBER, last_name VARCHAR2(10));

CREATE TYPE project_table_typ AS TABLE OF VARCHAR2(10); The following example of a MULTISET expression uses these objects:

SELECT e.last_name, CAST(MULTISET(SELECT p.project_name FROM projects p WHERE p.employee_id = e.employee_id ORDER BY p.project_name) AS project_table_typ)FROM emps_short e;

19