Введение в стандарты языка баз данных SQL


Манипулирование данными - часть 5


<delete statement: positioned> ::= DELETE FROM <table name> WHERE CURRENT OF <cursor name>

В принципе, оператор и выполняется так же, как предписано в SQL/89, однако в стандарте SQL/92 приводятся некоторые уточнения поведения оператора:

  1. Если текущая транзакция имеет режим доступа "только чтение" и таблица, из которой удаляется кортеж не является временной, то возбуждается исключительное условие.
  2. Текущая строка помечается для удаления.
  3. Если оказалось, что помечаемая строка уже помечена для удаления оператором поискового удаления или оператором позиционного удаления, связанным с другим курсором, или помечена для обновления оператором поисковой модификации или оператором позиционной модификации, связанным с другим курсором, то в условии завершения текущего оператора сообщается соответствующее предупреждение.
  4. Строка, помеченная для удаления, реально удаляется в конце выполнения оператора позиционного удаления до проверки каких-либо ограничений целостности.
  5. Если удаляется последний кортеж, то курсор устанавливается в позицию после последней строки; в противном случае курсор устанавливается в позицию перед следующей строкой.

Оператор позиционной модификации также мало отличается от соответствующего оператора SQL/89:

<update statement: positioned> ::= UPDATE <table name> SET <set clause list> WHERE CURRENT OF <cursor name> <set clause list> ::= <set clause> [ { <comma> <set clause> }... ] <set clause> ::= <object column> <equals operator> <update source> <update source> ::= <value expression> |<null specification> |DEFAULT <object column> ::= <column name>

Как и для оператора позиционного удаления, мы поясним только отличия и расширения по отношению к SQL/89:

  1. Изменения, производимые с использованием упорядоченного курсора, не должны затрагивать столбцы сортировки;
  2. Если текущая транзакция выполняется в режиме только чтения, возбуждается исключительное условие.
  3. Будем называть объектной строкой ту строку, из которой порождена текущая строка курсора.
  4. Если оказалось, что к моменту выполнения операции позиционного обновления объектная строка уже помечена для удаления некоторым поисковым оператором удаления или позиционным оператором удаления, связанным с другим курсором, или если она помечена для обновления некоторым поисковым оператором обновления или поисковым оператором обновления, связанным с другим курсором, генерируется условие завершения с соответствующим предупреждением.
  5. Ключевое слово DEFAULT в разделе SET означает, что в соответствующий столбец обновляемой таблицы должно быть помещено его значение по умолчанию.
  6. Выражение, вырабатывающее значение, в разделе SET вычисляется до обновления объектной строки; если это выражение содержит ссылку на столбец изменяемой таблицы, то это рассматривается как ссылка на значение столбца до его изменения.
  7. Курсор остается позиционированным на текущую строку.

Оператор закрытия курсора в SQL/92 имеет такие же синтаксис и семантику, что и соответствующий оператор языка SQL/89.




- Начало -  - Назад -  - Вперед -