Оракул, создавший объект

Обновлено: 21.11.2024

Операторы UNION, INTERSECT, MINUS и сортировка результатов запроса

Функция Oracle DECODE

Функция Oracle INSTR() с примерами

Функция Oracle TO_CHAR()

Числовые функции (математические функции)

Функции персонажа

Разные функции

Агрегированные функции

Функции даты и времени

Запросы на присоединение к Oracle

ГРУППИРОВКА ПО ЗАПРОСАМ, ПОДЗАПРОСЫ

Функции CUBE, ROLLUP

Oracle DML (ВСТАВИТЬ, ОБНОВИТЬ, УДАЛИТЬ.)

DDL Oracle (СОЗДАНИЕ, ИЗМЕНЕНИЕ, УДАЛЕНИЕ)

ЗАПИСАТЬСЯ, ОТКАТ, ТОЧКА СОХРАНЕНИЯ

Язык управления данными (GRANT, REVOKE)

Значения ПО УМОЛЧАНИЮ

Отключение ограничений

Отключение и включение

Проверка различных ограничений

Просмотреть информацию об ограничениях

Работа с датами

Представления Oracle

Последовательности Oracle

Синонимы Oracle

Индексы и кластеры

Изменение таблиц разделов

Удаление разделов

Объединение разделов

Разделение разделов

Объединение разделов

Объекты и типы объектов Oracle

ОБЪЕКТЫ И ТИПЫ ОБЪЕКТОВ ORACLE

Типы объектов Oracle — это определяемые пользователем типы данных, которые позволяют моделировать сложные объекты реального мира, такие как клиенты и заказы на покупку, как единые объекты — «объекты» — в базе данных.

Объектная технология Oracle — это уровень абстракции, основанный на реляционной технологии Oracle. Новые типы объектов могут быть созданы из любых встроенных типов баз данных и/или любых ранее созданных типов объектов, ссылок на объекты и типов коллекций. Метаданные для определяемых пользователем типов хранятся в схеме, доступной для SQL, PL/SQL, Java и других опубликованных интерфейсов.

Типы объектов и связанные с ними объектно-ориентированные функции, такие как массивы переменной длины и вложенные таблицы, обеспечивают высокоуровневые способы организации данных в базе данных и доступа к ним. Под слоем объектов данные по-прежнему хранятся в столбцах и таблицах, но вы можете работать с данными с точки зрения реальных сущностей — например, клиентов и заказов на покупку — которые делают данные значимыми. Вместо того чтобы думать о столбцах и таблицах при запросе к базе данных, вы можете просто выбрать клиента.

Например, вы используете адрес, который состоит из улицы, населенного пункта, города, пин-кода, страны во многих таблицах. Вы определяете эти столбцы в каждой таблице отдельно, например

создать таблицу emp (номер emp(5),
Имя varchar2(20),
Номер продажи(10,2),
Улица varchar2(20),
Местность varchar2(20),
Город varchar2(20),
Пин-код varchar2(7),
Страна varchar2(20));

создать таблицу клиентов (код клиента(5),
имя varchar2(20),
номер бала(10,2),
улица varchar2(20),
населенный пункт varchar2(20),
Город varchar2(20),
Пин-код varchar2(7),
Страна varchar2(20));

Вместо того, чтобы снова и снова определять столбцы адресов в каждой таблице, вы можете определить тип данных адреса, а затем использовать этот определенный пользователем тип данных во всех таблицах.

Определение типа объекта

В следующем примере создается тип объекта

создать адрес типа как объект (
Улица varchar2(20),
Местность varchar2(20),
Город varchar2(20),
Пин-код varchar2(7), < br />Страна varchar2(20));

Теперь вы можете использовать этот тип данных при определении таблиц emp и customer подобным образом

создать таблицу emp (empno number(5),
Name varchar2(20),
Sal number(10,2),
Emp_addr address);

создать таблицу клиентов (custcode number(5),
Name varchar2(20),
Bal number(10,2),
Cust_addr address);

Вставка записей в таблицы с объектными типами данных.

Чтобы вставить запись в таблицу emp, вы должны указать следующий оператор.

вставить в значения emp (101,'Сами',2000,
address('ACGaurds Road',
'ACGaurds','Hyd','500004','Индия');

Чтобы обновить город сотрудника номер 101, вы должны указать следующее заявление об обновлении

обновить emp e set e.emp_addr.city=’Bombay’
where e.empno=101;

Чтобы выбрать строки из таблицы emp, введите следующую инструкцию.

выберите * из emp;

Чтобы выбрать только empno,name и city, введите следующее утверждение.

выберите e.empno, e.name, e.emp_addr.city из emp e;

Объекты с функциями-членами

Вы также можете создавать объекты с функциями-членами, определенными внутри объекта.

Например, следующий оператор создает объект с функциями-членами

создать тип stud как объект (
математическое число (3),
физическое число (3),
химическое число (3),
функция-член, чтобы вернуть число, < br />результат функции-члена возвращает varchar2);

Вы должны определить ФУНКЦИЮ ЧЛЕНА в ТЕЛЕ ОБЪЕКТА. Следующий оператор создает тело объекта STUD

создать тип body stud как (
функция-член, возвращаемый номер
begin
return(maths+phy+chem);
end;

Результат функции-члена возвращает varchar2
t number(3);
начать
t:=maths+phy+chem;
if maths = 150 and t Data Loader — это простой, но мощный инструмент для
экспорта и импорта данных между многими распространенными форматами баз данных

Инструмент для загрузки данных в Oracle E-Business Suite R12 / Oracle Apps с использованием макросов и форм, записи и воспроизведения

Объектно-ориентированное программирование особенно подходит для создания многократно используемых компонентов и сложных приложений. Они организованы вокруг «объектов», а не «действий», т. е. программы предназначены для работы и взаимодействия со всем объектом, а не с одним действием. Эта концепция позволяет программисту заполнять детали и управлять ими на уровне объектов объекта.

На рисунке ниже показан пример типа объекта, в котором банковский счет рассматривается как сущность объекта. Атрибуты объекта включают вещи, которые содержат некоторые значения атрибутов, например, в банковском счете; это номер счета, банковский баланс и т. д., в то время как методы объекта описывают такие вещи, как расчет процентной ставки, создание банковской выписки и т. д., что требует выполнения определенного процесса.

В PL/SQL объектно-ориентированное программирование основано на типах объектов.

Тип объекта может представлять любую сущность реального мира. В этой главе мы обсудим другие типы объектов.

В этом уроке вы узнаете,

Компоненты типов объектов

Тип объекта PL/SQL состоит в основном из двух компонентов.

Атрибуты

Атрибуты — это столбец или поле, в котором хранятся данные. Каждый атрибут будет сопоставлен с типом данных, определяющим тип обработки и хранения для этого атрибута. Атрибут может относиться к любому допустимому типу данных PL/SQL или другому объектному типу.

Члены/Методы

Члены или методы — это подпрограммы, определенные в типе объекта. Они не используются для хранения каких-либо данных. Они в основном используются для определения процесса внутри типа объекта. Например, проверка данных перед заполнением типа объекта. Они объявляются в разделе типа объекта и определяются в разделе тела типа объекта типа объекта. Раздел тела в типе объекта является необязательным. Если членов нет, то тип объекта не будет содержать части тела.

Создать объект в Oracle

Тип объекта нельзя создать на уровне подпрограммы. Их можно создать только на уровне схемы. Как только тип объекта определен в схеме, его можно использовать в подпрограммах. Тип объекта может быть создан с помощью «CREATE TYPE». Тело типа может быть создано только после создания его типа объекта.

Объяснение синтаксиса:

  • Приведенный выше синтаксис показывает создание OBJECT с атрибутами и OBJECT-BODY с методами.
  • Методы также могут быть перегружены в теле объекта.

Инициализация объявления типа объекта

Как и другие компоненты PL/SQL, типы объектов необходимо объявлять перед их использованием в программе.

После создания типа объекта его можно использовать в декларативной части подпрограммы для объявления переменной этого типа объекта.

Всякий раз, когда какая-либо переменная объявляется в подпрограмме как тип объекта, во время выполнения будет создан новый экземпляр типа объекта, и этот вновь созданный экземпляр может быть связан с именем переменной. Таким образом, один тип объекта может хранить несколько значений в разных экземплярах.

Объяснение синтаксиса:

  • Приведенный выше синтаксис показывает объявление переменной как типа объекта в декларативной части.

Как только переменная объявлена ​​как тип объекта в подпрограмме, она будет атомарно нулевой, т. е. весь объект сам по себе будет нулевым. Его необходимо инициализировать значениями, чтобы использовать их в программе. Их можно инициализировать с помощью конструкторов.

Конструкторы — это неявный метод объекта, на который можно ссылаться с тем же именем, что и у типа объекта. Приведенный ниже синтаксис показывает инициализацию типа объекта.

Объяснение синтаксиса:

  • Приведенный выше синтаксис показывает инициализацию экземпляра типа объекта с нулевым значением.
  • Теперь сам объект не является нулевым, поскольку он был инициализирован, но атрибуты внутри объекта будут нулевыми, поскольку мы не присвоили этим атрибутам никаких значений.

Конструкторы

Конструкторы — это неявный метод объекта, на который можно ссылаться с тем же именем, что и у типа объекта. При первом обращении к объекту этот конструктор будет вызываться неявно.

Мы также можем инициализировать объекты с помощью этих конструкторов. Конструктор можно определить явно, определив член в теле типа объекта с тем же именем, что и тип объекта.

Пример 1. В следующем примере мы собираемся использовать элемент типа объекта для вставки записи в таблицу emp со значениями ('RRR', 1005, 20000, 1000) и ('PPP', 1006, 20000, 1001). ). Как только данные будут вставлены, мы собираемся отобразить то же самое, используя элемент типа объекта. Мы также собираемся использовать явный конструктор для заполнения идентификатора менеджера по умолчанию значением 1001 для второй записи.

Мы собираемся выполнить это в следующих шагах.

  • Шаг 1.
  • Создать тип объекта
  • Тело типа объекта
  • Шаг 2. Создание анонимного блока для вызова созданного типа объекта через неявный конструктор для emp_no 1005.
  • Шаг 3. Создание анонимного блока для вызова созданного типа объекта через явный конструктор для emp_no 1006.

Шаг 1) Создайте тип объекта и тело типа объекта

