v студент.код%TYPE;
* Рекорды
TYPED_Record IS RECORD (
D_Kod NUMBER(5), V1VARCHAR2(20), V2 VARCHAR2 (20));
D_Info D_Record;
D_Info.V1, D_Info.V2
SELECT * INTO D_Info FROMstud WHERE ID = 10000;
DECLARE V_RoomRecord rooms%ROWTYPE
* Объектные типы (ORDBMS – Object-Relation DataBase Management System)
Объекты может создавать пользоаптель, у которого есть привилегии – CREATE TYPE, CREATE ANY TYPE.
Создание объектного типа –
CREATE [OR REPLACE] TYPE [польз].имя_типаAS OBJECT
(список_атрибутов [,список_методов])
Декларация переменной данного объектного типа –
DECLAREV Obj_tip;
CREATE OR REPLACE TYPECar AS OBJECT(Model VARCHAR2(20),
Color VARCHAR2(20), Cost NUMBER(6) );
CREATE OR REPLACE TYPECar_Garage AS VARRAY(50) OF Car;
CREATE OR REPLACE TYPE Garage AS OBJECT (Adress VARCHAR2(100),
CarCount NUMBER, AllCar Car_Garage);
DECLАRE MyCar Car;
MyGarage Garage;
Методы
[STATIC| MEMBER] PROCEDURE<дeкларация процедуры>,
[STATIC| MEMBER] FUNCTION<дeкларация функции>
CREATE OR REPLACE TYPE Car AS OBJECT
( Model VARCHAR2(20), ColorVARCHAR2(20), Cost NUMBER(6),
MEMBER FUNCTION GetCarInfo RETURN VARCHAR2,
PRAGMA RESTRICT_REFERENCES(GetCarInfo) );
PRAGMA RESTRICT_REFERENCES – эти методы можно использовать в командах SQL!
Имплементация методов
CREATE OR REPLACE TYPE BODYCar AS
MEMBER FUNCTION GetCarInfo RETURN VARCHAR2 IS
BEGIN RETURNModell || ’ ’ || Color || ‘ ’ || Cost; ENDGetCarInfo;
END;
Ссылка: Имя_объекта.Meтод
DECLARE
Car1 Car:= Car(’Audi’, ’красный’, 30000); Car2 Car:= Car(’BMW’, ’белый’, 25000);
BEGIN
DBMS_OUTPUT.PUT_LINE(Car1.GetCarInfo); -- вывод DBMS_OUTPUT.PUT_LINE(Car2.GetCarInfo);
END;
Audi красный 30000
BMW белый 25000
Начальные данные в объект вводятся при помощи конструктора. Oracle его создает автоматически.
FUNCTION Garage(Adress IN VARCHAR2(100); CarCount IN NUMBER
AllCar INCarGarage) RETURNGarage;
ALTER TYPE[польз].имя_типа REPLACE AS OBJECT
(<описаниеOBJECT типа>);
Нужно снова описать то, что не менялось.
CREATE OR REPLACE TYPE BODY[польз].имя_типа AS| IS <список тел методов>
DROP TYPE [польз].имя_типа
DROP TYPE[польз].имя_типа FORCEудаляет даже когда имеется ссылка на объект
DROP TYPE BODY[польз].имя_типа
Объекты используются в БД как Objekt-столбец или Objekt-строка.
* Objekt-столбец
CREATE TABLE Cars (Key NUMBER PRIMARY KEY, OneCar Car);
INSERT INTO CarsVALUES(1, Car(’Skoda’, ’красный’, 15000 ) );
SELECT * FROM Cars;
KEY ONECAR(MODEL, COLOR, COST)
1 CAR(’Skoda’, ’красный’, 15000)
Objekt-строка занимает в таблице всю строку.
CREATE TABLE CarRowsOF Car;
INSERT INTO CarRows VALUES (Car(’Skoda’, ’красный’, 15000 ) );
SELECT * FROMCarsRows;
MODEL COLOR COST
Skoda красный 15000
Объекты в SQL-командах