Главная страница
Навигация по странице:

  • Способы применения языков программирования в прикладных программах

  • Процессы выполнения операторов SQL разделен на пять этапов

  • Последовательность выполнения операторов SQL Принципы, которые должны соблюдаться при объединение операторов SQL с базовым языком программирования

  • • однострочные запросы, где ожидаемые результаты соответствуют одной строке данных. Эта строка может содержать значения нескольких столбцов;

  • Курсоры — операторы обработки многострочных запросов

  • DECLARE CURSOR FOR ::=

  • [ FOR {READ ONLY | UPDATE [OF […n]]}]

  • Оператор закрытия курсора

  • Удаление и обновление данных с использованием курсора

  • Чтобы свести к минимуму число требуемых блокировок, при работе интерактивных программ следует придерживаться следующих правил

  • необходимо избегать программ, в которых осуществляется интенсивное взаимодействие с пользователем или осуществляется просмотр очень большого числа строк данных;

  • Презентация Microsoft PowerPoint (2). Встроенный язык sql


    Скачать 1.1 Mb.
    НазваниеВстроенный язык sql
    Дата20.01.2020
    Размер1.1 Mb.
    Формат файлаpptx
    Имя файлаПрезентация Microsoft PowerPoint (2).pptx
    ТипДокументы
    #104916
    ВСТРОЕННЫЙ ЯЗЫК SQL

    Назначение и особенности встроенного языка SQL

    Язык SQL предназначен для организации доступа к базам данных и предполагается, что доступ к БД может быть осуществлён в двух режимах: 1.Все возможности интерактивного языка запросов доступны в прикладном программировании; 2.В интерактивном режиме можно отладить основные алгоритмы обработки информации, которые в дальнейшем могут быть готовыми вставлены в работающие приложения.
    Способы применения языков программирования в прикладных программах

    Встроенный SQL. При таком подходе операторы SQL встраиваются непосредственно в исходный текст программы на базовом языке. При компиляции программы со встроенными операторами SQL используется специальный препроцессор SQL, который преобразует исходный текст в исполняемую программу;
    Языки программирования интерфейса (API — application program interface). При использовании данного способа прикладная программа взаимодействует с СУБД путем применения специальных функций, вызывая эти функции.

    Процессы выполнения операторов SQL разделен на пять этапов

    На первом этапе выполняется синтаксический анализ оператора SQL. На этом этапе проверяется корректность записи оператора SQL в соответствии с правилами синтаксиса
    На втором этапе проверяется корректность параметров оператора SQL: имен отношений, имен полей данных, привилегий пользователя по работе с указанными объектами.
    На третьем этапе проводится оптимизация запроса. СУБД проводит разделение целостного запроса на ряд минимальных операций и оптимизирует последовательность их выполнения с точки зрения временных затрат на выполнения запроса.


    На четвертом этапе СУБД генерирует двоичную версию оптимального плана опроса, подготовленного на третьем этапе. Двоичный план выполнения запроса СУБД фактически является эквивалентом объектного кода программы.
    На пятом этапе СУБД реализует разработанный план, тем самым выполняя запрос.

    Последовательность выполнения операторов SQL
    Принципы, которые должны соблюдаться при объединение операторов SQL с базовым языком программирования:

    операторы SQL включаются непосредственно в текст программы на исходном языке программирования. Исходная программа поступает на вход препроцессора SQL, который компилирует операторы SQL;
    встроенные операторы SQL могут ссылаться на переменные базового языка программирования;
    встроенные операторы SQL получают результаты SQL-запросов с помощью переменных базового языка программирования;
    для присвоения неопределенных значений (NULL) атрибутам отношений БД используются специальные функции;
    для обеспечения построчной обработки результатов запросов во встроенный SQL добавляются несколько новых операторов, которые отсутствуют в интерактивном SQL. Операторы манипулирования данными не требуют

    • однострочные запросы, где ожидаемые результаты соответствуют одной строке данных. Эта строка может содержать значения нескольких столбцов;
    • многострочные запросы, результатом которых является получение целого набора строк. При этом приложение должно иметь возможность проработать все полученные строки. Значит, должен существовать механизм, который поддерживает просмотр и обработку полученного набора строк. Курсоры — операторы обработки многострочных запросов

    Для работы с курсором добавляется несколько новых операторов SQL:
    DECLARE CURSOR определяет выполняемый запрос, задает имя курсора и связывает результаты запроса с заданным курсором.
    OPEN дает команду СУБД выполнить описанный запрос, создать виртуальный набор строк, который соответствует заданному запросу.


    FETCH продвигает указатель записей на следующую позицию. Во многих СУБД этот оператор реализует более широкие функции перемещения.
    CLOSE закрывает курсор и прекращает доступ к записям динамической таблицы.

    DECLARE <имя_курсора> CURSOR FOR <спецификация_курсора> <спецификация_курсора>::=<выражение_запроса SELECT>

    В соответствии со стандартом SQL2 Transact SQL содержит расширенное определение курсора:
    DECLARE <имя_курсора> [INSENSITIVE] [SCROLL] CURSOR FOR <оператор_выбора SELECT>
    [ FOR {READ ONLY | UPDATE [OF <имя_столбца 1> […n]]}]
    Параметр INSENSITIVE (нечувствительный) определяет режим создания набора строк, соответствующего определяемому курсору, при котором все изменения в исходных таблицах, произведенные после открытия курсора другими пользователями, не видны в нем.

    Ключевое слово SCROLL определяет, что допустимы любые режимы перемещения по курсору (FIRST, LAST, PRIOR, NEXT, RELATIVE, ABSOLUTE) в операторе FETCH
    При использовании параметра UPDATE [OF |,...]] мы задаем перечень столбцов, в которых допустимы изменения в процессе нашей работы с курсором.

    Оператор закрытия курсора

    Оператор закрытия курсора имеет простой синтаксис, он выглядит следующим образом:
    CLOSE <имя_курсора>
    В некоторых коммерческих СУБД кроме оператора закрытия курсора используется еще оператор деактивации (уничтожения) курсора. Например, в MS SQL Server 7.0 наряду с оператором закрытия курсора используется оператор:
    DEALLOCATE <имя_курсора>

    Удаление и обновление данных с использованием курсора

    Операция удаления строки, связанной с текущим указателем курсора, имеет следующий синтаксис:
    DELETE FROM <имя_таблицы> WHERE CURRENT OF <имя_курсора>
    Синтаксис операции позиционной модификации следующий:
    UPDATE <имя_таблицы> SET <имя_столбца> = ( <значение>| NULL} [{, <имя_столбца_N>={<значение>| NULL}}...] WERE CURRENT OF <имя_курсора>


    Для того чтобы можно было применять позиционные операторы удаления (DELETE) и модификации (UPDATE), курсор, согласно стандарту SQL1, должен удовлетворять следующим требованиям:
    запрос, связанный с курсором, должен считывать данные из одной исходной таблицы, т. е. в предложении FROM запроса SELECT, связанного с определением курсора (DECLARE CURSOR), должна быть задана только одна таблица;
    в запросе не может присутствовать параметр упорядочения ORDER BY. Для того чтобы сохранялось взаимно-однозначное соответствие строк курсора и исходной таблицы, курсор не должен идентифицировать упорядоченный набор данных;


    в запросе не должно присутствовать ключевое слово DISTINCT;
    запрос не должен содержать операций группировки, т.е. в нем не должно присутствовать предложение GROUP BY или HAVING;
    пользователь, который хочет применить операции позиционного удаления или обновления, должен иметь соответствующие права на выполнение данных операций над базовой таблицей.

    Чтобы свести к минимуму число требуемых блокировок, при работе интерактивных программ следует придерживаться следующих правил:

    необходимо делать транзакции как можно короче;
    необходимо выполнять оператор завершения COMMIT после каждого запроса и как можно скорее после изменений, сделанных программой;
    необходимо избегать программ, в которых осуществляется интенсивное взаимодействие с пользователем или осуществляется просмотр очень большого числа строк данных;


    если возможно, то лучше не применять прокручиваемые курсоры (SCROLL), потому что они требуют блокирования всех строк ныборки, связанных с открытым курсором;
    использование простого последовательного курсора позволит системе разблокировать текущую строку, как только будет выполнена операция FETCH, что минимизирует блокировки других пользователей, работающих параллельно с вами и использующих те же таблицы;
    если возможно, определяйте курсор как READ ONLY.



    написать администратору сайта