Пояснение кода

  • Строка кода 1–9: создание типа объекта emp_object с 4 атрибутами и 3 элементами. Он содержит определение конструкторов только с 3 параметрами. (Фактический неявный конструктор будет содержать количество параметров, равное количеству атрибутов, присутствующих в типе объекта)
  • Строка кода 10: создание основного текста.
  • Строка кода 11–21: определение явного конструктора. Присвоение значения параметра атрибутам и присвоение значения атрибуту «менеджер» со значением по умолчанию «1001».
  • Строка кода 22–26: определение элемента «insert_records», в котором значения атрибутов вставляются в таблицу «emp».
  • Строка кода 27–34: определение члена display_records, в котором отображаются значения атрибутов типа объекта.

Вывод

Тип создан

Шаг 2) Создание анонимного блока для вызова созданного типа объекта через неявный конструктор для emp_no 1005

Пояснение кода

  • Строка кода 37–45: вставка записей с помощью неявного конструктора. Вызов конструктора содержит фактическое количество значений атрибутов.
  • Строка кода 38: объявляет guru_emp_det как тип объекта emp_object.
  • Строка кода 41. Оператор guru_emp_det.display_records вызывает функцию-член diplay_records, и отображаются значения атрибутов.
  • Строка кода 42. Оператор "guru_emp_det.insert_records" вызывает функцию-член "insert_records", и значения атрибутов вставляются в таблицу.

Вывод

Имя сотрудника: RRR

Номер сотрудника: 1005

Шаг 3) Создание анонимного блока для вызова созданного типа объекта через явный конструктор для emp_no 1006

Вывод

Пояснение кода:

  • Строка кода 46–53: вставка записей с помощью явного конструктора.
  • Строка кода 46: объявляет guru_emp_det как тип объекта emp_object.
  • Строка кода 50. Оператор guru_emp_det.display_records вызывает функцию-член display_records, и отображаются значения атрибутов.
  • Строка кода 51. Оператор "guru_emp_det.insert_records" вызывает функцию-член "insert_records", и значения атрибутов вставляются в таблицу.

