DeepEdit!

Программирование баз данных на Oracle, техническая документация, литература, статьи и публикации

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Объявление курсорных переменных

Синтаксис объявления курсорной переменной таков:
Начиная с версии Oracle9/ Database поддерживается предопределенный слабо типизированный тип REF CURSOR - SYS_REFCURSOR. Теперь нет необходимости определять собственный слабо типизированный тип, можно воспользоваться имеющимся:
где имя_курсора - имя курсорной переменной, а имя_типа_курсора - имя определенного ранее посредством оператора TYPE типа курсора.
Рассмотрим пример создания курсорной переменной:

Открытие курсорных переменных
Вы присваиваете значение (курсорный объект) курсору при открытии (OPEN) этого курсора. Синтаксис традиционного оператора OPEN разрешает для курсорных переменных использование в предложении FOR оператора SELECT:

где имя_курсора - это имя курсорной переменной, а оператор_SELECT- это SQL-оператор SELECT.
Для курсорных переменных строго типизированного типа REF CURSOR структура оператора SELECT (количество и тип данных столбцов) должна совпадать или быть совместимой со структурой, указанной в инструкции RETURN объявления типа. Если же курсорная переменная определена на основе слабо типизированного типа REF CURSOR, то ее можно открывать (OPEN) для любого запроса с любой структурой данных.
Выборка данных из курсорных переменных
Как уже говорилось, синтаксис инструкции FETCH для курсорной переменной совпадает с синтаксисом для статических курсоров:

Если курсорная переменная объявлена на основе строго типизированного типа REF CURSOR, то компилятор PL/SQL проверяет совместимость структур данных, перечисленных после ключевого слова INTO со структурой запроса, связанного с курсорной переменной.
Если же курсорная переменная относится к слабо типизированному типу REF CURSOR, то компилятор PL/SQL не может выполнить подобную проверку. Данные из такой курсорной переменной могут извлекаться в любую структуру данных, так как в момент своего объявления тип курсора не был связан с типом строки таблицы. При компиляции невозможно определить, какой объект курсора (и соответственно команда SQL) будет присвоен данной переменной.
Следовательно, проверку совместимости приходится выполнять в процессе исполнения FETCH. Если при этом оказывается, что структуры запроса и предложения INTO не совпадают, то исполняющее ядро PL/ SQL инициирует предопределенное исключение ROWTYPE_MISMATCH. Следует иметь в виду, что при необходимости (и при наличии такой возможности) PL/SQL будет использовать неявные преобразования типов.
Изменение данных
Подробное описание возможностей DML-операторов языка Oracle SQL выходит за рамки нашей книги. Вниманию читателей будет предложен лишь краткий обзор основ синтаксиса DML-операторов, затем будут рассмотрены специальные вопросы, связанные с использованием DML в PL/SQL, а именно:
Примеры всех операторов DML
Атрибуты курсоров для операторов DML
Специальные средства PL/SQL для операторов DML, например предложение RETURNING
Дополнительную информацию вы сможете получить в документации по Oracle или SQL.
В языке SQL поддерживаются три оператора DML:
INSERT
Вставляет в таблицу одну или несколько новых строк.
UPDATE
Обновляет значения в одном или нескольких столбцах существующей строки таблицы.
DELETE
Удаляет из таблицы одну или несколько строк.
Оператор INSERT
Рассмотрим синтаксис двух основных типов операторов INSERT: • Вставка одной строки с явно заданным списком значений.

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

Давайте рассмотрим несколько примеров выполнения операторов INSERT внутри PL/SQL-блока. Сначала вставим новую строку в таблицу book. Обратите внимание, что если указаны значения для всех столбцов таблицы, то нет необходимости в перечислении имен столбцов:

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









jAntivirus