Если С1 открывается повторно, входная
Если С1 открывается повторно, входная переменная Y повторно связывается с потенциально другим значением, и может быть выбрано новое множество кортежей.
При каждом открытии курсора для его поддерживается позиция во множестве кортежей, на котором он определен (так называемое активное множество (active set)). Если каждый кортеж активного множества однозначно связан с кортежем некоторого отношения (например, запрос включает ключ этого отношения), говорят, что курсор является обновляемым (updateable). Это означает, что на текущую позицию курсора можно ссылаться в операторах UPDATE или DELETE для обозначения кортежа, который будет модифицироваться или удаляться. Предположим, например, что нам нужно модифицировать программу примера Р3, чтобы она повышала зарплату каждому служащему в указанном отделе. Это можно сделать, заменив цикл DO в Р3 следующим:
DO WHILE (CODE = OK); * FETCH C1; /* Вычислить новую зарплату для этого служащего в программной переменной Z */ * UPDATE EMP * SET SAL = Z * WHERE CURRENT OF C1; END;
Если в операторе модификации или удаления используется фраза WHERE CURRENT OF <имя-курсора>, в ней не должны присутствовать другие предикаты выбора. Ссылка на курсор не может использоваться в операторе INSERT, так как отношения являются неупорядоченными объектами, и, следовательно, вставка с помощью курсора не определена.
Другой тип ссылки на курсор может использоваться для выбора кортежей путем сравнения их значений со значениями кортежа, на который в данный момент указывает данный курсор, как показано в примере Р4.
Р4. Предположим, что курсор С2 спозиционирован на некоторый кортеж в DEPT. Определить С5 как множество кортежей EMP, значение DNO которых соответствует кортежу в DEPT, на который указывает С2.
LET C5 BE SELECT * FROM EMP WHERE DNO = DNO OF CURSOR C2 ON DEPT;
Заметим, что CURRENT OF C2 обозначает реальный кортеж, на который указывает С2, но DNO = DNO OF CURSOR C2 – это условие поиска другого множества кортежей по соответствию значений.
Содержание Назад Вперед