DB2 – система управления реляционными базами данных. Заданное число упорядоченных столбцов и неупорядоченные строки, страница 21

  • Общая форма

EXEC SQL

UPDATE <таблица>

SET <столбкц> = <новое значение столбца>

WHERE CURRENT OF <имя курсора>;

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

UPDATE затем обновляет строку, в позиции которой стоит курсор.


Динамический SQL


Динамический SQL

  • Динамический против статического SQL
  • SQLDA
  • Моментальные запросы

Динамический SQL

  • Формат предложений динамического SQL полностью неизвестен в момент создания приложения. Некоторые части SQL или даже полностью весь оператор генерируется во время выполнения приложения.
  • Один из примеров приложения, использующего динамический SQLQMF

Мы используем статический SQL когда знаем формат и компоненты SQL оператора в момент создания приложения. Таблицы уже существуют и мы знаем столбцы, которые мы желаем получить или изменить и так далее. Мы можем не знать число извлекаемых строк, но можем использовать курсоры для манипуляции с ними.

Мы используем динамический SQL когда не знаем часть или весь SQL -оператор в момент его описания.

Разработчики QMF использовали динамический SQL, т. к. они не знали какие SQL операторы будут введены пользователем.


Динамический против статического SQL

  • Статический SQL не может иметь DDL и DML в одном приложении, если это касается того же самого объекта; динамический SQL может

 


         Create Table names

          (…                                                                                   char C1[] = “Create Table names

          Select name                                                                    (… “;

          from names

                                                                                  Prepare S1 from C1;

                                                                                                  Execute S1;

Пландоступа                                                        char C2[] = “Select name

     не существует                                                             from names”

Prepare S2 from C2;

Таблица создана

             и использовалась                                            Execute S2;

                динамически

Когда мы прекомпилируем статический SQL, объекты, которыми он манипулирует, должны существовать. Они не могут, следовательно, быть созданы и выполняться манипуляции над ними в том же самом приложении.

Используя динамический SQL мы можем создавать объекты и работать с ними в той же самой программе.

Однако, для динамического SQL существуют некоторые непроизводительные издержки. Анализ и проверка синтаксиса предложений динамического SQL выполняется DB2 во время выполнения приложения, кроме того мы теряем выгоду от оптимизации на этапе прекомпиляции. Динамический SQL хотя и более гибкий, но в то же время более медленный.


Анализ

  • Статический SQL

Более быстрый

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

Все объекты должны существовать

Создается план доступа

  • Динамический SQL

Из-за лучших предположений оптимизатора, может быть быстрее для простых запросов

Не требует повторного связывания

Может быть быстрее, если вместо хост-переменных используются константы

  • Там, где это возможно, используйте статический SQL

Обычно статический SQL быстрее, чем динамический SQL, хотя существуют исключения. Если оператор SELECT очень прост (быстро может быть проанализирован и создан план выполнения), то его лучше выполнить, используя динамический SQL, потому что оптимизатор может принять во внимание текущее состояние статистики базы данных.

Динамический SQL, использующий константы, а не host-переменные в предложении WHERE, может быть быстрее.

Например: