В который раз не знаю, что писать в заголовок поста. Ну, давай начнем так: "реализация ООП впервые появилась в РСУБД Oracle 9g".
1. Создаем объектный тип OBJECT_TEST1
1. Создаем объектный тип OBJECT_TEST1
create or replace type OBJECT_TEST1 as object ( id number(7), name varchar2(50), effective_start_date date, effective_end_date date, value number, inc_value number, value_sign number(1), constructor function object_test1( p_value number ) return self as result, member function get_inc_value return number, member function get_sign_value return number )
create or replace type body OBJECT_TEST1 as constructor function object_test1( p_value number ) return self as result is begin self.value := p_value; self.inc_value := p_value + 1; self.value_sign := sign(p_value); self.id := object_test1_s.nextval; self.effective_start_date := sysdate; self.effective_end_date := to_date('31.12.4212', 'DD.MM.YYYY'); return; end object_test1; -- member function get_inc_value return number is begin return self.inc_value; end get_inc_value; -- member function get_sign_value return number is begin return self.value_sign; end get_sign_value; end;
2. Создаем таблицу, в которой будут храниться объекты и некоторые вспомогательные штуки вроде последовательности. Обращаем внимание на лаконичный синтаксис описания таблицы, а также на то, что набор полей после создания соответствует набору переменных объектного типа.
create table test1_objects of object_test1 / create sequence object_test1_s start with 1 increment by 1 maxvalue 99999999999 nocache /3. Создаем API для нашей таблицы.
create or replace package OBJECT_TEST1_PKG is procedure insert_object(p_object object_test1); procedure update_object(p_old object_test1, p_new object_test1); procedure delete_object(p_object object_test1); end OBJECT_TEST1_PKG;
create or replace package body OBJECT_TEST1_PKG is procedure insert_object(p_object object_test1) is begin insert into test1_objects values (p_object); end insert_object; -- procedure update_object(p_old object_test1, p_new object_test1) is begin update test1_objects tob set tob.name = p_new.name where tob.id = p_old.id; end update_object; procedure delete_object(p_object object_test1) is begin delete from test1_objects tob where tob.id = p_object.id; end delete_object; end OBJECT_TEST1_PKG;4. Используем API
declare l_object object_test1; begin l_object := new object_test1(1); object_test1_pkg.insert_object(l_object); end;Результат:
SQL> select * from test1_objects 2 / ID NAME EFFECTIVE_START_DATE EFFECTIVE_END_DATE VALUE INC_VALUE VALUE_SIGN -- ---- -------------------- ------------------ ----- --------- ---------- 3 15.06.2013 0:13:24 31.12.4212 1 2 1 SQL>
Комментариев нет :
Отправить комментарий