В оракле что значит

Методы доступа к данным в Oracle

Не найдя на хабре статьи, объединяющей в удобном для чтения виде информацию о методах доступа к данным, используемых СУБД Oracle, я решил совершить «пробу пера» и написать эту статью.

Общая информация

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

Для примеров мы будем использовать следующую таблицу и данные в ней:

Для анализа плана выполнения запроса будем пользоваться следующими средствами:

После создания индекса и использования его в примерах и перед созданием следующего индекса, он должен быть удален. Это можно сделать с помощью следующего запроса:

TABLE FULL SCAN

Данный метод доступа, как следует из названия, подразумевает перебор всех строк таблицы с исключением тех, которые не удовлетворяют предикату where (если таковой есть). Применяется он либо в случае, когда условия предиката отсутствуют в индексе, либо когда индекса нет в принципе. Примеры:

TABLE ACCESS BY ROWID, он же ROWID

INDEX FULL SCAN

Данный метод доступа просматривает все листовые блоки индекса для поиска соответствий условиям предиката. Для того чтобы Oracle мог применить этот метод доступа, хотя бы одно из полей ключа должно иметь ограничение NOT NULL, т.к. только в этом случае соответствующая строка таблицы попадет в индекс. Этот метод обычно быстрее чем TABLE FULL SCAN, но медленнее, чем INDEX RANGE SCAN (см. ниже).

INDEX FAST FULL SCAN

Этот метод доступа применяется, когда выполнены все требования для INDEX FULL SCAN, а также все данные, выбираемые запросом, содержатся в индексе и таким образом доступ к самой таблице не требуется. В отличие от INDEX FULL SCAN этот метод может читать блоки индекса в несколько параллельных потоков и таким образом порядок возвращаемых значений не регламентирован. Oracle также не может использовать этот метод для bitmap-индексов.

Источник

История СУБД Oracle — первой коммерчески успешной реляционной СУБД

В оракле что значит. Смотреть фото В оракле что значит. Смотреть картинку В оракле что значит. Картинка про В оракле что значит. Фото В оракле что значит

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

Первые прототипы реляционных СУБД существовали уже в 70-е годы ХХ века. Однако мало кто верил в возможность добиться эффективной реализации таких систем. Тем не менее, к концу 1980-х годов реляционные системы заняли на мировом рынке СУБД доминирующее положение.

В связи с этим многие компании стали позиционировать свои СУБД как «реляционные» в рекламных целях. Но далеко не всегда они имели для этого достаточно оснований. Поэтому автор реляционной модели данных Эдгар Кодд в 1985 году опубликовал свои знаменитые «12 правил Кодда», которым должна удовлетворять каждая РСУБД.

В оракле что значит. Смотреть фото В оракле что значит. Смотреть картинку В оракле что значит. Картинка про В оракле что значит. Фото В оракле что значит

16 июня 1977 года Эдом Оутсом, Бобом Майнером и Ларри Эллисоном в Калифорнии (США) была основана компания Software Development Laboratories, вскоре переименованная в Relational Software Inc. Молодые программисты начали разработку системы управления базами данных (СУБД), построенной на принципах реляционной алгебры.

Oracle 2

Первая коммерческая версия СУБД Oracle получила название Oracle 2. Такой ход должен был дать заказчикам понять, что система надежна и даже прошла проверку временем.

В конце 70-х главным конкурентным преимуществом СУБД Oracle была высокая скорость обработки огромных массивов информации, которую отметили все эксперты. В отличие от System R, для работы которой был необходим мощный суперкомпьютер — мейнфрейм, Oracle 2 справлялась с обработкой информации на более «миниатюрных» машинах. Эти и другие преимущества привели к тому, что в начале 80-х годов СУБД начала стремительно распространяться.

У Эллисона с коллегами возникли сложности при реализации совместимости с СУБД IBM System R. Нежелание IBM раскрывать исходные коды стало ключевой проблемой. В результате совместимости между двумя системами так и не удалось достичь.

В оракле что значит. Смотреть фото В оракле что значит. Смотреть картинку В оракле что значит. Картинка про В оракле что значит. Фото В оракле что значит
Ларри Эллисон — основатель Oracle

Oracle стала исторически первой и одной из наиболее развитых реализаций архитектуры клиент/сервер. Переносимость и масштабируемость всегда имели высокий приоритет у разработчиков Oracle. Это сыграло ключевую роль в достижении успеха компании на рынке СУБД.

Oracle 2 работала на мини-компьютере PDP-11 фирмы Digital Equipment в операционной среде RSX-11. Большая часть Oracle была написана на ассемблере PDP-11, а отдельные компоненты — на новом для того времени языке C. Уже в те дни система была портируемой и работала в других операционных средах PDP-11: IAS, RSTS и UNIX. Тогда же было принято решение о переносе Oracle в новую ОС VMS. Благодаря этому СУБД Oracle заняла обширную нишу корпоративных информационных систем на быстро растущем рынке VAX.

Еще одной важной особенностью системы стала полная реализация возможностей нового языка запросов SQL — подзапросы, операция соединения и так далее. Благодаря этому многократно выросла производительность труда SQL-программистов.

Стандартный SQL (IBM) был расширен операцией CONNECT BY, позволяющим обрабатывать древовидные структуры, что становится уникальным для SQL-систем.

Конечно, над СУБД нужно было еще долго работать. В Oracle 2, например, не поддерживались транзакции: если в процессе обновления базы данных происходил сбой, предыдущее состояние БД восстановить было практически невозможно. Поэтому пользователи были вынуждены часто делать резервные копии базы данных во избежание потерь информации.

29 октября 1982 года компания переименована в Oracle Systems.

Oracle 3 и 4

В 1983 году на рынок вышла Oracle 3. Она была полностью переписана на С. Это во многом помогло решить проблему переносимости Oracle на широкий спектр платформ – их тогда было не менее 20. Кроме того, было реализовано атомарное выполнение транзакций: операция либо выполнялась полностью, либо не выполнялась вообще, соответственно, транзакция либо завершалась успешно по всем изменениям базы данных, либо откатывала все сделанные ею изменения.

В оракле что значит. Смотреть фото В оракле что значит. Смотреть картинку В оракле что значит. Картинка про В оракле что значит. Фото В оракле что значит

С выходом Oracle 4 система была портирована на большие компьютеры c ОС VM и MVS, а также на персональный компьютер с 640 килобайтами оперативной памяти.

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

Oracle 5

В 1985 году Oracle выпустила на рынок версию 5.0, в которой была впервые введена архитектура клиент/сервер. Кроме того, компания выпустила SQL*Net – сетевой продукт, обеспечивающий прозрачное соединение между клиентом и базой данных или между двумя базами данных.

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

Oracle 6

Разработчики версии 6 стремились создать инструмент построения крупномасштабных информационных систем, ориентированных на обработку транзакций в режиме реального времени.

Были введены генераторы последовательностей и блокировка на уровне записи. В это же время Oracle стал первым многопользовательским сетевым сервером баз данных для OS/2, Xenix, Banyan Vines и Macintosh.

В версии 6 были заложены принципиально новые возможности, в полном объеме реализованные позже:

Кризис

В 1990 году компания столкнулась с серьезными проблемами, сообщив о значительных убытках. Эллисону пришлось уволить более 400 сотрудников для сокращения издержек. Он также распустил практически весь топ-менеджмент, в числе которого были близкие Ларри люди, в течение 10 лет вместе с ним приумножавшие славу и благосостояние Oracle. Ларри оставил в компании Боба Майнера, которого всегда считал одаренным программистом и просто хорошим добрым человеком.

Столь жесткие методы Ларри объяснил так:

Кроме того, из-за совершенных ошибок в регистрации продаж и учёта ещё не прошедших сделок в бухгалтерских документах у Oracle возникли сложности с регуляторами на местном рынке.

В результате Oracle оказалась близка к банкротству, а такие конкуренты, как Informix и Sybase, начали медленно увеличивать свою долю на рынке.