Наследование в типе объекта

Свойство наследования позволяет типу подобъекта получать доступ ко всем атрибутам и членам типа суперобъекта или типа родительского объекта.

Тип подобъекта называется унаследованным типом объекта, а тип суперобъекта называется типом родительского объекта.Приведенный ниже синтаксис показывает, как создать родительский и унаследованный тип объекта.

Объяснение синтаксиса:

  • Приведенный выше синтаксис показывает создание типа SUPER.

Объяснение синтаксиса:

  • Приведенный выше синтаксис показывает создание типа SUB. Он содержит все члены и атрибуты родительского типа объекта.

Пример 1. В приведенном ниже примере мы собираемся использовать свойство наследования, чтобы вставить запись с идентификатором менеджера «1002» для следующей записи («RRR», 1007, 20000).

Мы собираемся выполнить вышеуказанную программу в следующих шагах

  • Шаг 1. Создайте тип SUPER.
  • Шаг 2. Создайте тип и текст SUB.
  • Шаг 3. Создание анонимного блока для вызова типа SUB.

Шаг 1) Создайте тип SUPER или родительский тип.

Пояснение кода:

  • Строка кода 1–9: создание типа объекта emp_object с 4 атрибутами и 3 элементами. Он содержит определение конструкторов только с 3 параметрами. Он был объявлен «НЕ ОКОНЧАТЕЛЬНЫМ», так что это родительский тип.

Шаг 2) Создайте тип SUB в типе SUPER.

Пояснение кода:

  • Строка кода 10–13: создание объекта sub_emp_object как унаследованного типа с одним дополнительным атрибутом default_manager и объявлением процедуры-члена.
  • Строка кода 14. Создание тела для унаследованного типа объекта.
  • Строка кода 16–21: определение процедуры-члена, которая вставляет записи в таблицу «emp» со значениями из типа объекта «SUPER», за исключением значения менеджера. В качестве значения менеджера используется тип default_manager из SUB.

Шаг 3) Создание анонимного блока для вызова типа SUB

Пояснение кода:

  • Строка кода 25. Объявление ‘guru_emp_det’ как типа ‘sub_emp_object’.
  • Строка кода 27. Инициализация объекта с помощью неявного конструктора. Конструктор имеет 5 параметров (4 атрибута типа PARENT и 2 атрибута типа SUB). Последний параметр (1002) определяет значение атрибута default_manager
  • Строка кода 28: вызов члена «insert_default_mgr» для вставки записей с идентификатором менеджера по умолчанию, переданным в конструкторе.

Равенство объектов PL/SQL

Экземпляр объекта, принадлежащий одному и тому же объекту, можно сравнить на равенство. Для этого нам нужно иметь специальный метод в типе объекта, называемый методом «ORDER».

Этот метод ORDER должен быть функцией, которая возвращает числовой тип. В качестве входных данных он принимает два параметра (первый параметр: идентификатор экземпляра собственного объекта, второй параметр: идентификатор другого экземпляра объекта).

Идентификатор двух экземпляров объекта сравнивается, и результат возвращается в числовом виде.

  • Положительное значение означает, что экземпляр объекта SELF больше, чем другой экземпляр.
  • Отрицательное значение означает, что экземпляр объекта SELF меньше другого экземпляра.
  • Ноль означает, что экземпляр объекта SELF равен другому экземпляру.
  • Если какой-либо из экземпляров имеет значение null, эта функция вернет значение null.

Объяснение синтаксиса:

  • Приведенный выше синтаксис показывает функцию ORDER, которую необходимо включить в тело типа для проверки на равенство.
  • Параметр этой функции должен быть экземпляром объекта того же типа.
  • Вышеупомянутая функция может быть вызвана как «obj_instance_1.match(obj_instance_2)», и это выражение вернет числовое значение, как показано, где obj_instance_1 и obj_instance_2 — это экземпляр object_type_name.

Пример 1: В следующем примере мы увидим, как сравнивать два объекта. Мы создадим два экземпляра и сравним между ними атрибут «зарплата». Мы собираемся сделать два шага.

  • Шаг 1. Создание типа и тела объекта.
  • Шаг 2. Создание анонимного блока для вызова сравнения экземпляра объекта.

Шаг 1) Создание типа и тела объекта.

Объяснение кода:

  • Строка кода 1–4: создание типа объекта emp_object_equality с 1 атрибутом и 1 членом.
  • Строка кода 6–16: определение функции ORDER, которая сравнивает атрибут «зарплата» экземпляра SELF и тип экземпляра параметра. Возвращает отрицательное значение, если зарплата SELF меньше, или положительное, если зарплата SELF больше, и 0, если зарплаты равны.

Вывод кода:

Шаг 2) Создание анонимного блока для вызова сравнения экземпляра объекта.

Вывод

Пояснение кода:

  • Строка кода 20: объявление l_obj_1 типа emp_object_equality.
  • Строка кода 21: объявление l_obj_2 типа emp_object_equality.
  • Строка кода 23. Инициализация l_obj_1 со значением зарплаты 15 000
  • Строка кода 24. Инициализация l_obj_1 со значением зарплаты 17 000
  • Строка кода 25–33: вывести сообщение на основе числа, возвращаемого функцией ORDER.

Обзор

В этой главе мы рассмотрели типы объектов и их свойства. Мы также обсудили конструкторы, члены, атрибуты, наследование и равенство в объектах PL/SQL.

Можно ли определить, какой пользователь создал учетную запись другого пользователя в базе данных Oracle?

У меня есть два типа пользователей в базе данных:

  • Пользователи с системными и объектными привилегиями
  • Пользователи, имеющие только системные привилегии

Я могу найти владельца всех пользователей, имеющих системные и объектные привилегии.

Но этот запрос не извлекает пользователей, имеющих только системные привилегии. Помогите, пожалуйста, как найти владельца всех тех пользователей, которые имеют только системные привилегии?

2 ответа 2

DBA_USERS (Table) предоставит вам доступ к КОГДА ваш пользователь был создан, но, насколько я знаю, единственный способ получить КТО создал вашего пользователя, если включен аудит.

Для этого также требуется доступ к таблице DBA_AUDIT_TRAIL.

Я попробовал следующий запрос, и он работает: SELECT DISTINCT table_name, PRIVILEGE,owner FROM dba_tab_privs WHERE grantee = 'MKHISHKI'; потому что у этого пользователя есть объектные привилегии, а у моего пользователя нет объектных привилегий. Пожалуйста, помогите

@RahmanGurbaz мой запрос не ограничивается OS_USERNAME. Это всего лишь один из столбцов, которые он возвращает. Столбец USERNAME покажет, кто создал вашего пользователя.

Можно ли определить, какой пользователь создал учетную запись другого пользователя в базе данных Oracle?

Если настроен аудит, то да, возможно.

Однако я не уверен, что вы на самом деле этого хотите.

<блочная цитата>

. этот запрос не извлекает пользователей, имеющих только системные привилегии.

Таблица (и некоторые другие) Привилегии хранятся в файлах . _TAB_PRIVS.

Привилегии на основе ролей хранятся в . _ROLE_PRIVS.

Системные привилегии хранятся в . _SYS_PRIVS.

<блочная цитата>

. у этого пользователя есть объектные привилегии, а у моего пользователя нет .

Итак, кто-то еще имеет доступ к тому, что, по вашему мнению, вы должны иметь также.

Я бы предполагаю, что у вас есть отдельный человек или, что еще лучше, команда, которая занимается созданием учетной записи пользователя и предоставлением разрешений. Это люди, с которыми вам нужно поговорить, потому что, даже если вы сможете выяснить, каких привилегий [по вашему мнению] вам «не хватает», у вас не будет привилегия предоставить эти привилегии себе!

В этой главе мы обсудим объектно-ориентированный PL/SQL. PL/SQL позволяет определить тип объекта, что помогает при проектировании объектно-ориентированной базы данных в Oracle. Тип объекта позволяет создавать составные типы. Использование объектов позволяет реализовать объекты реального мира с определенной структурой данных и методами для работы с ними. Объекты имеют атрибуты и методы. Атрибуты являются свойствами объекта и используются для хранения состояния объекта; и методы используются для моделирования его поведения.

Объекты создаются с помощью оператора CREATE [OR REPLACE] TYPE. Ниже приведен пример создания простого объекта адреса, состоящего из нескольких атрибутов:

Когда приведенный выше код выполняется в приглашении SQL, он дает следующий результат —

Давайте создадим еще одного объектного клиента, в котором мы объединим атрибуты и методы, чтобы получить объектно-ориентированное ощущение –

Когда приведенный выше код выполняется в приглашении SQL, он дает следующий результат —

Создание экземпляра объекта

Определение типа объекта обеспечивает схему объекта. Чтобы использовать этот объект, вам нужно создать экземпляры этого объекта. Вы можете получить доступ к атрибутам и методам объекта, используя имя экземпляра и оператор доступа (.) следующим образом —

Когда приведенный выше код выполняется в приглашении SQL, он дает следующий результат —

Методы участников

Методы-члены используются для управления атрибутами объекта. Вы предоставляете объявление метода-члена при объявлении типа объекта. Тело объекта определяет код для методов-членов. Тело объекта создается с помощью инструкции CREATE TYPE BODY.

Конструкторы – это функции, которые возвращают новый объект в качестве значения. Каждый объект имеет определенный системой метод конструктора. Имя конструктора совпадает с типом объекта. Например —

Методы сравнения используются для сравнения объектов. Есть два способа сравнить объекты —

Метод карты

Метод Map — это функция, реализованная таким образом, что ее значение зависит от значения атрибутов. Например, для объекта клиента, если код клиента одинаков для двух клиентов, оба клиента могут быть одинаковыми. Таким образом, отношение между этими двумя объектами будет зависеть от значения кода.

Способ заказа

Метод Order реализует некоторую внутреннюю логику для сравнения двух объектов. Например, для прямоугольного объекта прямоугольник больше другого прямоугольника, если обе его стороны больше.

Использование метода карты

Давайте попробуем понять приведенные выше концепции, используя следующий прямоугольный объект —

Когда приведенный выше код выполняется в приглашении SQL, он дает следующий результат —

Создание тела типа —

Когда приведенный выше код выполняется в приглашении SQL, он дает следующий результат —

Теперь используется объект прямоугольника и его функции-члены —

Когда приведенный выше код выполняется в приглашении SQL, он дает следующий результат —

Использование метода Order

Теперь того же эффекта можно добиться с помощью метода заказа. Давайте воссоздадим объект прямоугольника, используя метод порядка —

Когда приведенный выше код выполняется в приглашении SQL, он дает следующий результат —

Создание тела типа —

Когда приведенный выше код выполняется в приглашении SQL, он дает следующий результат —

Использование объекта прямоугольника и его функций-членов —

Когда приведенный выше код выполняется в приглашении SQL, он дает следующий результат —

Наследование для объектов PL/SQL

PL/SQL позволяет создавать объекты из существующих базовых объектов. Для реализации наследования базовые объекты должны быть объявлены как NOT FINAL. По умолчанию ОКОНЧАТЕЛЬНО.

Следующие программы иллюстрируют наследование в объектах PL/SQL. Давайте создадим еще один объект с именем TableTop, он унаследован от объекта Rectangle. Для этого нам нужно создать базовый объект прямоугольник

Когда приведенный выше код выполняется в приглашении SQL, он дает следующий результат —

Создание тела базового типа —

Когда приведенный выше код выполняется в приглашении SQL, он дает следующий результат —

Создание дочернего объекта столешница

Когда приведенный выше код выполняется в приглашении SQL, он дает следующий результат —

Создание тела типа для дочернего объекта tabletop

Когда приведенный выше код выполняется в приглашении SQL, он дает следующий результат —

Использование объекта tabletop и его функций-членов —

Когда приведенный выше код выполняется в приглашении SQL, он дает следующий результат —

Абстрактные объекты в PL/SQL

Предложение NOT INSTANTIABLE позволяет объявить абстрактный объект. Вы не можете использовать абстрактный объект как таковой; вам придется создать подтип или дочерний тип таких объектов, чтобы использовать его функции.

Когда приведенный выше код выполняется в приглашении SQL, он дает следующий результат —

Читайте также: