动态 SQL 应用程序

使用动态SQL, Db2 可以在程序运行时准备并执行SQL语句。 当您在编写或运行程序之前不知道SQL语句的格式时,动态SQL是一个不错的选择。

使用动态 SQL 的应用程序以字符串的形式生成 SQL 语句,或接受 SQL 语句作为输入。 根据应用需求,您也许可以简化编程。 请尽量规划应用程序,使其不使用SELECT语句,或者仅使用返回已知数据类型已知数量的值的语句。 一般来说,越复杂的动态程序,越是你事先不知道应用程序发出的SQL语句。

典型的动态SQL应用程序需要执行以下步骤:

  1. 将输入数据转换为SQL语句。
  2. 准备要执行的SQL语句,并获取结果表的描述(如果有)。
  3. 为SELECT语句获取足够的主存储空间来容纳检索到的数据。
  4. 执行语句或获取数据行。
  5. 处理返回的信息。
  6. 处理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;
通用编程接口信息结束。