Написано: 11.04.2023

2. Обзор PL/SQL

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

2.1. Преимущества PL/SQL

2.2. Основные свойства PL/SQL

2.3. Архитектура PL/SQL

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

2.3.1 Движок PL/SQL (Engine)

Система компиляции и выполнения PL/SQL – это движок, который компилирует и запускает модули PL/SQL.

Движок может быть установлен в базе данных или в средстве разработки приложений, таком как Oracle Forms.

В любой среде движок PL/SQL принимает в качестве входных данных любой допустимый модуль PL/SQL. Ядро выполняет процедурные инструкции, но отправляет инструкции SQL в ядро SQL в базе данных, как показано на рисунке 2-1.

plsql_2_1

Как правило, база данных обрабатывает блоки PL/SQL.

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

Например, приложения Oracle Forms часто используют инструкции SQL для проверки значений записей полей и выполнения простых вычислений. Используя PL/SQL вместо SQL, эти приложения могут избежать обращений к БД.

2.3.2 Модули PL/SQL (units) и параметры компиляции

На модули PL/SQL влияют параметры компиляции PL/SQL (категория параметров инициализации БД). Различные модули PL/SQL – например, спецификация пакета и его тело – могут иметь разные настройки параметров компиляции.

Модуль PL/SQL является одним из:

  • анонимный блок PL/SQL

  • FUNCTION

  • LIBRARY

  • PACKAGE

  • PACKAGE BODY

  • PROCEDURE

  • TRIGGER

  • TYPE

  • TYPE BODY

В таблице 2-2 приведены параметры компиляции PL/SQL. Чтобы отобразить значения этих параметров для указанных или всех единиц PL/SQL, запросите статический словарь данных для просмотра ALL_PLSQL_OBJECT_SETTINGS. Дополнительные сведения об этом представлении см. в разделе Oracle Database Reference.

Parameter Description
PLSCOPE_SETTINGS Controls the compile-time collection, cross-reference, and storage of PL/SQL source text identifier data. Used by the PL/Scope tool (see Oracle Database Development Guide).
For more information about PLSCOPE_SETTINGS, see Oracle Database Reference.
PLSQL_CCFLAGS Lets you control conditional compilation of each PL/SQL unit independently.
For more information about PLSQL_CCFLAGS, see “How Conditional Compilation Works” and Oracle Database Reference.
PLSQL_CODE_TYPE Specifies the compilation mode for PL/SQL units—INTERPRETED (the default) or NATIVE. For information about which mode to use, see “Determining Whether to Use PL/SQL Native Compilation”.
If the optimization level (set by PLSQL_OPTIMIZE_LEVEL) is less than 2:
The compiler generates interpreted code, regardless of PLSQL_CODE_TYPE.
If you specify NATIVE, the compiler warns you that NATIVE was ignored.
For more information about PLSQL_CODE_TYPE, see Oracle Database Reference.

2.4. Защита конфиденциальной информации в PL/SQL

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

Имейте в виду, что содержимое блока PL/SQL может быть записано полностью в таких местах, как журналы аудита и файлы трассировки. Аналогично, доступ к коду хранимой процедуры можно получить через представления словаря, такие как USER_SOURCE. По этой причине настоятельно рекомендуется никогда не включать какую-либо конфиденциальную информацию в литерал, который используется в коде PL/SQL.

Переменные привязки могут использоваться для защиты от атак SQL-инъекций, однако значения привязки могут быть видны в таких местах, как файлы трассировки, аудит и V$SQL и связанные с ними представления. Доступ должен строго регулироваться, чтобы гарантировать, что только те, кому он необходим, имеют привилегии для просмотра этой особо конфиденциальной информации. Для получения дополнительной информации об использовании переменных привязки см. раздел “Переменные привязки”.