Oracle pl sql что это
Oracle Database Globalization Support Guide for more information about the database character set
3.1.2 National Character Set
PL/SQL uses the national character set to represent character values of data types NCHAR , NVARCHAR2 and NCLOB .
"SQL Data Types" for information about these data types
Oracle Database Globalization Support Guide for more information about the national character set
3.1.3 About Data-Bound Collation
Collation (also called sort ordering) is a set of rules that determines if a character string equals, precedes, or follows another string when the two strings are compared and sorted.
Different collations correspond to rules of different spoken languages. Collation-sensitive operations are operations that compare text and need a collation to control the comparison rules. The equality operator and the built-in function INSTR are examples of collation-sensitive operations.
Starting with Oracle Database 12c release 2 (12.2) , a new architecture provides control of the collation to be applied to operations on character data. In the new architecture, collation becomes an attribute of character data, analogous to a data type. You can now declare collation for a column and this collation is automatically applied by all collation-sensitive SQL operations referencing the column. The data-bound collation feature uses syntax and semantics compatible with the ISO/IEC SQL standard.
The PL/SQL language has limited support for the data-bound collation architecture. All data processed in PL/SQL expressions is assumed to have the compatibility collation USING_NLS_COMP . This pseudo-collation instructs collation-sensitive operators to behave in the same way as in previous Oracle Database releases. That is, the values of the session parameters NLS_COMP and NLS_SORT determine the collation to use. However, all SQL statements embedded or constructed dynamically in PL/SQL fully support the new architecture.
A new property called default collation has been added to tables, views, materialized views, packages, stored procedures, stored functions, triggers, and types. The default collation of a unit determines the collation for data containers, such as columns, variables, parameters, literals, and return values, that do not have their own explicit collation declaration in that unit. The default collation for packages, stored procedures, stored functions, triggers, and types must be USING_NLS_COMP .
Хотя язык SQL и является легким в изучении и обладает массой мощных функциональных возможностей, он не позволяет создавать такие процедурные конструкции, которые возможны в языках третьего поколения вроде C. Язык PL/SQL является собственным расширением языка SQL от Oracle и предлагает функциональность серьезного языка программирования. Одно из главных его преимуществ состоит в том, что он позволяет использовать в базе данных такие программные единицы, как процедуры и пакеты, и тем самым увеличивать возможность повторного использования кода и его производительность.
Синтаксис
Синтаксис CREATE PACKAGE в Oracle PL/SQL:
CREATE [OR REPLACE] PACKAGE package_name
[AUTHID ]
[PRAGMA SERIALLY_REUSABLE;]
[collection_type_definition . ]
[record_type_definition . ]
[subtype_definition . ]
[collection_declaration . ]
[constant_declaration . ]
[exception_declaration . ]
[object_declaration . ]
[record_declaration . ]
[variable_declaration . ]
[cursor_spec . ]
[function_spec . ]
[procedure_spec . ]
[call_spec . ]
[PRAGMA RESTRICT_REFERENCES(assertions) . ]
END [package_name];
[CREATE [OR REPLACE] PACKAGE BODY package_name
[PRAGMA SERIALLY_REUSABLE;]
[collection_type_definition . ]
[record_type_definition . ]
[subtype_definition . ]
[collection_declaration . ]
[constant_declaration . ]
[exception_declaration . ]
[object_declaration . ]
[record_declaration . ]
[variable_declaration . ]
[cursor_body . ]
[function_spec . ]
[procedure_spec . ]
[call_spec . ]
[BEGIN
sequence_of_statements]
END [package_name];]
collection_type_definition - определение типа коллекции
record_type_definition - определение типа записи
subtype_definition - определение подтипа
collection_declaration - объявление коллекции
constant_declaration - объявление константы
exception_declaration - объявление исключения
object_declaration - объявление объекта
record_declaration - объявление записи
variable_declaration - объявление переменной
cursor_spec - спецификация курсора
function_spec - спецификация функции
procedure_spec - спецификация процедуры
call_spec - спецификация вызова
Спецификация пакета содержит публичные объявления, которые видны вашему приложению. Вы должны объявить подпрограммы в конце спецификации после всех других элементов (кроме прагм, которые вызывают конкретную функцию; такие прагмы должны следовать спецификации функции).
Тело пакета содержит детали реализации и приватные объявления, которые скрыты от вашего приложения. За декларативной частью тела пакета следует необязательная часть инициализации, которая обычно содержит операторы, которые инициализируют переменные пакета.
Процедуры, функции и пакеты
Процедуры в PL/SQL могут применяться для выполнения различных DML-операций. Ниже приведен пример простой процедуры Oracle:
В отличие от процедур, функции в PL/SQL возвращают значение, как показано в следующем примере:
Пакеты (packages) в Oracle представляют собой объекты, которые обычно состоят из нескольких взаимосвязанных процедур и функций и, как правило, применяются для выполнения какой-нибудь функции приложения путем вызова всех находящихся внутри пакета взаимосвязанных процедур и функций. Пакеты являются чрезвычайно мощным средством, поскольку могут содержать большие объемы функционального кода и многократно выполняться несколькими пользователями.
Каждый пакет обычно состоит из двух частей: спецификации и тела. В спецификации пакета объявляются все входящие в его состав переменные, курсоры и подпрограммы (процедуры и функции), а в теле пакета содержится фактический код этих курсоров и подпрограмм.
В листинге А.6 приведен пример простого пакета Oracle.
При желании использовать пакет emp_pkg для награждения какого-то сотрудника надбавкой к зарплате, все, что потребуется сделать — выполнить следующую команду:
Использование оператора SELECT в PL/SQL
При использовании оператора SELECT в PL/SQL нужно сохранять извлекаемые значения в переменных, как показано ниже:
Конструкции циклов в 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:
Использование DML-операторов в PL/SQL
Любые операторы INSERT, DELETE или UPDATE работают в PL/SQL точно так же, как в обычном SQL. Однако в PL/SQL после каждого из них можно также применять оператор COMMIT, как показано ниже:
Базовый блок PL/SQL
Блоком в PL/SQL называется исполняемая программа. Блок кода PL/SQL, независимо от того, инкапсулируется он внутри какой-то программной единицы наподобие процедуры или задается в виде анонимного блока в свободной форме, состоит из следующих структур, которые представляют собой четыре ключевых оператора, только два из которых являются обязательными.
- DECLARE . Этот оператор является необязательным и представляет собой то место, в котором при желании объявляются переменные и курсоры программы.
- BEGIN . Этот оператор является обязательным и указывает, что далее будут идти операторы SQL и PL/SQL, т.е. обозначает начало блока кода PL/SQL.
- EXCEPTION . Этот оператор является необязательным и описывает методы обработки ошибок.
- END . Этот оператор является обязательными и обозначает конец блока кода PL/SQL.
Ниже приведен пример простого блока кода PL/SQL:
Practically Perfect PL/SQL with Steven Feuerstein
Practically Perfect PL/SQL (P3) offers videos on PL/SQL by Steven Feuerstein, Oracle Developer Advocate for PL/SQL and author of Oracle PL/SQL Programming.
Getting Rid of Hard-Coding in PL/SQL
This first playlist of P3 explores the various forms of hard-coding that can appear in PL/SQL, and how best to get rid of them.
PL/SQL - это процедурное расширение языка SQL (Structured Query Language - структурированный язык запросов). SQL сегодня является повсеместно распространенным языком для выполнения запросов и изменений (хоть в его названии об этом и не говорится) в реляционных базах данных. Корпорация Oracle ввела в употребление PL/SQL для того, чтобы избавиться от некоторых ограничений, существующих в SQL, а также для того, чтобы иметь возможность предложить более полное программное решение разработчикам жизненно важных приложений, работающих с базами данных Oracle. Далее я расскажу о происхождении языка PL/SQL и приведу краткий обзор основных его элементов.
Я не надеюсь на то, что, прочитав мой блог, вы сразу же сможете писать блестящие программы на PL/SQL. Я лишь хочу быть уверены в том, что ваших знаний о языке окажется достаточно для понимания и работы с примерами и описаниями функциональности, приводимыми в моем блоге. Уделяя особое внимание тем особенностям языка, которые наиболее интересны для администратора баз данных, я также хочу показать вам всю широту и мощь PL/SQL.
Конечно, в рамки одного блога невозможно вместить все сведения о PL/SQL. Если вы никогда ранее не писали программ и сценариев на PL/SQL, то, вероятно, вам стоит обратиться за дополнительной информацией к двум книгам издательства O’Reilly: «Learning Oracle PL/SQL» (Изучаем Oracle PL/SQL) и «Oracle PL/SQL Programming» (Программирование на Oracle PL/SQL).
Думаю для новичков в языке сила в синергии - подчерпывание информации из интересных блогов, рассказывающих простым языком о сложном, плюс формальный, но четкий, язык учебной литературы по PL/SQL.
Объявление переменных в PL/SQL
В операторе DECLARE можно объявлять как переменные, так и константы. Прежде чем использовать какую-либо переменную ее нужно обязательно объявить. Переменная в PL/SQL может представлять собой как переменную встроенного типа, такого как DATE, NUMBER, VARCHAR2 или CHAR, так и составного вроде VARRAY. Помимо этого, в PL/SQL еще применяются такие типы данных, как BINARY_INTEGER и BOOLEAN.
Ниже приведены некоторые типичные примеры объявления переменной в PL/SQL:
Помимо переменных также можно объявлять и константы, как показано в следующем примере:
Еще можно использовать атрибут %TYPE и с его помощью указывать при объявлении переменной, что ее тип данных должен совпадать с типом данных определенного столбца таблицы:
Посредством атрибута %ROWTYPE можно указывать, что тип данных записи (строки) должен совпадать с типом данных определенной таблицы базы данных. Например, в следующем коде указано, что запись DeptRecord должна содержать все те же столбцы, что и таблица department, а типы данных и длина этих столбцов в ней должны выглядеть абсолютно идентично:
Управляющие структуры в PL/SQL
В PL/SQL предлагается несколько видов управляющих структур (control structures), которые позволяют обеспечивать итерацию кода или условное выполнение определенных операторов. Все они кратко описаны в последующих разделах моего блога.
Курсорный цикл FOR
Обычно при использовании явных курсоров требуется открывать курсор, извлекать данные и по завершении закрывать курсор. Курсорный цикл FOR позволяет выполнять эти процедуры по открытию, извлечению и закрытию автоматически, чем очень сильно упрощает дело. В листинге А.5 показан пример применения конструкции курсорного цикла FOR.
Why Use PL/SQL?
An application that uses Oracle Database is worthless unless only correct and complete data is persisted. The time-honored way to ensure this is to expose the database only via an interface that hides the implementation details -- the tables and the SQL statements that operate on these. This approach is generally called the thick database paradigm, because PL/SQL subprograms inside the database issue the SQL statements from code that implements the surrounding business logic; and because the data can be changed and viewed only through a PL/SQL interface. Bryn Llewellyn, Distinguished Product Manager for PL/SQL and Edition-based Redefinition, explains the thick database approach in detail in his "Why use PL/SQL?" whitepaper.
Join the PL/SQL Challenge community and try out these PL/SQL quizzes, learn as you go. You can choose to play competitively, ranking yourself against hundreds of other developers from around the world, or play simply to depend your experience.
Read the Freedom, Order, and PL/SQL Optimization whitepaper on PL/SQL's powerful optimizer, the go-to document for any questions regarding the behavior of PL/SQL programs compiled at optimize levels higher than 1.
Обработка ошибок
В PL/SQL любая ошибка или предупреждение называется исключением (exception). В PL/SQL есть кое-какие определенные внутренне ошибки, но также допускается определять и свои собственные. При возникновении любой ошибки инициируется исключение, и управление переходит в отвечающий за обработку исключений раздел программы PL/SQL. В случае определения своих собственных ошибочных ситуаций необходимо обеспечивать инициирование исключений за счет применения специального оператора RAISE.
Ниже приведен пример использования оператора RAISE для обработки исключений:
Использование курсоров
Курсором (cursor) в Oracle называется указатель на область в памяти, в которой содержится результирующий набор SQL-запроса, позволяющий индивидуально обрабатывать содержащиеся в результирующем наборе строки. Курсоры, которые используются Oracle при выполнении DML-операторов, называются неявными, а курсоры, которые создают и используют разработчики приложений — явными.
Oracle Database 18c PL/SQL
PL/SQL is a procedural language designed specifically to embrace SQL statements within its syntax. PL/SQL program units are compiled by the Oracle Database server and stored inside the database. And at run-time, both PL/SQL and SQL run within the same server process, bringing optimal efficiency. PL/SQL automatically inherits the robustness, security, and portability of the Oracle Database.
Атрибуты курсоров
В примере, приведенном в листинге А.4, для указания того, когда цикл должен завершаться, используется специальный атрибут курсора %NOTFOUND. Атрибуты курсоров очень полезны при работе с явными курсорами. Наиболее важные из них перечислены ниже.
- %ISOPEN. Булевский атрибут, который после завершения выполнения SQL-оператора возвращает false. До тех пор, пока курсор остается открытым, он возвращает true.
- %FOUND. Булевский атрибут, который выполняет проверку на предмет наличия подходящих для SQL-оператора строк, т.е. остались ли у курсора еще какие-то строки для извлечения.
- %NOTFOUND. Булевский атрибут, который сообщает о том, что не удалось обнаружить ни одной подходящей для SQL-оператора строки, т.е. у курсора больше не осталось никаких строк для извлечения.
- %ROWCOUNT. Атрибут, который возвращает информацию о том, сколько курсору удалось извлечь строк на текущий момент.
Что такое пакет Oracle PL/SQL?
Пакет Oracle PL/SQL - это объект схемы, который группирует логически связанные типы, элементы и подпрограммы. Пакеты обычно состоят из двух частей: спецификации и тела, хотя иногда тело не нужно. Спецификация - это интерфейс для ваших приложений.
В спицификации пакета объявляются типы, переменные, константы, исключения, курсоры и подпрограммы, доступные для использования.
Тело пакета полностью определяет курсоры и подпрограммы и реализует спецификацию.
Как показано на рисунке, вы можете думать о спецификации как о рабочем интерфейсе, а о теле - как о «черном ящике». Вы можете отлаживать, улучшать или изменять тело пакета без изменения интерфейса (спецификации) пакета.
Для создания пакетов используйте оператор CREATE PACKAGE.
Неявные курсоры
В приведенном ниже блоке кода PL/SQL оператор SELECT, например, предусматривает применение неявного курсора:
Написание исполняемых операторов PL/SQL
После оператора BEGIN можно начинать вводить все свои желаемые SQL-операторы. Выглядеть эти операторы должны точно так же, как обычные операторы SQL. При использовании операторов SELECT и INSERT в PL/SQL, правда, необходимо помнить об особенностях, о которых более подробно речь пойдет в следующих разделах.
Getting Started With PL/SQL
Steven Feuerstein published a series of "PL/SQL 101" articles in Oracle Magazine to help developers new to PL/SQL quickly come up to speed on the language. We offer links to those (and other) articles below.
Building and Managing PL/SQL Program Units
Building with Blocks PL/SQL is a block-structured language; familiarity with blocks is critical to writing good code.
Controlling the Flow of Execution Conditional branching and iterative processing in PL/SQL
Wrap Your Code in a Neat Package Packages are the fundamental building blocks of any high quality PL/SQL-based application
Picking Your Packages Concepts and benefits of PL/SQL packages
Error Management An exploration of error management features in PL/SQL
The Data Dictionary: Make Views Work for You Use several key data dictionary views to analyze and manage your code
PL/SQL Datatypes
Working with Strings in PL/SQL PL/SQL offers several different string datatypes for use in your applications
Working with Numbers in PL/SQL Learn about and how to use the different numeric types in PL/SQL.
Working with Dates in PL/SQL Dates are a relatively complex scalar datatype, in both SQL and PL/SQL
Working with Records A very common and useful composite type, PL/SQL's analogue to a table's row
Working with Collections PL/SQL's implementation of arrays plays a role in almost every key performance feature of PL/SQL
SQL in PL/SQL
Working with Cursors PL/SQL cursors make it easy for you to manipulate the contents of database tables
Bulk Processing with BULK COLLECT and FORALL The most important performance feature in PL/SQL related to executing SQL
Пример пакета Oracle PL/SQL
В приведенном ниже примере, вы определяете тип запись, курсор и две процедуры по трудоустройству. Обратите внимание, что процедура hire_employee использует последовательность базы данных empno_seq и функцию SYSDATE для вставки нового номера сотрудника и дату приема на работу соответственно.
Явные курсоры
Явные курсоры создаются разработчиком приложения и облегчают операции с набором строк, которые могут обрабатываться друг за другом. Они применяются всегда, когда известно, что SQL-оператор будет возвращать более одной строки. Обратите внимание, что явный курсор необходимо всегда объявлять в начале блока PL/SQL внутри раздела DECLARE, в отличие от неявного курсора, на который никогда не нужно ссылаться в коде.
После объявления явного курсора он будет проходить через следующие этапы обработки.
- Конструкция OPEN будет определять строки, которые находятся в курсоре, и делать их доступными для программы PL/SQL.
- Команда FETCH будет извлекать данные из курсора в указанную переменную.
- По завершении процесса обработки курсор должен всегда закрываться явным образом.
В листинге А.4 показан пример создания курсора и затем его использования внутри цикла.
Что такое PL/SQL?
Язык Oracle PL/SQL имеет ряд определяющих характеристик:
- PL/SQL - это высокоструктурированный, удобочитаемый и доступный язык.
- PL/SQL отлично подходит для начинающих программистов. Язык несложен в изучении, названия его многочисленных ключевых слов и структур явно указывают на то, что делает данный фрагмент кода. Если вы знакомы с другими языками программирования, то без труда привыкнете к новому синтаксису.
- PL/SQL - это стандартный и переносимый язык для разработки приложений на Oracle. Написав на своем компьютере PL/SQL-процедуру или функцию для работы с базой данных Oracle, вы можете затем перенести эту процедуру в базу данных своей корпоративной сети и выполнять ее без каких бы то ни было изменений (естественно, при условии совместимости версий Oracle). Принцип «Write once, run everywhere» (написав однажды, запускай везде) был девизом PL/SQL задолго до появления Java. Для PL/SQL «везде» понимается как «везде, где есть база данных Oracle».
- PL/SQL - это встроенный язык.
- PL/SQL создавался не для автономной работы, а для того чтобы выполняться в определенной среде. Например, вы можете запускать программы на PL/SQL в базе данных (скажем, через интерфейс SQL*Plus). Вы также можете создать программу на PL/SQL и вы-звать ее из формы или отчета Oracle Developer (так называемый «клиентский PL/SQL»). Однако невозможно создать исполняемый файл PL/SQL, который выполнялся бы сам по себе.
- PL/SQL - это высокопроизводительный и высокоинтегрированный язык для работы с базами данных.
В наше время существует широкий выбор средств, которые можно применять при создании приложений, работающих с базами данных Oracle. Можно использовать Java и JDBC, Visual Basic и ODBC, Delphi, C++ и т. д. Однако вы увидите, что проще всего написать эффективный код для доступа к базе данных Oracle именно на PL/SQL. В частности, Oracle предлагает некоторые специальные дополнительные возможности для PL/SQL, такие как конструкция FORALL, которые могут на порядок повысить производительность базы данных.
В Oracle PL/SQL набор элементов: процедур, функций, определения типов; объявления переменных, констант можно объединить в пакет. После написания пакет PL/SQL компилируется, а затем сохраняется в базе данных Oracle, где его содержимое может использоваться многими приложениями.
Курсорные переменные
Курсорные переменные указывают на текущую строку в многострочном результирующем наборе. В отличие от обычного курсора, однако, курсорная переменная является динамической, что позволяет присваивать ей новые значения и передавать ее другим процедурами и функциям. Создаются курсорные переменные в PL/SQL следующим образом.
Сначала определяется тип REF CURSOR, как показано ниже:
Затем объявляются сами курсорные переменные типа EmpCurType в анонимном блоке кода PL/SQL либо в процедуре (или функции):
Записи в PL/SQL
Записи (records) в PL/SQL позволяют воспринимать взаимосвязанные данные как одно целое. Они могут содержать поля, каждое из которых может представлять отдельный элемент. Можно использовать атрибут ROW%TYPE и с его помощью объявлять записью столбцы определенной таблицы, что подразумевает применение таблицы в качестве шаблона курсора, а можно создавать и свои собственные записи. Ниже приведен простой пример записи:
Для ссылки на отдельное поле внутри записи применяется точечное обозначение, как показано ниже:
Условное управление
Главной разновидностью условной управляющей структуры в PL/SQL является оператор IF, который обеспечивает условное выполнение операторов. Он может применяться в одной из трех следующих форм: IF-THEN, IF-THEN-ELSE и IF-THEN-ELSEIF. Ниже приведен пример простого оператора IF-THEN-ELSEIF:
Читайте также: