动态 SQL 应用程序
使用动态SQL, Db2 可以在程序运行时准备并执行SQL语句。 当您在编写或运行程序之前不知道SQL语句的格式时,动态SQL是一个不错的选择。
使用动态 SQL 的应用程序以字符串的形式生成 SQL 语句,或接受 SQL 语句作为输入。 根据应用需求,您也许可以简化编程。 请尽量规划应用程序,使其不使用SELECT语句,或者仅使用返回已知数据类型已知数量的值的语句。 一般来说,越复杂的动态程序,越是你事先不知道应用程序发出的SQL语句。
典型的动态SQL应用程序需要执行以下步骤:
- 将输入数据转换为SQL语句。
- 准备要执行的SQL语句,并获取结果表的描述(如果有)。
- 为SELECT语句获取足够的主存储空间来容纳检索到的数据。
- 执行语句或获取数据行。
- 处理返回的信息。
- 处理SQL返回代码。
本例显示了一个C程序的一部分,该程序向 动态发送SQL语句。 Db2 假设您正在编写一个程序来记录书籍的库存。 您需要更新的表格取决于您程序的输入。 本示例演示了如何构建 SQL 语句,然后调用 Db2 执行该语句。
/*********************************************************/
/* Determine which table to update, then build SQL */
/* statement dynamically into 'stmt' variable. */
/*********************************************************/
strcpy(stmt,"UPDATE ");
EXEC SQL SELECT TYPE INTO :book_type FROM BOOK_TYPES WHERE
TITLE=:bktitle;
IF (book_type=='FICTION') strcpy(table_name,"FICTION_BOOKS");
ELSE strcpy(table_name,"NON_FICTION_BOOKS");
strcat(stmt,table_name);
strcat(stmt,
" SET INVENTORY = INVENTORY-1 WHERE TITLE = :bktitle");
/*********************************************************/
/* PREPARE and EXECUTE the statement */
/*********************************************************/
EXEC SQL PREPARE OBJSTMT FROM :stmt;
EXEC SQL EXECUTE OBJSTMT;