WHERE NAME LIKE ‘Smith’ в противоположность к
WHERE NAME LIKE :search_name
В большинстве случаев, статический SQL будет выполняться быстрее чем динамический SQL, но если Вы сомневаетесь, закодируйте оба варианта SQL и протестируйте их.
Использование SQL-оператора PREPARE
CHAR CRE_TAB [80] = “CREATE TABLE …”
При использовании динамического SQL мы должны выполнить следующие четыре шага:
Приготовление и выполнение предложений динамического SQL-оператора
EXEC SQL BEGIN DECLARE SECTION;
char dropit [80] = “DROP TABLE CRIMES”;
EXEC SQL END DECLARE SECTION;
EXEC SQL
PREPARE do_drop
FROM :dropit;
EXEC SQL
EXECUTE do_drop;
В этом примере мы декларируем host-переменную с именем dropit. Эта переменная содержит наш SQL-оператор.
Затем мы выполняем PREPARE; именуем приготовленный оператор (имя do_drop).
Наконец мы выполняем оператор EXECUTE do_drop и удаляем таблицу.
Использование SQL-оператора EXECUTEIMMEDIATE
EXEC SQL BEGIN DECLARE SECTION;
char dropit [80] = “DROP TABLE CRIMES”;
EXEC SQL END DECLARE SECTION;
EXEC SQL
EXECUTE IMMEDIATE :dropit;
Альтернативный способ по сравнению с PREPARE и EXECUTE – использование EXECUTE IMMEDIATE. В этом случае приготовление и выполнение выполняется за один шаг.
Использование параметров в динамическом SQL
UPDATE T1… WHERE C1 = :HOSTVAR
Host-переменные не могут быть использованы в динамическом SQL-операторе.
Мы размещаем в SQL-операторе символ ‘?’ на каждом месте, где требуется параметр. В предложении USING оператора EXECUTE перечисляем имена host-переменных. DB2 затем подставляет вместо ‘?’ значение соответствующей host-переменной из списка.
Использование маркеров параметров
EXEC SQL BEGIN DECLARE SECTION;
short wanted;
char zap[80] = “DELETE FROM CRIMES WHERE CRIME_CODE = ?”;
EXEC SQL END DECLARE SECTION;
EXEC SQL
PREPARE gone
FROM :zap;
EXEC SQL
EXECUTE gone
USING :wanted;
В предложении WHERE оператора DELETE мы сравниваем CRIME_CODE с параметром. В предложении EXECUTE маркер параметра заменяется значением host-переменной с именем wanted.
/****************************************************************/
/* S001 */
/* Пример использования статического SQL с host-переменными */
/* Использование индикаторных переменных */
/****************************************************************/
#include <stdlib.h>
#include <stdio.h>
EXEC SQL INCLUDE SQLCA;
char s??(30??);
class WORK
{
private:
EXEC SQL BEGIN DECLARE SECTION;
char firstname??(10??);
char lastname??(12??);
char address??(13??);
char phone??(8??);
char datetime??(23??);
long int salary;
short int identifier;
short int indicator;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.