Язык программирования oracle где используется
СУБД Oracle — система управления реляционными базами данных, разработанная корпорацией Oracle.
Oracle является наиболее популярной из реализаций SQL; он был исторически первой коммерческой реализацией SQL и первой реализацией, совместимой со стандартом SQL‘93.
Oracle поддерживает ряд различных платформ, включая Windows, Linux, Max OS X и Sun Solaris.
Процедурное расширение SQL, разработанное Oracle, называется PL/SQL (Procedural Language/Structured Query Language) и основано на синтаксисе языков Ada и Pascal. Третьим ключевым языком, использующийся в СУБД Oracle наравне с SQL и PL/SQL, является Java.
PL/SQL поддерживает программные блоки (в виде функций, процедур и пакетов, которые хранятся в базе данных в скомпилированном виде и могут быть выполнены позднее создания, или анонимных блоков, которые не могут быть скомпилированы и используются только с виде скриптов). PL/SQL поддерживает разнообразные типы данных для хранения чисел, строк и дат, операторы управления потоком вычислений (в т.ч. условные переходы и циклы) и три типа контейнеров (коллекций) — массивы переменной длины, ассоциативные массивы и вложенные таблицы.
Для администрирования БД и разработки приложений для СУБД Oracle может использоваться ряд инструментов. Примерами программного обеспечения, предоставляемого корпорацией Oracle, являются:
- SQL*Plus — инструмент с интерфейсом типа командной строки, предназначенный для выполнения команд SQL и PL/SQL, интерактивно или из скрипта; широко используется в качестве инсталляционного интерфейса по умолчанию.
- iSQL*Plus — инструмент, доступный из веб-браузера, для выполнения команд SQL.
- Oracle SQL Developer — IDE для разработки SQL.
- Oracle Forms — IDE для разработки приложений, взаимодействующих с БД; широко используется для создания систем ввода данных и графических интерфейсов для БД.
- Oracle Reports — IDE для создания отчетов на основании данных, хранящихся в БД.
- Oracle JDeveloper — IDE, позволяющая разрабатывать программное обеспечение на SQL, PL/SQL и Java.
Примерами программного обеспечения сторонних разработчиков, являются:
- TOAD — Windows IDE, созданная Quest Software, поддерживающая Oracle и ряд других СУБД.
- PL/SQL Developer — IDE, созданная Allround Automations.
Overview of Microsoft Programming Languages
Oracle offers a variety of data access methods from COM-based programming languages, such as Visual Basic and Active Server Pages. These include Oracle Objects for OLE (OO40) and the Oracle Provider for OLE DB. The latter can be used with Microsoft's ActiveX Data Objects (ADO). Server-side programming to COM Automation servers, such as Microsoft Office, is available through the COM Automation Feature. More traditional ODBC access is available through Oracle's ODBC Driver. C/C++ applications can also use the Oracle Call Interface (OCI). These data access drivers have been engineered to provide superior performance with Oracle and expose the database's advanced features which may not be available in third-party drivers.
This section contains the following topics:
PL/SQL
PL/SQL – это разработанное Oracle процедурное расширение языка SQL. Обычно на нем реализуются логические программные модули для приложений. На языке PL/SQL можно писать хранимые процедуры, триггеры, циклы, условные предложения и обработку ошибок. Процедуры на PL/SQL можно откомпилировать и сохранить в базе данных. Блоки, написанные на PL/SQL, можно также исполнять непосредственно с помощью интерактивного инструмента SQL*Plus, имеющегося во всех версиях Oracle. Программные блоки на PL/SQL можно скомпилировать заранее.
Включение Java в СУБД Oracle позволяет программистам, владеющим Java, применить свои знания к разработке приложений для Oracle. Java-приложения можно развертывать на стороне клиента, внутри сервера приложений или в базе данных – в зависимости от конкретных обстоятельств. Oracle Database 11g включает JIT-компилятор Java, по умолчанию активированный.
Некоторых аспектов разработки на Java мы еще коснемся в будущих статьях моего блога.
Большие объекты
Интерес к применению больших объектов (LOB) постоянно растет, особенно в контексте хранения таких нетрадиционных типов данных, как изображения. В базе данных Oracle уже довольно давно можно было хранить большие объекты. В Oracle8 появилась возможность иметь в одной таблице несколько LOB-столбцов. В Oracle Database 10g по существу было снято ограничение на размеры больших объектов. В Oracle Database 11g внедрена технология SecureFiles, что заметно повысило производительность операций выборки и вставки больших объектов. Для LOB-данных с применением SecureFiles поддерживается прозрачное шифрование.
XML DB
Поддержка типа данных XML была встроена в СУБД Oracle9i. Структурированный XML-объект хранится в объектно-реляционной базе данных в соответствии со спецификацией W3C DOM. Встраивание синтаксиса XPath в поисковые запросы на языке SQL отвечает спецификациям группы SQLX. Язык XQuery также поддерживается.
Для грамотного использования Oracle необходимо иметь хорошее понимания языка SQL . Курс " Oracle. Программирование на SQL, PL/SQL и Java " раскрывает полный спектр возможностей языка SQL в Oracle и ряд аспектов неочевидных особенностей построения типовых конструкций БД.
- PL/SQL - процедурный язык , разработанный фирмой Oracle для написания хранимых в БД подпрограмм. PL/SQL обеспечивает общую основу процедурного программирования как в клиентских приложениях, так и на стороне сервера, в том числе хранимых на сервере подпрограмм, пакетов и триггеров базы данных.
- Java - объектный язык , который может использоваться для работы с Oracle в самых разных конфигурациях, в том числе, благодаря встроенной в Oracle Java-машине, в качестве второго языка для хранимых процедур. Java не зависит от конкретных платформ и может служить эффективным средством интеграции БД Oracle с другими приложениями, в том числе в Internet.
Курс сопровождается практическими упражнениями, позволяющими закрепить понимание базовых понятий и освоить основные технические приемы программирования на языках SQL, PL/SQL и Java.
По окончании курса слушатели получают возможность самостоятельного программирования Oracle на этих трех языках для решения задач разработки приложений в архитектуре клиент-сервер и в трехзвенной архитектуре, а также задач администрирования БД.
Основное отличие этого курса от ряда других со схожей тематикой в том, что целью ставится научить конкретных слушателей реальной работе с Oracle на этих языках, а не прочитать формально программу, подготовленную третьей стороной.
Курс предназначен для разработчиков, программистов и администраторов баз данных. Слушатели должны обладать хорошим уровнем компьютерной грамотности, и иметь опыт программирования.
Знания даются по следующим версиям:
- Oracle Database 8i
- Oracle Database 9i
- Oracle Database 10g
- Oracle Database 11g
- Oracle Database 12c
Программа курса "Oracle. Программирование на SQL, PL/SQL и Java"
Введение в Oracle SQL
- Базы данных и реляционная модель
- Базы данных
- СУБД
- Реляционный подход к моделированию данных
- Реализация реляционной СУБД
Другие подходы к моделированию данных и другие типы СУБД - Что такое SQL ?
- История и стандарты
- Oracle-диалект SQL
- PL/SQL
- Предложение CREATE TABLE
- Типы данных в столбцах
- Уточнения в описаниях столбцов
- Указание NOT NULL
- Значения по умолчанию
- Проверка CHECK поступающих в таблицу значений
- Создание таблиц по результатам запроса к БД
- Именование таблиц и столбцов
- Виртуальные столбцы
- Удаление таблиц
- Изменение структуры таблиц
- Логические и технические особенности удаления столбца
- Использование синонимов для именования таблиц
- Переименования
- Справочная информация о таблицах в БД
- Непосредственные значения данных (литералы)
- Числовые значения
- Строки текста
- Моменты и интервалы времени
- "Системные переменные"
- Числовые выражения
- Выражения над строками текста
- Выражения над типом "момент времени"
- Функции
- Скалярные функции
- CASE-выражения
- Скалярный запрос
- Условные выражения
- Отдельные замечания по поводу отсутствия значения в выражениях
- Фразы предложения SELECT
- Общие правила построения предложения SELECT
- Порядок обработки предложения SELECT
- Пример 1 предложения SELECT
- Пример 2 предложения SELECT
- Логическая целостность обработки предложения SELECT
- Фраза FROM предложения SELECT
- Варианты указания столбца
- Столбцы из разных таблиц
- Использование псевдонимов в запросе
- Подзапрос в качестве источника данных
- Специальный случай для запроса-соединения
- Фраза WHERE предложения SELECT
- Общий алгоритм отработки фразы WHERE
- Операторы сравнения для получения условного выражения
- Связки AND, OR и NOT для комбинирования условных выражений
- Условный оператор IS
- Условный оператор LIKE
- Условный оператор BETWEEN
- Условный оператор IN с явно перечисляемым множеством
- Условный оператор IN с множеством, получаемым из БД
- Условия сравнения с подзапросом
- Указание ANY и ALL для сравнения с элементами множества значений
- Условный оператор EXISTS
- Фраза SELECT и функции в предложении SELECT
- Сокращенная запись для группового отбора столбцов
- Выражения во фразе SELECT
- Подзапросы во фразе SELECT
- Уточнение DISTINCT
- Особенности поведения стандартных агрегатных функций в предложении SELECT
- Именование столбцов в результате запроса
- Системная функция ("переменная") ROWNUM и особенности ее использования
- Аналитические функции
- Выражение типа ссылка на курсор
- Фраза ORDER BY предложения SELECT
- Простейшая сортировка
- Упорядочение по значению выражения
- Указание номера столбца
- Двоичное и "языковое" упорядочение строк
- Особенности обработки отсутствующих значений (NULL)
- Фразы GROUP BY и HAVING предложения SELECT
- Пример отработки фразы GROUP BY … HAVING
- Отсутствие значения в выражении для группировки
- Другие примеры
- Указание ROLLUP, CUBE и GROUPING SETS в во фразе GROUP BY
- Фраза CONNECT BY предложения SELECT
- Специальные системные функции в предложениях с CONNECT BY
- Упорядочение результата
- Фраза WITH предварительной формулировки подзапросов
- Комбинирование предложений SELECT
- Комбинирование оператором UNION
- Комбинирование оператором INTERSECT
- Комбинирование оператором MINUS
- Подзапросы
- Операция соединения в предложении SELECT
- Виды соединений
- Новый синтаксис в версии 9
- Особенности выполнения операции соединения
- Добавление новых строк
- Явное добавление строки
- Добавление строк, полученных подзапросом
- Добавление в несколько таблиц одним оператором
- Изменение существующих значений полей
- Использование умолчательных значений в INSERT и UPDATE
- Удаление строк из таблицы
- Выборочное удаление
- Вариант полного удаления
- Комбинирование UPDATE, INSERT и DELETE в одном операторе
- Логическая целостность операторов обновления данных таблиц и реакция на ошибки
- Реакция на ошибки в процессе исполнения
- Фиксация изменений в БД
- Данные о системном номере изменения для строки
- Ускорение выполнения COMMIT
- Чтение старых значений строк таблицы
- Восстановление таблиц и данных ранее удаленных таблиц
- Разновидности схемных ограничений целостности
- Ограничение NOT NULL
- Первичные ключи
- Уникальность значений в столбцах
- Внешние ключи
- Дополнительное условие для значения в поле строки
- Дополнительное условие, связывающее значения в нескольких полях строки
- Добавление ограничения при наличии нарушений
- Приостановка проверки схемных ограничений в пределах транзакции
- Отключение и включение схемных ограничений целостности
- Технология включения и выключения схемных ограничений целостности
- Более сложные правила целостности
- Основные ("базовые") и виртуальные таблицы
- Обновление виртуальных таблиц
- Ограничения прямой модификации данных через виртуальные таблицы
- Запрет непосредственных обновлений
- Сужение возможности непосредственных обновлений
- Виртуальные таблицы с хранием данных
- Особенности именованых виртуальных таблиц
- Неименованые виртуальные таблицы без хранения данных
- Хранимые объекты
- Простой пример
- Использование свойств и методов объектов
- Использование ссылок на объект
- Коллекции
- Вложенные таблицы
- Массивы VARRAY
- Тип XMLTYPE
- Простой пример
- Таблицы данных XMLTYPE
- Преобразование табличных данных в тип XMLTYPE
- Тип ANYDATA
- Генератор уникальных номеров
- Каталог операционной системы
- Таблицы с данными временного хранения
- Ссылка на другую БД
- Подпрограммы
- Индексы
- Индексы для проверки схемных ограничений целостности
- Таблицы с внешним хранением данных
- Транзакции в Oracle
- Примеры блокировок данных транзакциями
- Разновидности блокировок
- Неявные блокировки при операциях DML
- Влияние внешних ключей
- Явная блокировка таблиц (тип TM) командой LOCK
- Явная блокировка отдельных строк таблиц
- Недокументированная разновидность групповой блокировки
- Блокировки предложениями DDL
- Некоторые примеры составления запросов
- Вопрос к БД
- "Очевидное", но неправильное решение
- Правильные решения
- Решение типа top-N (начиная с версии 8.1.5)
- Решение с использованием аналитических функций ранжирования
Введение в PL/SQL
ВВЕДЕНИЕ В ПРОГРАММИРОВАНИЕ ORACLE НА JAVA
В современном мире сложно обойтись без информационных технологий и их производных - компьютеров, мобильных телефонов, интернета и т.д., особенно в крупных компаниях и государственных организациях, работающих с большим количеством людей, а не только с парой VIP-клиентов, как это может быть в случае небольшой компании. А там, где есть большое количество контрагентов, заявителей и т.д. - не обойтись без баз данных, необходимых для обработки информации. Естественно, что времена гроссбухов и карточек, памятных многим по библиотекам, давно прошли, сегодня используются персональные компьютеры и электронные базы данных.
Сегодня невозможно представить работу крупнейших компаний, банков или государственных организаций без использования баз данных и средств Business Intelligence . Базы данных позволяют нам хранить и получать доступ к большим объемам информации, а система управления базами данных (СУБД) — осуществлять менеджмент доступных хранилищ информации.
В Учебном центре « Интерфейс» Вы научитесь эффективно использовать системы управления базами данных: быстро находить нужную информацию, ориентироваться в схеме базы данных, создавать запросы, осуществлять разработку и создание баз данных.
Обучение позволит Вам не только получить знания и навыки, но и подтвердить их, сдав соответствующие экзамены на статус сертифицированного специалиста . Опытные специалисты по СУБД Microsoft SQL Server или Oracle могут быть заинтересованы в изучении систем бизнес-аналитики. Это задачи достаточно сложные, использующие громоздкий математический аппарат, но они позволяют не только анализировать происходящие процессы, но и делать прогнозы на будущее, что востребовано крупными компаниями. Именно поэтому специалисты по бизнес-аналитике востребованы на рынке, а уровень оплаты их труда весьма и весьма достойный, хотя и квалифицированным специалистам по базам данных, администраторам и разработчикам, жаловаться на низкий уровень дохода тоже не приходится. Приходите к нам на курсы и получайте востребованную и высокооплачиваемую профессию. Мы ждем Вас!
В конце обучения на курсах проводится итоговая аттестация в виде теста или путём выставления оценки преподавателем за весь курс обучения на основании оценок, полученных обучающимся при проверке усвоения изучаемого материала на основании оценок за практические работы, выполненные в процессе обучения.
Учебный центр "Интерфейс" оказывает консалтинговые услуги по построению моделей бизнес-процессов, проектированию информационных систем, разработке структуры баз данных и т.д.
Учебный центр "Интерфейс" - в десятке ведущих учебных центров России в сфере IT.
-
У нас преподают такие известные эксперты, как Пржиялковский В.В., Леоненков А.В., Новичков А.Н., Золотухина Е.Б., Зайцев А.Л., Зайцев Р.А., Большаков О.Н., Мирончик И.Я., Саксонов А.А., Пригодина Н.Ю.
Учебный центр "Интерфейс" проводит авторизованные курсы по продуктам компаний Microsoft, ERwin, Embarcadero (CodeGear), Postgres Professional
Подтвердить полученные знания можно, сдав сертификационные экзамены. Учебный центр "Интерфейс" является авторизованным центром тестирования Pearson VUE
Учебный центр "Интерфейс" оказывает консалтинговые услуги по построению моделей бизнес-процессов, проектированию информационных систем, разработке структуры баз данных и т.д.
Возможна корректировка программ курсов по желанию заказчиков! Мы расскажем Вам о том, что интересует именно Вас, а не только о том, что жестко зафиксировано в программе курса.
This chapter presents brief overviews of Oracle application development systems.
This chapter contains the following topics:
Обработка ошибок
В PL/SQL любая ошибка или предупреждение называется исключением (exception). В PL/SQL есть кое-какие определенные внутренне ошибки, но также допускается определять и свои собственные. При возникновении любой ошибки инициируется исключение, и управление переходит в отвечающий за обработку исключений раздел программы PL/SQL. В случае определения своих собственных ошибочных ситуаций необходимо обеспечивать инициирование исключений за счет применения специального оператора RAISE.
Ниже приведен пример использования оператора RAISE для обработки исключений:
Неявные курсоры
В приведенном ниже блоке кода PL/SQL оператор SELECT, например, предусматривает применение неявного курсора:
Числа Фибоначчи:
Этот пример использует итеративное определение чисел Фибоначчи. Уже вычисленные числа хранятся в структуре данных varray — аналоге массива.
Управляющие структуры в PL/SQL
В PL/SQL предлагается несколько видов управляющих структур (control structures), которые позволяют обеспечивать итерацию кода или условное выполнение определенных операторов. Все они кратко описаны в последующих разделах моего блога.
Использование DML-операторов в PL/SQL
Любые операторы INSERT, DELETE или UPDATE работают в PL/SQL точно так же, как в обычном SQL. Однако в PL/SQL после каждого из них можно также применять оператор COMMIT, как показано ниже:
Условное управление
Главной разновидностью условной управляющей структуры в PL/SQL является оператор IF, который обеспечивает условное выполнение операторов. Он может применяться в одной из трех следующих форм: IF-THEN, IF-THEN-ELSE и IF-THEN-ELSEIF. Ниже приведен пример простого оператора IF-THEN-ELSEIF:
Overview of Oracle C++ Call Interface (OCCI)
The Oracle C+ + Call Interface (OCCI) is a C++ API that lets you use the object-oriented features, native classes, and methods of the C++ programing language to access the Oracle database. The OCCI interface is modeled on the JDBC interface and, like the JDBC interface, is easy to use. OCCI is built on top of OCI and provides the power and performance of OCI using an object-oriented paradigm.
OCI supports the entire Oracle feature set and provides efficient access to both relational and object data, but it can be challenging to use--particularly if you want to work with complex, object datatypes. Object types are not natively supported in C, and simulating them in C is not easy. OCCI provides a simpler, object-oriented interface to the functionality of OCI. It does this by defining a set of wrappers for OCI. Developers can use the underlying power of OCI to manipulate objects in the server through an object-oriented interface that is significantly easier to program.
OCCI Associative Relational and Object Interfaces
The asso ciative relational API and object classes provide SQL access to the database. Through these interfaces, SQL is run on the server to create, manipulate, and fetch object or relational data. Applications can access any dataype on the server, including the following:
OCCI Navigational Interface
The navigation al interface is a C++ interface that lets you seamlessly access and modify object-relational data in the form of C++ objects without using SQL. The C++ objects are transparently accessed and stored in the database as needed.
With the OCCI navigational interface, you can retrieve an object and navigate through references from that object to other objects. Server objects are materialized as C++ class instances in the application cache. An application can use OCCI object navigational calls to perform the following functions on the server's objects:
Create, access, lock, delete, and flush objects
Get references to the objects and navigate through them
CamelCase:
В этом примере используются регулярные выражения Oracle SQL. Первым действием функция regexp_replace заменяет все цифры на пробелы — это необходимо для initcap , которая считает цифры частью слов и не переводит буквы, следующие за цифрами, в верхний регистр. Затем применяется initcap , которая переводит все слова в нижний регистр, а их первые буквы — в верхний. Наконец, второе использование regexp_replace удаляет из строки все знаки пунктуации и пробелы.
CamelCase:
В этом примере используются регулярные выражения Oracle SQL в сочетании с PL/SQL. Функция regexp_substr возвращает подстроку text , являющуюся соответствием заданному регулярному выражению номер occurrence .
Хотя язык SQL и является легким в изучении и обладает массой мощных функциональных возможностей, он не позволяет создавать такие процедурные конструкции, которые возможны в языках третьего поколения вроде C. Язык PL/SQL является собственным расширением языка SQL от Oracle и предлагает функциональность серьезного языка программирования. Одно из главных его преимуществ состоит в том, что он позволяет использовать в базе данных такие программные единицы, как процедуры и пакеты, и тем самым увеличивать возможность повторного использования кода и его производительность.
Overview of Oracle Objects for OLE
Oracle Objects for OLE (OO4O) allows easy access to data stored in Oracle databases with any programming or scripting language that supports the Microsoft COM Automation and ActiveX technology. This includes Visual Basic, Visual C++, Visual Basic For Applications (VBA), IIS Active Server Pages (VBScript and JavaScript), and others.
OO4O consists of the following software layers:
OO4O Automation Server
The OO 4O Automation Server is a set of COM Automation objects for connecting to Oracle database servers, executing SQL statements and PL/SQL blocks, and accessing the results.
OO4O provides key features for accessing Oracle databases in environments ranging from the typical two-tier client/server applications, such as those developed in Visual Basic or Excel, to application servers deployed in multitiered application server environments, such as Web server applications in Microsoft Internet Information Server (IIS) or Microsoft Transaction Server.
Oracle Data Control
The Oracle Data Control (ODC) is an ActiveX Control designed to simplify the exchange of data between an Oracle database and visual controls, such edit, text, list, and grid controls in Visual Basic and other development tools that support custom controls.
ODC acts an agent to handle the flow of information from an Oracle database and a visual data-aware control, such as a grid control, that is bound to it. The data control manages various user interface (UI) tasks such as displaying and editing data. It also runs and manages the results of database queries.
The Oracle Objects for OLE C++ Class Library
The Oracle Objects for OLE C++ Class Library is a collection of C++ classes that provide programmatic access to the Oracle Object Server. Although the class library is implemented using OLE Automation, neither the OLE development kit nor any OLE development knowledge is necessary to use it. This library helps C++ developers avoid writing COM client code for accessing the OO4O interfaces.
For programmers using Oracle Provider for OLE DB, ADO (ActiveX Data Objects) provides an automation layer that exposes an easy programming model.
Базовый блок PL/SQL
Блоком в PL/SQL называется исполняемая программа. Блок кода PL/SQL, независимо от того, инкапсулируется он внутри какой-то программной единицы наподобие процедуры или задается в виде анонимного блока в свободной форме, состоит из следующих структур, которые представляют собой четыре ключевых оператора, только два из которых являются обязательными.
- DECLARE . Этот оператор является необязательным и представляет собой то место, в котором при желании объявляются переменные и курсоры программы.
- BEGIN . Этот оператор является обязательным и указывает, что далее будут идти операторы SQL и PL/SQL, т.е. обозначает начало блока кода PL/SQL.
- EXCEPTION . Этот оператор является необязательным и описывает методы обработки ошибок.
- END . Этот оператор является обязательными и обозначает конец блока кода PL/SQL.
Ниже приведен пример простого блока кода PL/SQL:
Числа Фибоначчи:
Этот пример демонстрирует использование оператора model , доступного начиная с версии Oracle 10g и позволяющего обработку строк запроса как элементов массива. Каждая строка содержит два поля — само число Фибоначчи и конкатенация всех чисел, меньше или равных ему. Итеративная конкатенация чисел в том же запросе, в котором они генерируются, выполняется проще и быстрее, чем агрегация как отдельное действие.
Introduction to Oracle Application Development Languages
Oracle Database developers have a choice of lan guages for developing applications—C, C++, Java, COBOL, PL/SQL, and Visual Basic. The entire functionality of the database is available in all the languages. All language-specific standards are supported. Developers can choose the languages in which they are most proficient or one that is most suitable for a specific task. For example an application might use Java on the server side to create dynamic Web pages, PL/SQL to implement stored procedures in the database, and C++ to implement computationally intensive logic in the middle tier.
Oracle also provides the Pro* series of precompilers, which allow you to embed SQL and PL/SQL in your C, C++, COBOL, or FORTRAN application programs.
Oracle Database Application Developer's Guide - Fundamentals for information on how to choose a programming environment
Конструкции циклов в PL/SQL
Конструкции циклов в PL/SQL позволяют обеспечивать итеративное выполнение кода либо заданное количество раз, либо до тех пор, пока определенное условие не станет истинным или ложным. В следующих подразделах описываются основные виды этих конструкций.
Простой цикл
Конструкция простого цикла подразумевает помещение набора SQL-операторов между ключевыми словами LOOP и END LOOP. Оператор EXIT завершает цикл. Конструкция простого цикла применяется тогда, когда точно неизвестно, сколько раз должен выполняться цикл. В случае ее применения решение о том, когда цикл должен завершаться, принимается на основании содержащейся между операторами LOOP и END LOOP логики.
В следующем примере цикл будет выполняться до тех пор, пока значение quality_grade не достигнет 6:
Еще один простой вид цикла позволяет выполнять конструкция LOOP. EXIT. WHEN, в которой длительность цикла регулируется оператором WHEN. Внутри WHEN указывается условие, и когда это условие становится истинным, цикл завершается. Ниже показан простой пример:
Цикл WHILE
Цикл WHILE указывает, что определенный оператор должен выполняться до тех пор, пока определенное условие остается истинным. Обратите внимание на то, что условие вычисляется за пределами цикла, и вычисляется оно всякий раз, когда выполняются операторы, указанные между операторами LOOP и END LOOP. Когда условие перестает быть истинным, происходит выход из цикла. Ниже приведен пример цикла WHILE:
Цикл FOR
Цикл FOR применяется тогда, когда требуется, чтобы оператор выполнялся определенное количество раз. Он имитирует классический цикл do, который существует в большинстве языков программирования. Ниже приведен пример цикла FOR:
Использование оператора SELECT в PL/SQL
При использовании оператора SELECT в PL/SQL нужно сохранять извлекаемые значения в переменных, как показано ниже:
Объявление переменных в PL/SQL
В операторе DECLARE можно объявлять как переменные, так и константы. Прежде чем использовать какую-либо переменную ее нужно обязательно объявить. Переменная в PL/SQL может представлять собой как переменную встроенного типа, такого как DATE, NUMBER, VARCHAR2 или CHAR, так и составного вроде VARRAY. Помимо этого, в PL/SQL еще применяются такие типы данных, как BINARY_INTEGER и BOOLEAN.
Ниже приведены некоторые типичные примеры объявления переменной в PL/SQL:
Помимо переменных также можно объявлять и константы, как показано в следующем примере:
Еще можно использовать атрибут %TYPE и с его помощью указывать при объявлении переменной, что ее тип данных должен совпадать с типом данных определенного столбца таблицы:
Посредством атрибута %ROWTYPE можно указывать, что тип данных записи (строки) должен совпадать с типом данных определенной таблицы базы данных. Например, в следующем коде указано, что запись DeptRecord должна содержать все те же столбцы, что и таблица department, а типы данных и длина этих столбцов в ней должны выглядеть абсолютно идентично:
Overview of Oracle Type Translator
The Oracle type translator (OTT) is a program that automatically generates C language structure declarations corresponding to object types. It generates C++ class definitions for Oracle object types that can be used by OCCI applications for a native C++ object interface. OTT uses the Pro*C precompiler and the OCI server access package.
Факториал:
Этот пример демонстрирует использование оператора model , доступного начиная с версии Oracle 10g и позволяющего обработку строк запроса как элементов массива. Каждая строка содержит два поля — номер строки n и его факториал f.
Записи в PL/SQL
Записи (records) в PL/SQL позволяют воспринимать взаимосвязанные данные как одно целое. Они могут содержать поля, каждое из которых может представлять отдельный элемент. Можно использовать атрибут ROW%TYPE и с его помощью объявлять записью столбцы определенной таблицы, что подразумевает применение таблицы в качестве шаблона курсора, а можно создавать и свои собственные записи. Ниже приведен простой пример записи:
Для ссылки на отдельное поле внутри записи применяется точечное обозначение, как показано ниже:
Open Database Connectivity
Open database co nnectivity (ODBC), is a database access protocol that lets you connect to a database and then prepare and run SQL statements against the database. In conjunction with an ODBC driver, an application can access any data source including data stored in spreadsheets, like Excel. Because ODBC is a widely accepted standard API, applications can be written to comply to the ODBC standard. The ODBC driver performs all mappings between the ODBC standard and the particular database the application is accessing. Using a data source-specific driver, an ODBC compliant program can access any data source without any more development effort.
Oracle provides the ODBC interface so that applications of any type that are ODBC compliant can access the Oracle database using the ODBC driver provided by Oracle. For example, an application written in Visual Basic can use ODBC to access the Oracle database.
Подсистема Oracle Spatial Option
Подсистема Oracle Spatial Option включена только в редакцию Oracle Enterprise Edition. Она позволяет оптимизировать выборку и отображение данных, привязанных к координатам, и применяется при разработке геоинформационных систем (ГИС). Некоторые производители таких систем уже включили ее в свои продукты и применяют в качестве механизма поиска и выборки.
Явные курсоры
Явные курсоры создаются разработчиком приложения и облегчают операции с набором строк, которые могут обрабатываться друг за другом. Они применяются всегда, когда известно, что SQL-оператор будет возвращать более одной строки. Обратите внимание, что явный курсор необходимо всегда объявлять в начале блока PL/SQL внутри раздела DECLARE, в отличие от неявного курсора, на который никогда не нужно ссылаться в коде.
После объявления явного курсора он будет проходить через следующие этапы обработки.
- Конструкция OPEN будет определять строки, которые находятся в курсоре, и делать их доступными для программы PL/SQL.
- Команда FETCH будет извлекать данные из курсора в указанную переменную.
- По завершении процесса обработки курсор должен всегда закрываться явным образом.
В листинге А.4 показан пример создания курсора и затем его использования внутри цикла.
Программирование баз данных Oracle
Описываемый стандартом ANSI язык Structured Query Language (SQL) включает базовые средства манипулирования данными, управления транзакциями и извлечения записей из базы данных. Бизнес-пользователи по большей части взаимодействуют с Oracle посредством приложений или инструментов бизнес-анализа, которые предоставляют интерфейсы, скрывающие SQL и присущую ему сложность.
Oracle и веб-службы
Начиная с версии Oracle Database 11g, СУБД может служить поставщиком веб-служб, реализованных в базе данных с помощью технологии XML DB. Веб-службы позволяют создавать запросы на языках SQL или XQuery и получать результаты в формате XML либо вызывать PL/SQL-функции или функции в составе пакета и получать их результаты. Реализация XQuery в Oracle Database 11g поддерживает пока еще обсуждаемый стандарт JSR-225 и включает ряд мер, повышающих производительность.
Overview of Oracle Call Interface (OCI)
The Oracle Call Inte rface (OCI) is an application programming interface (API) that lets you create applications that use the native procedures or function calls of a third-generation language to access an Oracle database server and control all phases of SQL statement execution. OCI supports the datatypes, calling conventions, syntax, and semantics of C and C++. OCI can directly access data in Oracle tables or can enqueue and dequeue data into or out of Oracle Streams.
OCI provides the following:
Improved performance and scalability through the use of system memory and network connectivity.
Consistent interfaces for dynamic session and transaction management in a two-tier client/server or multitier environment.
Comprehensive support for application development using Oracle objects.
Access to external databases.
Applications that can service an increasing number of users and requests without additional hardware investments.
OCI lets you manipulate data and schemas in an Oracle database using a host programming language, such as C. It provides a library of standard database access and retrieval functions in the form of a dynamic runtime library (OCI library) that can be linked in an application at runtime. This eliminates the need to embed SQL or PL/SQL within 3GL programs.
An important component of OCI is a set of calls to allow application programs to use a workspace called the object cache. The object cache is a memory block on the client side that allows programs to store entire objects and to navigate among them without round trips to the server.
The object cache is completely under the control and management of the application programs using it. The Oracle database server has no access to it. The application programs using it must maintain data coherency with the server and protect the workspace against simultaneous conflicting access.
OCI provides functions to:
Access objects on the server using SQL
Access, manipulate and manage objects in the object cache by traversing pointers or REFs
Convert Oracle dates, strings and numbers to C datatypes
Manage the size of the object cache's memory
Create transient type descriptions. Transient type descriptions are not stored persistently in the database. Compatibility must be set to Oracle9 i or higher.
OCI improves concurrency by allowing individual objects to be locked. It improves performance by supporting complex object retrieval.
OCI developers can use the object type translator to generate the C datatypes corresponding to a Oracle object types.
Hello, World!:
Процедуры, функции и пакеты
Процедуры в PL/SQL могут применяться для выполнения различных DML-операций. Ниже приведен пример простой процедуры Oracle:
В отличие от процедур, функции в PL/SQL возвращают значение, как показано в следующем примере:
Пакеты (packages) в Oracle представляют собой объекты, которые обычно состоят из нескольких взаимосвязанных процедур и функций и, как правило, применяются для выполнения какой-нибудь функции приложения путем вызова всех находящихся внутри пакета взаимосвязанных процедур и функций. Пакеты являются чрезвычайно мощным средством, поскольку могут содержать большие объемы функционального кода и многократно выполняться несколькими пользователями.
Каждый пакет обычно состоит из двух частей: спецификации и тела. В спецификации пакета объявляются все входящие в его состав переменные, курсоры и подпрограммы (процедуры и функции), а в теле пакета содержится фактический код этих курсоров и подпрограмм.
В листинге А.6 приведен пример простого пакета Oracle.
При желании использовать пакет emp_pkg для награждения какого-то сотрудника надбавкой к зарплате, все, что потребуется сделать — выполнить следующую команду:
СУБД Oracle обычно используется для хранения данных, которые извлекаются приложениями. Описанные в этом разделе средства и соответствующие продукты применяются для создания таких приложений. Мы решили отдельно рассмотреть программирование баз данных и возможности их расширения. Далее в моем блоге я опишу инструменты разработки и другие продукты, встроенные в СУБД, отвечающие особым потребностям развертывания приложений.
Средства поиска в Oracle
В состав продуктов Oracle Database и Application Server входит инструмент поиска Ultra Search. Обычно он применяется для сбора информации о местонахождении различных текстовых данных, хранящихся в корпоративной сети. Выборка документов базируется на правах доступа конкретного пользователя. Кроме того, предлагается альтернативная система Secure Enterprise Search, обладающая большей гибкостью в среде, не основанной целиком на продуктах Oracle.
Квадратное уравнение:
Этот пример тестировался в SQL*Plus, TOAD и PL/SQL Developer.
Чистый SQL позволяет вводить переменные в процессе исполнения запроса в виде заменяемых переменных. Для определения такой переменной ее имя (в данном случае A, B и C) следует использовать с амперсандом & перед ним каждый раз, когда нужно сослаться на эту переменную. Когда запрос выполняется, пользователь получает запрос на ввод значений всех заменяемых переменных, использованных в запросе. После ввода значений каждая ссылка на такую переменную заменяется на ее значение, и полученный запрос выполняется.
Существует несколько способов ввести значения для заменяемых переменных. В данном примере первая ссылка на каждую переменную предваряется не одинарным, а двойным амперсандом && . Таким образом значение для каждой переменной вводится только один раз, а все последующие ссылки на нее будут заменены тем же самым значением (при использовании одиночного амперсанда в SQL*Plus значение для каждой ссылки на одну и ту же переменную приходится вводить отдельно). В PL/SQL Developer ссылки на все переменные должны предваряться одиночным знаком & , иначе будет возникать ошибка ORA-01008 “Not all variables bound”.
Следует отметить, что ссылки заменяются на значения “как есть”, поэтому отрицательные коэффициенты следует вводить в скобках.
Первая строка примера задает символ для десятичного разделителя, который используется при преобразовании чисел-корней в строки.
Сам запрос состоит из четырех разных запросов. Каждый запрос возвращает строку, содержащую результат вычислений, в одном из случаев (A=0, D=0, D>0 и D<0) и ничего — в трех остальных случаях. Результаты всех четырех запросов объединяются, чтобы получить окончательный результат.
Поддержка национальных языков
Подсистема поддержки национальных языков (National Language Support, NLS) предоставляет наборы символов и прочие данные, например форматы записи чисел и дат, для различных языков. В Oracle Database 11g добавлена поддержка Unicode 5.0. Кодировка Unicode позволяет хранить все данные или постепенно переводить на нее отдельные столбцы. Кодировки UTF-8 и UTF-16 обеспечивают поддержку более 57 языков и 200 наборов символов. Многие вещи локализованы изначально (например, форматы данных), но при желании с помощью утилиты Oracle Locale Builder можно создать нестандартную локаль.
Включен также инструментарий Globalization Toolkit для создания приложений, поддерживающих несколько языков.
Факториал:
SQL не поддерживает циклы, рекурсии или пользовательские функции. Данный пример демонстрирует возможный обходной путь, использующий:
- псевдостолбец level для создания псевдотаблиц t1 и t2 , содержащих числа от 1 до 16,
- агрегатную функцию sum , позволяющую суммировать элементы множества без явного использования цикла,
- и математические функции ln и exp , позволяющие заменить произведение (необходимое для вычисления факториала) на сумму (предоставляемую SQL).
Строка “0! = 1” не войдет в набор строк, полученный в результате, т.к. попытка вычислить ln(0) приводит к исключению.
Курсорный цикл FOR
Обычно при использовании явных курсоров требуется открывать курсор, извлекать данные и по завершении закрывать курсор. Курсорный цикл FOR позволяет выполнять эти процедуры по открытию, извлечению и закрытию автоматически, чем очень сильно упрощает дело. В листинге А.5 показан пример применения конструкции курсорного цикла FOR.
Драйверы базы данных
Hello, World!:
Строка ‘Hello, World!’ выбирается из встроенной таблицы dual , используемой для запросов, не требующих обращения к настоящим таблицам.
Примеры:
Подсистема Oracle Multimedia
Подсистема Oracle Multimedia (бывшая interMedia) предоставляет средства манипулирования текстом, изображениями, аудио- и видеоинформацией, географическими координатами, а именно:
- часть Multimedia, относящаяся к тексту (Oracle Text), может распознать смысл документа, производя в нем поиск по темам и ключевым фразам;
- часть Multimedia, относящаяся к изображениям, умеет сохранять и извлекать изображения в различных форматах; начиная с версии Oracle Database 11g, поддерживается формат DICOM медицинских изображений;
- части Multimedia, относящиеся к аудио- и видеоинформации, способны сохранять и извлекать аудио- и видеоклипы соответственно;
- часть Multimedia, относящаяся к геоинформации, умеет извлекать данные о пространственных координатах.
Числа Фибоначчи:
SQL не поддерживает циклы или рекурсии, кроме того, конкатенация полей из разных строк таблицы или запроса не является стандартной агрегатной функцией. Данный пример использует:
- формулу Бине и математические функции ROUND , POWER и SQRT для вычисления n-ого числа Фибоначчи;
- псевдостолбец level для создания псевдотаблицы t1, содержащей числа от 1 до 16;
- встроенную функцию SYS_CONNECT_BY_PATH для упорядоченной конкатенации полученных чисел.
Overview of C/C++ Programming Languages
This section contains the following topics:
Языки третьего поколения (3GL)
Программисты могут обращаться к базе данных Oracle из программ, написанных на языках C, C++, Java или COBOL, встраивая в них команды SQL. Перед тем как подавать такое приложение на вход платформенного компилятора, его необходимо пропустить через прекомпилятор. Последний заменяет команды SQL вызовами библиотечных функций, понятных стандартному компилятору. Oracle поддерживает такую методику с помощью дополнительного прекомпилятора Pro*C для языков C и C++ и прекомпилятора Pro*COBOL для языка COBOL.
В последние версии Oracle включен прекомпилятор SQLJ для языка Java, который заменяет команды SQL обращениями к библиотеке времени выполнения SQLJ, также написанной на Java.
Интерфейс уровня вызовов Oracle
Опытный программист, стремящийся добиться максимальной производительности, может определить команду SQL в виде символьной строки объемлющего языка, затем явно разобрать эту команду, привязать к ней переменные и выполнить ее с помощью интерфейса уровня вызовов Oracle (Oracle Call Interface, OCI). Интерфейс OCI гораздо детальнее предыдущих, для работы с ним и последующей отладки программисту придется затратить много времени и усилий. Разработка приложений с помощью OCI может занять много времени, но расширение функциональности и повышение быстродействия оправдают дополнительные затраты. Например, если механизм обеспечения высокой доступности реализован так, что несколько систем разделяют общие диски с помощью подсистемы Real Application Clusters, то OCI дает возможность написать программу, которая позволит пользователю прозрачно присоединиться ко второму серверу, если первый выйдет из строя.
Использование курсоров
Курсором (cursor) в Oracle называется указатель на область в памяти, в которой содержится результирующий набор SQL-запроса, позволяющий индивидуально обрабатывать содержащиеся в результирующем наборе строки. Курсоры, которые используются Oracle при выполнении DML-операторов, называются неявными, а курсоры, которые создают и используют разработчики приложений — явными.
Overview of Pro*C/C++ Precompiler
An Oracle precompiler is a p rogramming tool that lets you embed SQL statements in a high-level source program. The precompiler accepts the host program as input, translates the embedded SQL statements into standard Oracle run-time library calls, and generates a source program that you can compile, link, and run in the usual way. Oracle precompilers are available (but not on all systems) for C/C++, COBOL, and FORTRAN.
The Oracle Pro*C/C++ Precompiler lets you embed SQL statements in a C or C++ source file. Pro*C/C++ reads the source file as input and outputs a C or C++ source file that replaces the embedded SQL statements with Oracle runtime library calls, and is then compiled by the C or C++ compiler.
Unlike many application development tools, Pro*C/C++ lets you create highly customized applications. For example, you can create user interfaces that incorporate the latest windowing and mouse technology. You can also create applications that run in the background without the need for user interaction.
Furthermore, Pro*C/C++ helps you fine-tune your applications. It allows close monitoring of resource use, SQL statement execution, and various runtime indicators. With this information, you can change program parameters for maximum performance.
Although precompiling adds a step to the application development process, it saves time. The precompiler, not you, translates each embedded SQL statement into calls to the Oracle runtime library (SQ LLIB). The Pro*C/C++ precompiler also analyzes host variables, defines mappings of structures into columns, and, with SQLCHECK=FULL , performs semantic analysis of the embedded SQL statements.
The Oracle Pro*C/C++ precompiler also allows programmers to use object datatypes in C and C++ programs. Pro*C developers can use the Object Type Translator to map Oracle object types and collections into C datatypes to be used in the Pro*C application.
Pro*C provides compile time type checking of object types and collections and automatic type conversion from database types to C datatypes. Pro*C includes an EXEC SQL syntax to create and destroy objects and offers two ways to access objects in the server:
SQL statements and PL/SQL functions or procedures embedded in Pro*C programs
A simple interface to the object cache, where objects can be accessed by traversing pointers, then modified and updated on the server
Pro*C/C++ Programmer's Guide for a complete description of the Pro*C precompiler
Dynamic Creation and Access of Type Descriptions
Oracle provides a C API to enable dynamic creation and access of type descriptions. Additionally, you can create transient type descriptions, type descriptions that are not stored persistently in the DBMS.
The C API enables creation and access of OCIAnyData and OCIAnyDataSet .
The OCIAnyData type models a self descriptive (with regard to type) data instance of a given type.
The OCIAnyDataSet type models a set of data instances of a given type.
Oracle also provides SQL datatypes (in Oracle's Open Type System) that correspond to these datatypes.
SYS.ANYTYPE corresponds to OCIType
SYS.ANYDATA corresponds to OCIAnyData
SYS.ANYDATASET corresponds to OCIAnyDataSet
You can create database table columns and SQL queries on such data.
The C API uses the following terms:
Transient types - Type descriptions (type metadata) that are not stored persistently in the database.
Persistent types - SQL types created using the CREATE TYPE SQL statement. Their type descriptions are stored persistently in the database.
Self-descriptive data - Data encapsulating type information along with the actual contents. The ANYDATA type ( OCIAnyData ) models such data. A data value of any SQL type can be converted to an ANYDATA , which can be converted back to the old data value. An incorrect conversion attempt results in an exception.
Self-descriptive MultiSet - Encapsulation of a set of data instances (all of the same type), along with their type description.
Написание исполняемых операторов PL/SQL
После оператора BEGIN можно начинать вводить все свои желаемые SQL-операторы. Выглядеть эти операторы должны точно так же, как обычные операторы SQL. При использовании операторов SELECT и INSERT в PL/SQL, правда, необходимо помнить об особенностях, о которых более подробно речь пойдет в следующих разделах.
Курсорные переменные
Курсорные переменные указывают на текущую строку в многострочном результирующем наборе. В отличие от обычного курсора, однако, курсорная переменная является динамической, что позволяет присваивать ей новые значения и передавать ее другим процедурами и функциям. Создаются курсорные переменные в PL/SQL следующим образом.
Сначала определяется тип REF CURSOR, как показано ниже:
Затем объявляются сами курсорные переменные типа EmpCurType в анонимном блоке кода PL/SQL либо в процедуре (или функции):
Атрибуты курсоров
В примере, приведенном в листинге А.4, для указания того, когда цикл должен завершаться, используется специальный атрибут курсора %NOTFOUND. Атрибуты курсоров очень полезны при работе с явными курсорами. Наиболее важные из них перечислены ниже.
- %ISOPEN. Булевский атрибут, который после завершения выполнения SQL-оператора возвращает false. До тех пор, пока курсор остается открытым, он возвращает true.
- %FOUND. Булевский атрибут, который выполняет проверку на предмет наличия подходящих для SQL-оператора строк, т.е. остались ли у курсора еще какие-то строки для извлечения.
- %NOTFOUND. Булевский атрибут, который сообщает о том, что не удалось обнаружить ни одной подходящей для SQL-оператора строки, т.е. у курсора больше не осталось никаких строк для извлечения.
- %ROWCOUNT. Атрибут, который возвращает информацию о том, сколько курсору удалось извлечь строк на текущий момент.
Управление контентом в Oracle
К средствам управления контентом относится подсистема Content Database Option, позволяющая сохранять в базе данных документы, а также приложения для управления контентом компании Stellent, приобретенной Oracle в 2007 году: Universal Content Management, Universal Records Management и Information Rights Management.
Расширяемость базы данных
Работа в Интернете и в корпоративных сетях интранет выдвигает новые требования к хранению данных нетрадиционных типов и манипулированию ими. Если нужно расширить стандартную функциональность базы данных для хранения изображений, аудио, видео, пространственных данных и временных рядов, то эти возможности можно добавить путем расширения стандартного языка SQL. Дополнительную информацию об этом вы найдете в новых моих статьях.
Объектно-ориентированное программирование
Инфраструктура объектов для поддержки объектно-ориентированного подхода в программировании существовала со времен Oracle8i. Например, программист мог создать определяемый пользователем тип данных, содержащий методы и атрибуты. Поддержка объектов в Oracle включает механизм Object Views, с помощью которого объектно-ориентированные программы могут работать с уже хранящимися в базе реляционными данными. Хранить объекты в базе данных можно в виде массивов переменной длины (VARRAY), вложенных таблиц или индекс-таблиц (index organized tables, IOT). Объектно-ориентированные средства Oracle мы обсудим в будущих статьях блога.
Факториал:
Этот пример демонстрирует итеративное вычисление факториала средствами PL/SQL.
Читайте также: