Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Введение в СУБД HyTech.doc
Скачиваний:
11
Добавлен:
01.03.2025
Размер:
2.67 Mб
Скачать

Пример работы с оператором update

Приведем пример работы оператора. Пусть стоит задача обновить имена пользователей в таблице READER из таблицы TEMP, созданной и наполненной данными следующим скриптом:

drop table TEMP; create table TEMP (   FNAME char(50),   LNAME char(50) ); insert into TEMP (FNAME, LNAME) values ('Иван', 'Правдин'); insert into TEMP (FNAME, LNAME) values ('Петр', 'Перов');

В этом случае для обновления данных необходимо выполнить следующий оператор:

update   READER r from   TEMP t set   r.FNAME = t.FNAME where   r.LNAME = t.LNAME; fix all; select   FNAME,   LNAME from   READER;

Типичной ошибкой при обновлении одной таблицы по значениям в другой является неоднозначность операции. В нашем случае, если записей с одинаковыми фамилиями в таблице TEMP было бы несколько, то возникла бы ошибка: [-118] «Неоднозначность при выполнении операции join-update».

3.2.6 Оператор удаления строк из таблицы delete Оператор delete

Оператор delete удаляет строки, удовлетворяющие предикату, из указанной таблицы. Если предикат не задан, то удаляются все строки.

Оператор delete делает поиск записей (аналогично оператору select) и затем производит удаление записей. Если поиск делается не под транзакцией, то при поиске будет сделан снимок таблицы, если снимка не было.

Формат

delete from Имя_Таблицы        [ where Предикат ]

Аргументы:

Аргумент

Значение

Имя_таблицы

Имя таблицы, из которой удаляются записи.

Предикат

Условие, которое определяет, какие записи необходимо удалить. Если условие опущено, то удаляются все записи.

Следующий оператор удаляет из таблицы BOOK все книги, изданные ранее 2000 года:

delete from   BOOK where   PYEAR < 2000; fix all; select * from BOOK;

3.2.7 Оператор выполнения запроса, заданного строкой execute immediate Оператор execute immediate

SQL оператор execute immediate компилирует строку и выполняет полученную программу во временном курсоре, а затем этот временный курсор удаляет. Локальные переменные из текущего курсора в выполняющейся программе недоступны – курсор другой. Также в ней не будут доступны локальные временные таблицы, не созданные в самой исполняемой execute immediate программе. Локальная временная таблица, созданная внутри исполняемой программы, будет удалена при завершении оператора execute immediate. Строка может содержать как один SQL-оператор, так и несколько.

Формат:

execute immediate Выражение;

Аргументы:

Аргумент

Значение

Выражение

Выражение задает строку, которая рассматривается как SQL-программа.

Приведем пример работы оператора – создадим процедуру, удаляющую таблицу по имени. Имя передается параметром.

create procedure scDropTable(x in) as begin   execute immediate 'drop table ' + x + ' cascade;';   return lastsqlerr(); end;

3.2.8 Оператор выгрузки результатов в таблицу results table Оператор results table

Оператор results table используется для записи результатов последнего поиска в новую таблицу.

Если задан список имен полей, то у созданной таблицы поля будут иметь указанные имена. Если имена не заданы, то используются имена исходных таблиц (из запроса) или, если это невозможно, то поля в этой таблице будут иметь имена fld000000, fld000001, и т.д.

Формат:

results table Имя_таблицы [ '(' Список_имен_полей ')' ];

Аргументы:

Аргумент

Значение

Имя таблицы

Создаваемая таблица может быть как постоянной, так и временной. Чтобы задать создание глобальной временной таблицы, перед именем таблицы должен идти один символ *. Чтобы задать создание локальной временной таблицы, перед именем таблицы должны идти два символа **.

Список имен полей

Данный параметр изменяет имена полей в создаваемой таблице.

Приведем пример работы оператора:

drop table JBOOK; select    NAME,    PYEAR from    BOOK; results table JBOOK ('NAME', 'PYEAR'); fix all; select    NAME  as BOOKNAME,    PYEAR as PYEAR from    JBOOK;

Результат выборки представлен на рисунке 1.

Рисунок 1. Результат выборки