Вставить кортежи из рабочего пространства
Например:
PUT W2 SP
(" Вставить кортежи из рабочего пространства W2 в отношение SP".) Можно также указать и порядок, чтобы дать знать системе, что вставляемые кортежи упорядочены некоторым образом в рабочем пространстве. На самом деле, в связи с этим понятием я ощущаю небольшой дискомфорт; мне кажется, что здесь слишком сильно перемешаны идеи логического и физического уровней.
Возможна также "конвейерная вставка":
OPEN PUT W2 S
….
/* конструирование текущей строки программой на основном языке */
PUT W2
….
CLOSE W2
Обновление: Вот пример обновления данных ("Переместить всех парижских поставщиков в Рим"):
HOLD W3 (SX.S#, SX.CITY): SX.CITY = 'Paris'
/* установить значение 'Rome' столбца CITY в каждом кортеже */
/* рабочего пространства с использованием основного языка */
UPDATE W3
В языке Alpha требуется, чтобы обновляемые строки были сначала выбраны с помощью
HOLD. (Отсутствует аналог беззаботного "поискового UPDATE" языка SQL.) Целевой список
HOLD должен содержать в точности одну переменную с областью значений, что означает, что
UPDATE будет применяться только к одному (базовому) отношению. (Как говорит Кодд, "[ограничение одной переменной с областью определения] позволяет избежать неоправданной сложности". И всего-то!) Если пользователь решит после всего не выполнять
UPDATE, то может быть выполнена операция
RELEASE W3, чтобы освободить сохраняемые кортежи.
Замечание: Хотя в [2] это не говорится, целевой список
HOLD должен включать все атрибуты первичного ключа обновляемого отношения, чтобы система могла узнать, какие кортежи вы обновляете [3]. Сами атрибуты первичного ключа не могут напрямую обновляться с помощью последовательности
HOLD…UPDATE, но для достижения аналогичного эффекта можно использовать удаления и вставки.
Для
HOLD…UPDATE/RELEASE также возможен конвейерный режим (аналогично UPDATE CURRENT в языке SQL). Странно, что нет аналога DELETE CURRENT. Однако это упущение не является важным, поскольку -- как я утверждаю в [9] -- идея обновления или удаления (а также и вставки) одного кортежа в любом случае является плохой.Операции обновления следует всегда выполнять над множествами.
Вероятно, можно сказать, что части Alpha, связанные с модификацией, не относятся к сильным сторонам языка; действительно приведенное обсуждение порождает много вопросов, которые просто не затрагиваются в статье.
Удаление: Операция
DELETE в основном проста, если оставить в стороне приведенную ранее критику, применимую к операциям модификации в целом. Вот пример:
DELETE SX: SX.S# = 'S1'
В своей следующей заметке я завершу обсуждение подъязыка данных Alpha.
Содержание Назад Вперед