Классика баз данных - статьи

       

X2 FROM EMP WHERE EMPNO


SELECT SAL INTO X1: X2 FROM EMP WHERE EMPNO = Z1:Z2;

Если имя объявленной программной переменной совпадает с именем столбца в базе данных (например, WHERE SAL = COMM, если COMM – объявленная программная переменная), система предполагает, что это ссылка на программную переменную, а не на столбец.

В приведенных выше примерах в основную программу возвращается только один кортеж (если запрос вычисляет более одного кортежа, возвращается только первый из них). Однако чаще программисту может понадобиться идентифицировать множество кортежей и обрабатывать их один за другим. Для этой цели мы ввели понятие "курсора" (cursor). Курсор – это символическое имя, которое программист может связать с запросом и использовать для выборки результата запроса, по одному кортежу в каждый момент времени, как показано в примере Р3.

Р3. Прочитать номер отдела с терминала, затем найти и вывести имена служащих данного отдела. (Операторы, помеченные с левого края звездочкой, обрабатываются прекомпилятором SEQUEL. Все остальные – стандартные операторы PL/1. Звездочки не являются частью программы.)

P3: PROC OPTIONS(MAIN); DCL X CHAR(50), Y CHAR(2); * LET C1 BE * SELECT NAME INTO X * FROM EMP WHERE DNO = Y; DISPLAY('DNO?') REPLY(Y); * OPEN C1; DO WHILE (CODE = OK); * FETCH C1; DISPLAY(X); END; * CLOSE C1; END P3;

В этом примере объявления X и Y – стандартны для PL/1. Оператор LET C1 BE <запрос> является объявлением для системы базы данных и связывает имя курсора С1 с данным запросом. Оператор OPEN С1 связывает входную переменную Y с ее текущим значением и подготавливает доставку кортежей, соответствующих запросу. При каждом выполнении FETCH C1 в программные переменные, указанные в запросе, помещаются значения соответствующих атрибутов нового кортежа результата. CODE – это специальная переменная, в которую система управления базой данных помещает код результата после каждого обращения к базе данных. (Здесь мы не приводим полную информацию относительно кодов результата.) Оператор CLOSE C1 сообщает системе, что больше не будут делаться выборки кортежей из результата запроса, в данный момент связанного с С1.

Содержание  Назад  Вперед