- •Краткий справочник по oracle
- •7. Функции sql и oracle7
- •7.1 Числовые функции
- •7.3. Функции работы с датами и временем
- •7.5. Групповые функции
- •9. Псевдо- столбцы и таблицы
- •10. Предложения (команды) sql Oracle7
- •Identified {by password | externally}
- •11. Фразы предложений (команд) sql Oracle7
- •12.2.3. Записи pl/sql
- •12.3.1. Явный курсор
- •12.3.1.2. Открытие курсора (open)
- •12.3.1.6. Атрибуты явного курсора
- •12.5. Обработка ошибок
- •Value_error ora-06502 Арифметическая ошибка, ошибка преобразования,
- •12.5.2. Исключительные ситуации, определяемые пользователем
- •13. Представления словарей данных
- •Index(create,create any, Создает, изменяет и удаляет индексы
- •Insert any,update any)
12.2.3. Записи pl/sql
Record PL/SQL - это совокупность полей, каждое из которых должно иметь
уникальное имя (в пределах записи). Эти поля могут принадлежать различным
типам данных.
Если создаваемая запись (sotr) соответствует описанию столбцов какой-либо
базовой таблицы (например, kadry), то ее объявление можно осуществить в разделе
DECLARE с помощью атрибута %ROWTYPE:
sotr kadry%ROWTYPE;
В противном случае для объявления записи необходимо сначала определить ее
тип данных. Для описания типа данных RECORD используется синтаксис:
TYPE type_name IS RECORD
( field_name1 {field_type | variable%TYPE | table.column%TYPE
| table%ROWTYPE} [NOT NULL],
field_name2 {field_type | variable%TYPE | table.column%TYPE
| table%ROWTYPE} [NOT NULL],
...);
где "type_name" - спецификатор типа, используемый в последующих объявлениях
записей PL/SQL, и "field_type" - любой тип данных. С помощью атрибута %TYPE
можно установить "type_name" соответствующим типу данных какой-либо переменной
(variable) или столбца (table.column). Атрибут %ROWTYPE позволяет определить
поле как запись, соответствующую описанию столбцов какой-либо базовой таблицы.
- 28 -
При объявлении типа записи можно присвоить ее полям некоторые значения. Если
же для поля вводится ограничение NOT NULL (для предотвращения назначения пустых
значений), то этому полю надо обязательно присвоить значение. Например:
TYPE SotrRecTyp IS RECORD (nomer NUMBER(4) NOT NULL := 1001,
familiy CHAR(20), dolgnost CHAR(14), otdel NUMBER(3) := 102);
Объявление создаваемой записи (например, name_plsql_record) производится в
разделе DECLARE и имеет вид:
name_plsql_record type_name;
Ссылки на отдельные поля записи осуществляются так:
name_plsql_record.field_name;
Для присвоения значения конкретному полю записи используется синтаксис:
name_plsql_record.field_name := expr;
Примеры использования записей в программах PL/SQL приведены ниже.
Для ввода в таблицу PL/SQL значений из какого-либо столбца базовой таблицы
или представления, а также для выборки значений из таблицы PL/SQL, необходимо
использовать цикл. (Примеры таких операций приведены в п. 12.4.)
12.2.4. Переменные, константы и выражения
В программах PL/SQL могут использоваться переменные и константы, описываемые
в разделе DECLARE с помощью конструкции вида:
variable_name [CONSTANT] type_name [NOT NULL] [ { := | DEFAULT } expr ]
Например
birthdate DATE;
emp_count SMALLINT := 0;
emp_count SMALLINT DEFAULT 0;
acct_id VARCHAR2(5) NOT NULL := `AP001`;
pi CONSTANT REAL := 3.14159;
area REAL := pi * radius**2;
valid_id BOOLEAN;
valid_id VARCHAR2(5); -- недопустимое вторичное описание valid_id
i, j, k SMALLINT; -- нельзя описывать список; надо:
-- i SMALLINT; j SMALLINT; k SMALLINT;
credit REAL(7,2);
debit credit%TYPE; -- тип данных аналогичный типу данных "credit"
Синтаксис выражения описан в п. 4.3.
12.3. Связь объектов PL/SQL с таблицами базы данных
Чтобы программа PL/SQL могла работать с информацией, содержащейся в базах
данных, необходимо организовать обмен между значениями столбцов таблиц баз
данных и переменными PL/SQL.
Известно, что для выбора информации из таблиц используется SQL предложение
SELECT. При его выполнении Oracle создает специальную рабочую область,
содержащую информацию о самом SELECT, данные, которые требуются для его
выполнения (например, результаты подзапросов), и, наконец, окончательный
результат выполнения SELECT. PL/SQL имеет несколько механизмов доступа к
- 29 -
этой рабочей области. Одним из них является курсор, с помощью которого можно
присвоить имя этой рабочей области и манипулировать содержащейся в ней
информацией, последовательно выбирая строки результата и пересылая значения
столбцов текущей строки в переменные PL/SQL. Существуют и другие механизмы,
не требующее создания явного курсора.