На тот момент конкуренция между крупными игроками рынка достигла своего апогея — 90-ые могли запомниться многим, как период рекламной войны Oracle и Informix. Так, последняя выкупила билборд рядом с офисом Oracle и разместила на нем надпись «Осторожно, динозавры переходят дорогу», намекая на устаревшие технологии Oracle.

В оракле что значит. Смотреть фото В оракле что значит. Смотреть картинку В оракле что значит. Картинка про В оракле что значит. Фото В оракле что значит

Однако Ларри все-таки нашел решение: он сформировал новый управленческий штат, который был «натаскан» на громадные объемы производства и жесткую конкуренцию. В результате через определенное время Oracle снова вернулась на прежние высоты.

А в 1992 году релиз Oracle 7 окончательно изменил ситуацию в лучшую сторону.

Oracle 7

Помимо общего повышения эффективности ввода/вывода, использования центрального процессора и работы с памятью, версия СУБД Oracle 7 обладала рядом инновационных архитектурных решений:

В версии 7 были полностью реализованы декларативные ограничения ссылочной целостности в соответствии со стандартами ANSI/ISO. В рамках этих ограничений (первичные и внешние ключи) пользователь мог специфицировать каскадное удаление связанных с некоторым первичным ключом записей. Процедуры PL/SQL могли описываться на уровне схемы базы данных (хранимые процедуры) и вызываться любым приложением, другими процедурами и триггерами.

Другим важным нововведением стали триггеры базы данных.

Триггер представляет собой пару (событие+действие), где событие — это удаление/занесение/обновление записей таблицы, а действие (тело триггера) — процедура PL/SQL, выполняемая при совершении события.

Триггеры могут определяться на уровне операций (DELETE, INSERT, UPDATE) или на уровне отдельных строк (FOR-EACH-ROW-триггеры, которые, к тому же, могут работать со старыми и новыми значениями строк). С помощью триггеров можно реализовать сложные правила контроля целостности, прав доступа, вывода значений и прочее.

Роль — это совокупность прав доступа к объектам базы данных (INSERT, UPDATE, SELECT и другие) и системных прав (CREATE TABLE, ALTER SYSTEM и так далее). Определив роль, администратор базы данных может с помощью одной команды дать пользователю привилегии для работы с некоторым приложением.

В 1994 году компания выпустила версию Oracle 7.1, в том числе и для IBM PC. Ранее Oracle не рассматривала эту платформу как серверную, а ограничивалась лишь созданием для нее клиентских частей своей СУБД.

В Oracle 7.1 появилась опция параллельных запросов (parallel query option), а также возможность определения количества серверных процессов, необходимых для выполнения SQL-запроса, на основе результатов работы оптимизатора запросов. В данной версии была достигнута полная интеграция PL/SQL и SQL, введен встроенный пакет DBMS_SQL и асинхронная симметричная репликация данных вместе с асинхронным вызовом удаленных процедур.

Oracle 8 и 9

В 1997 году вышла версия 8, в которой появились объектная модель, новые свойства и средства администрирования. Oracle 8.0 была более надежной по сравнению с предыдущей версией, обладала большей устойчивостью к высоким нагрузкам. Кроме того, в ней была реализована возможность партиционирования таблиц.

В 1998 году компания анонсировала Oracle 8i Release 1 (8.1.5). Буква «i» означает, что версия обладает поддержкой Интернета.

В оракле что значит. Смотреть фото В оракле что значит. Смотреть картинку В оракле что значит. Картинка про В оракле что значит. Фото В оракле что значит

Начиная с Oracle 8.1.5 в последующих версиях появляется встроенная в СУБД виртуальная машина Java (JVM). Далее вышла версия Oracle 8i Release 2 (8.1.6), которая поддерживала XML, а также содержала определенные новшества, связанные с созданием хранилищ данных.

В 2001 году появилась версия Oracle 9i Release 1 (9.0.1), в которой было сделано более 400 изменений по сравнению с предыдущей. Среди них – «интеллектуализация» автоматизированных систем и расширение возможностей для аналитики.

В оракле что значит. Смотреть фото В оракле что значит. Смотреть картинку В оракле что значит. Картинка про В оракле что значит. Фото В оракле что значит

В новой версии появились средства обработки XML-документов, технология Oracle RAC (Real Application Clusters) – как замена Oracle Parallel Server (OPS), механизм создания репликаций Oracle Streams, скроллируемый курсор для программ на Си и C++, встроенная в СУБД поддержка OLAP и Data Mining, переименование столбцов и ограничений целостности, поддержка Java 1.3.1 и Unicode 3.1.

Лучшие финансовые годы

В оракле что значит. Смотреть фото В оракле что значит. Смотреть картинку В оракле что значит. Картинка про В оракле что значит. Фото В оракле что значит
Примерное разделение рынка СУБД для платформы Unix.

В оракле что значит. Смотреть фото В оракле что значит. Смотреть картинку В оракле что значит. Картинка про В оракле что значит. Фото В оракле что значит
Примерное разделение рынка СУБД для платформы Windows NT.

В 2004 году появилась версия Oracle 10g Release 1 (10.1.0). Буква «g» в названии обозначает «Grid» («сеть») и символизирует поддержку Grid-вычислений.

Этот год стал одним из самых успешных в истории компании – норма прибыли составила 38% (самый высокий показатель за все время существования корпорации), годовой оборот возрос до 7% ($10,2 миллиарда), доходы от продаж ПО поднялись на 12% ($8,1 миллиарда), чистая прибыль выросла на 16% ($2,7 миллиарда).

В оракле что значит. Смотреть фото В оракле что значит. Смотреть картинку В оракле что значит. Картинка про В оракле что значит. Фото В оракле что значит

Офис Oracle в России и СНГ вошел в тройку лучших представительств Oracle по темпам роста в регионе ЕМЕА (Европа, Ближний Восток и Африка), а также пятый год подряд — в пятерку лучших среди 145 представительств Oracle в мире.

До наших дней

В 2005-м была анонсирована Oracle 10g Release 2 (10.2.0.1). А в 2007-м – Oracle 11g Release 1 (11.1.0.6).

В оракле что значит. Смотреть фото В оракле что значит. Смотреть картинку В оракле что значит. Картинка про В оракле что значит. Фото В оракле что значит
Состояние рынка СУБД на 2007 год

В 2009 году компания выпустила Oracle 11g Release 2 (11.2.0.1). В версию была введена новая для Oracle возможность «горячего» (без остановки сервера) внесения изменений в метаданные и бизнес-логику на PL/SQL – это стало возможным благодаря механизму одновременной поддержки нескольких версий схемы и логики под названием editions.

2013 год — вышла версия 12c (12.1.0.1), основное новшество — поддержка подключаемых баз данных (pluggable database), обеспечивающая свойства мультиарендности и живой миграции баз данных, суффикс «c» в названии обозначает cloud (облако).

24 апреля 2015 года стало известно о планах Oracle перевести почти все свои продукты в облако. Таким образом, американская компания решила изменить свою бизнес-модель, чтобы соответствовать изменениям на рынке.

В оракле что значит. Смотреть фото В оракле что значит. Смотреть картинку В оракле что значит. Картинка про В оракле что значит. Фото В оракле что значит

В сентябре 2016 года Ларри Эллисон объявил о создании в Oracle дата-центров для работы с IaaS второго поколения и заявил, что лидерство компании Amazon на облачном рынке подходит к концу. Цель компании – предложить клиентам Oracle пакет услуг, где будут совмещены IaaS, PaaS и SaaS («ПО как услуга»).

Источник

Описание операций плана выполнения в Oracle

Данная статья представляет собой описание основных операций, отображаемых в планах выполнения запросов СУБД Oracle RDBMS.

Index Unique Scan

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

Index Range Scan

Выполняет обход B-дерева и просматривает цепочки конечных узлов, чтобы найти все подходящие записи.

Index Full Scan

Читает индекс целиком (все строки) в порядке, представленном индексом. В зависимости от различной системной статистики СУБД может выполнять эту операцию, если нужны все строки в порядке индекса, например, из-за соответствующего предложения ORDER BY. Вместо этого оптимизатор может также использовать операцию Index Fast Full Scan и выполнить дополнительную операцию сортировки.

Index Fast Full Scan

Читает индекс целиком (все строки) в порядке, хранящемся на диске. Эта операция обычно выполняется вместо полного сканирования таблицы, если в индексе доступны все необходимые столбцы. Подобно операции TABLE ACCESS FULL, INDEX FAST FULL SCAN может извлечь выгоду из многоблочных операций чтения.

Table Access By Index ROWID

Извлекает строку из таблицы, используя ROWID, полученный из предыдущего поиска по индексу.

Table Access Full

Полное сканирование таблицы. Читает всю таблицу (все строки и столбцы), в порядке, хранящемся на диске. Хотя многоблочные операции чтения значительно повышают скорость сканирования полной таблицы, это все еще одна из самых дорогих операций. Помимо высоких затрат времени ввода-вывода, полное сканирование таблицы должно проверять все строки таблицы, что также занимает значительное количество процессорного времени.

Merge Join

Соединение слиянием объединяет два отсортированных списка. Обе стороны объединения должны быть предварительно отсортированы.

Nested Loops

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

Hash Join

Хеш-соединение загружает записи-кандидаты с одной стороны соединения в хеш-таблицу, которая затем проверяется для каждой строки с другой стороны соединения. Операция используется всегда, когда невозможно применить другие виды соединения: если соединяемые наборы данных достаточно велики и/или наборы данных не упорядочены по столбцам соединения.

Sort Unique

Сортирует строки и устраняет дупликаты.

Hash Unique

Более эффективная реализация алгоритма сортировки и устранения дупликатов с использованием хэш-таблицы. Заменяет операцию Sort Unique в определенных обстоятельствах.

Sort Aggregate

Вычисляет суммарные итоги с использованием агрегатных функций SUM, COUNT, MIN, MAX, AVG и пр.

Sort Order By

Сортирует результат в соответствии с предложением ORDER BY. Эта операция требует больших объемов памяти для материализации промежуточного результата.

Sort Group By

Сортирует набор записей по столбцам GROUP BY и агрегирует отсортированный результат на втором этапе. Эта операция требует больших объемов памяти для материализации промежуточного результата.

Sort Group By Nosort

Агрегирует предварительно отсортированный набор записей в соответствии с предложением GROUP BY. Эта операция не буферизует промежуточный результат.

Hash Group By

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

Filter

Применяет фильтр к набору строк.

Создает промежуточное представление данных.

Count Stopkey

Прерывает выполение операций, когда было выбрано нужное количество строк.

Sort Join

Сортирует набор записей в столбце соединения. Используется в сочетании с операцией Merge Join для выполнения сортировки соединением слияния.

Intersection

Выполняет операцию пересечения между двумя источниками.

Union-All

Выполняет операцию объединения всех записей между двумя таблицами. Дублирующиеся строки не удаляются.

Load As Select

Прямая загрузка с использованием оператора SELECT в качестве источника.

Temp Table Generation/Transformation

Создает/преобразует временную таблицу. Используется в специфичных для Oracle преобразованиях типа Star.

Источник

СУБД Oracle: обзор характеристик и возможностей базы данных

В оракле что значит. Смотреть фото В оракле что значит. Смотреть картинку В оракле что значит. Картинка про В оракле что значит. Фото В оракле что значит

Антон Меринов

Автор статьи. Интересы, навыки: Профессиональное администрирование СУБД Oracle Database, веб-разработка, IT-World. Подробнее.

В оракле что значит. Смотреть фото В оракле что значит. Смотреть картинку В оракле что значит. Картинка про В оракле что значит. Фото В оракле что значитНа мировом рынке корпоративных систем управления базами данных (СУБД) доминирующее положение занимает традиционная тройка продуктов: IBM DB2, Microsoft SQL Server и Oracle. Более 80% рынка СУБД в течение долгих лет контролируется тремя компаниями производителями: IBM, Oracle и Microsoft. По статистическим данным на рынке России лидирующее положение занимает Oracle, так как по статистическим данным за 2010 год, данная СУБД занимает более 60% всего рынка, среди других СУБД и около 30% мирового рынка СУБД. В 2017г. показатели по России не изменились, а в международном масштабе выросли.

СУБД Oracle имеет большое количество различных версии и типов. Данная СУБД выпускается одноименной компанией Oracle.

Компания Oracle была основана нынешним президентом компаний Лэрри Элисоном и Роберттом Майнором в 1977 году, в Рэдвуде, штат калифорния. Первая реляционная СУБД фирмы базировалась на модели IBM System/R и была первой системой, в которой использовался язык SQL, разработанный фирмой IBM.

На сегодняшний день СУБД Oracle поддерживают свыше 80 вариантов операционной среды в широком диапазоне, включая мэйнфреймы IBM, мини-компьютеры DEC VAX, UNIX, Windows и множество других платформ.

Для примера возьмем Oracle9i. Ядром СУБД является сервер базы данных, который поставляется в одной из четырех редакций в зависимости от масштаба информационной системы, в рамках которой предполагается его применение.

В оракле что значит. Смотреть фото В оракле что значит. Смотреть картинку В оракле что значит. Картинка про В оракле что значит. Фото В оракле что значит

Основное преимущество такого подхода к построению СУБД — это идентичность кода для всех вариантов сервера баз данных. Для всех компьютерных платформ и архитектур существует единая СУБД Oracle, поставляемая в различных версиях, которая ведет себя одинаково и предоставляет одинаковую функциональность вне зависимости от платформы, на которой она установлена.

Одной из основных характеристик СУБД Oracle является функционирование системы на большинстве платформ. В том числе на больших ЭВМ, UNIX-серверах, персональных компьютерах и т. д.

Источник

Работа с числами в PL/SQL на примерах

В оракле что значит. Смотреть фото В оракле что значит. Смотреть картинку В оракле что значит. Картинка про В оракле что значит. Фото В оракле что значитИ что бы мы делали без чисел? Хотя люди, которые не сильны в математике, предпочитают рассматривать любую информацию как текст, на практике большая часть информации в базах данных имеет числовую природу. Сколько единиц товара хранится на складе? Какую сумму мы задолжали? Насколько быстро развивается бизнес? Точные ответы на эти и многие другие вопросы можно получить именно в числовом выражении.

Для работы с числами в PL/SQL необходимо хотя бы в общих чертах изучить:

Эти темы мы и начнем рассматривать в настоящей статье блога. Начнем с числовых типов данных языка PL/SQL.

Числовые типы данных PL/SQL

PL/SQL, как и РСУБД Oracle, поддерживает различные числовые типы данных для решения разных задач:

Тип NUMBER

Безусловно, самый распространенный числовой тип данных в мире Oracle и PL/SQL. Используется для хранения целых чисел, а также чисел с фиксированной или плавающей запятой практически любого размера. До выхода Oracle10g тип NUMBER был единственным числовым типом, непосредственно поддерживавшимся ядром баз данных Oracle (в последующих версиях также поддерживаются BINARY_FLOAT и BINARY_DOUBLE ). Тип NUMBER имеет платформенно-независимую реализацию, а вычисления с типом NUMBER всегда приводят к одинаковому результату независимо от того, на какой аппаратной платформе выполняется программа.

В простейшем варианте переменная объявляется с ключевым словом NUMBER :

Такое объявление определяет число с плавающей запятой. Память, выделяемая Oracle для переменной, позволяет хранить 40 значащих цифр, а плавающая десятичная запятая обеспечивает оптимальное представление присваиваемых значений. В переменных типа NUMBER могут храниться числа от 10−130 (1.0E — 130) до 10126 — 1 (1.0E126 — 1). Значения, меньшие 10−130, округляются до 0, а значения, большие либо равные 10126, считаются неопределенными; это создает проблемы на стадии выполнения, но не приводит к выдаче исключения. Диапазон значений NUMBER продемонстрирован в следующем блоке:

При объявлении переменной NUMBER можно задать для ее значения дополнительные параметры:

Такое объявление определяет число с фиксированной запятой, где A — общее количество значащих цифр в числе, а B — количество цифр справа (положительное значение) или слева (отрицательное значение) от десятичной запятой. Оба параметра должны быть целочисленными литералами; ни переменные, ни константы в объявлении использоваться не могут. Допустимые значения параметра A находятся в диапазоне от 1 до 38, а параметра B — от –84 до 127.

При объявлении чисел с фиксированной запятой параметр B обычно меньше A. Например, переменную для хранения денежных сумм можно объявить как NUMBER (9,2); это позволяет представлять значения до 9 999 999,99 включительно. Интерпретация этого объявления показана на рис. 1.

В оракле что значит. Смотреть фото В оракле что значит. Смотреть картинку В оракле что значит. Картинка про В оракле что значит. Фото В оракле что значит

Рис. 1. Типичное объявление числа с фиксированной запятой

Как видно из рисунка, значение переменной NUMBER (9,2) представляет собой число с фиксированной запятой, состоящее из семи цифр слева от десятичной запятой и двух справа. Значения, хранимые в переменной, будут округляться максимум до сотых (табл. 1).

Попытка присваивания переменной двух последних значений вызывает исключение, поскольку для представления этих значений требуется больше цифр, чем помещается в переменной. Для хранения значений свыше 10 000 000 нужно минимум восемь значащих цифр в целой части числа. При округлении числа до семи цифр будут генерироваться ошибки. Ситуация становится более интересной при объявлении переменной, у которой количество цифр после десятичной запятой больше общего количества значащих цифр, или отрицательно. Пример представлен на рис. 2.

Переменная на рис. 2 содержит то же количество значащих цифр, что и переменная на рис. 1, но используются они по-другому. Поскольку параметр B равен 11, девять значащих цифр могут представлять только абсолютные значения меньше 0,01, которые округляются до стомиллиардных. Результаты присваивания некоторых значений переменной типа NUMBER (9,11) приведены в табл. 2.

Исходное значениеОкругленное значение
1 234,561 234,56
1 234 567,9846231 234 567,98
1 234 567,9856231 234 567,99
1 234 567,9956231 234 568,00
10 000 000,00Слишком большое значение — ошибка переполнения
–10 000 000,00То же

В оракле что значит. Смотреть фото В оракле что значит. Смотреть картинку В оракле что значит. Картинка про В оракле что значит. Фото В оракле что значит

Рис. 2. Количество цифр после десятичной запятой больше
общего количества значащих цифр

Исходное значениеОкругленное значение
0,001234567890,00123456789
0,0000000000050,00000000001
0,0000000000040,00000000000
0,01Слишком большое значение — ошибка переполнения
−0.01То же

Если количество цифр в дробной части задано отрицательным значением, то десятичная запятая переносится вправо. Переменная, объявленная как NUMBER (9,-11), показана на рис. 3.

В оракле что значит. Смотреть фото В оракле что значит. Смотреть картинку В оракле что значит. Картинка про В оракле что значит. Фото В оракле что значит

Рис. 3. Количество цифр после десятичной запятой задано отрицательным значением

Мы снова задали девять значащих цифр, но как видно из табл. 3, теперь вместо малых значений вплоть до стомиллиардных наименьшим значением, которое может содержаться в переменной, стало 100 миллиардов. Значения, меньшие 100 миллиардов, округляются вверх или вниз до ближайших 100 миллиардов, как видно из табл. 3.

Как видно из рис. 3 и табл. 3, отрицательное значение параметра, определяющего количество цифр после запятой, позволяет представлять очень большие значения — но за счет потери данных в младших разрядах. При записи в переменную, объявленную как NUMBER (9,-11), любое абсолютное значение меньше 50 триллионов округляется до нуля.

Учтите, что при объявлении переменных типа NUMBER количество цифр после десятичной запятой не является обязательным параметром и по умолчанию равняется нулю. Например, следующие два объявления эквивалентны:

Оба объявления создают целочисленную переменную (то есть переменную с нулем цифр в дробной части) из девяти значащих цифр. В такой переменной могут храниться числа из диапазона от −999 999 999 до 999 999 999.

При использовании с дробными значениями диапазон NUMBER ограничивается параметрами, как продемонстрировано в следующем программном блоке:

Как и прежде, low_nbr представляет нижнюю, а high_nbr — верхнюю границу положительного диапазона. Обратите внимание: при работе с числами с фиксированной запятой точность ограничивается 38 значащими цифрами.

Тип PLS_INTEGER

Тип данных PLS_INTEGER позволяет хранить целые числа в диапазоне от −2 147 483 648 до 2 147 483 647. Значения хранятся в «родном» целочисленном формате аппаратной платформы. Несколько примеров объявлений переменных типа PLS_INTEGER :

Программа выводит следующий результат:

Если итоговое значение целочисленной операции выходит за пределы диапазона допустимых значений (от −2 147 483 648 до 2 147 483 647), произойдет ошибка целочисленного переполнения.

Тип BINARY_INTEGER

Любопытная подробность: казалось бы, в пакете STANDARD тип BINARY_INTEGER ограничивается значениями от −2 147 483 647 до 2 147 483 647, однако в моей программе не инициировались исключения при присваивании значений из диапазона от −2 147 483 648 до 2 147 483 647 (немного расширенного в отрицательной части):

Тип BINARY_INTEGER не рекомендуется использовать в новых разработках — разве что вам потребуется, чтобы код работал в старых версиях Oracle до 7.3 (версия, в которой появился тип PLS_INTEGER ). Надеюсь, вам не приходится иметь дела с такими древностями!

Тип SIMPLE_INTEGER

Типы BINARY_FLOAT и BINARY_DOUBLE

ХарактеристикаBINARY_FLOATBINARY_DOUBLENUMBER
Максимальное абсолютное
значение
3,40282347E+38F1,7976931348623157E+3089.999. 999E+121 (38 «девяток»)
Минимальное абсолютное
значение
1.17549435E–38F2.2250748585072014E−3081.0E–127
Количество байтов, используемое для значения4 (32 бита)8 (64 бита)от 1 до 20
Количество байтов длины001
ПредставлениеДвоичное, IEEE-754Двоичное, IEEE-754Десятичное
Суффикс литераловfdНет

Также существуют специальные литералы, используемые при работе с вещественными типами IEEE-754. Следующие литералы поддерживаются как в PL/SQL, так и в SQL:

Другая группа литералов поддерживается только в PL/SQL:

Наконец, при работе с этими типами данных используются следующие предикаты:

Очень важно помнить, что типы BINARY являются двоичными. Их не рекомендуется использовать ни в каких ситуациях, требующих точного десятичного представления. Следующий пример показывает, почему эти типы не должны, например, использоваться для представления денежных сумм:

Будьте внимательны при смешении вещественных типов при сравнениях, например:

Программа выводит следующий результат:

Для чего используются типы IEEE-754? Первая причина — производительность, вторая — соответствие стандартам IEEE. При выполнении масштабных вычислений использование типов IEEE-754 может привести к заметному выигрышу по скорости. Следующий программный блок выводит время, необходимое для вычисления площади 5 000 000 кругов и вычисления 5 000 000 синусов. Обе задачи выполняются дважды — с BINARY_DOUBLE и NUMBER :

Мои результаты, которые получились довольно стабильными для серии запусков, выглядели так:

Смешанное использование типов с плавающей запятой

Впрочем, в некоторых областях реализация двоичных вещественных типов Oracle не полностью соответствует стандарту IEEE-754. Например, Oracle преобразует −0 в +0, тогда как стандарт IEEE-754 такого поведения не требует. Если совместимость со стандартом важна для вашего приложения, обратитесь к разделу «Типы данных» руководства SQL Reference от Oracle — в нем содержится точная информация о том, где и как Oracle отклоняется от стандарта IEEE-754.

Типы SIMPLE_FLOAT и SIMPLE_DOUBLE

Числовые подтипы

Oracle также поддерживает ряд числовых подтипов данных. Большая их часть представляет собой альтернативные имена для трех описанных нами базовых типов данных.

Подтипы введены для достижения совместимости с типами данных ISO SQL, SQL/DS и DB2 и обычно имеют те же диапазоны допустимых значений, что и их базовые типы. Однако иногда значения подтипа ограничены некоторым подмножеством значений базового типа. Подтипы числовых данных представлены в табл. 5.

* BINARY_INTEGER до Oracle10g.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *