C CAR; Id NUMBER;
BEGIN
SELECT MAX(Key) INTOId FROMCars;
SELECTOneCar INTO CFROM Cars WHERE Key=Id;
C.Model:=’BMW’;
C.Color:=’черный’;
INSERT INTO Cars VALUES (Id+1, C);
END;
SELECT * FROM Cars;
KEY ONECAR(MODEL, COLOR, COST)
------ ---------------------------------------------
1 CAR(’Skoda’, ’Piros’, 2000000)
2 CAR(’Lada’, ’Zцld’, 1200000 )
3 CAR(’BMW’,’Fekete’, 1200000)
В SQL-командах ссылка на атрибуты или методы объекта осуществляется через alias-имя.
SELECT C.OneCar.ModelFROM Cars C;
SELECT C.OneCar.GetCarInfo() FROM Cars C;
В Objekt-строке можно ссылаться, как на обычный столбец –
SELECT C.OneCar.GetCarInfo()FROM CarsRows C;
* Составные конструкции (COLLECTIONS)
Индексные таблицы (Index-by tables) - таблицы PL/SQL
Вложенные таблицы (Nested tables) - таблицы PL/SQL, можно хранить в табл. БД
Массивы (переменной длины)
* 1). Индексные таблицы
TYPE тип_таблицы IS TABLE OF тип INDEX BY BINARY_INTEGER;
Имеет два столбца – KEY (ключ) VALUE (значение), INDEX BY BINARY_INTEGER –как ключ,
(-2147483647...+ 2147483647),
TYPEt_CharacterTable IS TABLE OF VARCHAR2(10) INDEX BY BINARY_INTEGER;
V_Characters t_CharacterTable;
DECLARE
TYPE t_NameTable IS TABLE OF Студент.ФИО%TYPE
INDEX BY BINARY_INTEGER;
TYPE t_DateTable IS TABLE OF DATE
INDEX BY BINARY_INTEGER;
V_ Names t_NameTable; V_ Dates t_DateTable;
BEGIN
V_ Names(1):= ’Иван’;
V_ Dates(-4):= SYSDATE - 1;
END;
SET SERVEROUTPUT ON
DECLARE
TYPEt_StudentTable IS TABLE OF Студент%ROWTYPE
INDEX BY BINARY_INTEGER;
V_Student t_StudentTable;
BEGIN
SELECT * INTOV_ Student (10001)
FROM Студент WHERE id = 10001;
V_ Student (10001). ФИО := 'Сидор';
DBMS_OUTPUT.PUT_LINE(V_ Student(10001).ФИО);
END;
2). Вложенные таблицы – два столбца KEY, VALUE
Может быть столбцом в таблице БД
TYPE имя IS TABLE OFтип
DECLARE
K INTEGER;
TYPE Num_Tab IS TABLE OF NUMBER;
Tab_1 Num_Tab :=Num_Tab(-1);
Tab_2 Num_Tab :=Num_Tab(1, 2, 3, 5, 7);
Tab_3 Num_Tab :=Num_Tab( );
BEGIN
Tab_1(1):=12345;
FOR K IN 1..5LOOP DBMS_OUTPUT.PUT(Tab_2(K) || ‘ ‘); END LOOP;
END;
1 2 3 5 7
При инициализации Tab_1(1)=( -1),
Tab_2(1)=(1), Tab_2(2)=(2), Tab_2(3)=(3), Tab_2(4)=(5), Tab_2(15=(7);
3). Массивы. Индексы начинаются с 1
TYPEтипIS VARRAY максимальный размерOFтип_элементов[NOT NULL];
TYPE Num_List IS VARRAY(20) OF NUMBER(3)NOT NULL;
TYPE Car_ListIS VARRAY (100) OF CarArr%ROWTYPE;
TYPE Car_ArrIS VARRAY (20) OF Car;