zoukankan      html  css  js  c++  java
  • DB2 9 使用拓荒(733 考试)认证指南,第 4 部分: 嵌入式 SQL 编程(2)

    构建与 DB2 停止交互的使用序次
    developerWorks








    嵌入式 SQL 编程简介

    SQL 和嵌入式 SQL

    机关化盘考说话(Structured Query Language,SQL)是用于哄骗数据库对象及其所包含数据的标准化说话。SQL 由多个不同的语句构成,这些语句用来界说、变化和销毁数据库对象,以及添加、编削、删除和检索数据值。可是,SQL 是非历程的,以是它不是一种通用的编程说话。(SQL 语句是由 DB2 Database Manager 而不是独霸体系来实行的。)因而,经常颠末议定将低级编程说话的决定和序列节制与数据存储、哄骗和检索等 SQL 功效组合起来,开发出数据库使用序次。可以用多种方法将 SQL 与低级编程说话结合起来,但最简朴的方法是将 SQL 语句直接嵌入用于设立建立使用序次的低级编程说话源代码文件中。该技术被称作嵌入式 SQL 编程(embedded SQL programming)。

    运用嵌入式 SQL 拓荒使用序次的缺陷之一是,低级编程说话编译器不熟悉打听在源代码文件中嵌入的 SQL 语句,因而也无法诠释它们。因而,在对包含嵌入式 SQL 的源代码文件停止编译和链接以孕育发作可实行使用序次之前,必需对它们停止预处置责罚(运用称作预编译(precompiling) 的历程)。为了便于停止预处置责罚,在低级编程说话源代码文件中,嵌入的每个 SQL 语句必需以枢纽字 EXEC SQL 为前缀,并以分号(在 C/C 中)或枢纽字 END_EXEC (在 COBOL 中)停止。由一个称为 SQL 预编译器的非凡对象实行预处置责罚;当 SQL 预编译器碰着 EXEC SQL 枢纽字时,就用特定于 DB2 的函数挪用替代随后的文本(直到发现分号(;)或枢纽字 END-EXEC),从而将碰着的 SQL 语句转发给 DB2 Database Manager 停止处置责罚。异常,DB2 Database Manager 也无法直接运用低级编程说话的变量。相反,它必需运用称为宿主变量(host variable)的非凡变量,在使用序次和数据库之间挪动数据(我们将在 声明宿主变量 一节中更加深上天熟悉打听宿主变量)。宿主变量看上去与任何其他低级编程说话变量一样;为了加以区分,必需在名为声明段(declare section)的公用地域中界说它们。其余,为了让 SQL 预编译器区分宿主变量和 SQL 语句中的其他文本,关于宿主变量的全部援用都必需以冒号(:)开头。





    回页首



    静态 SQL

    静态 SQL 语句是一种可以在拓荒时在使用序次中停止硬编码的 SQL 语句,由于关于它的机关和要与之交互的对象(比方表、列和数据标准)的信息事前就知道。由于在拓荒时就知道静态 SQL 语句的细节,以是解析语句以及选择最优化的数据会见打算来实行该语句等使命由 DB2 优化器在拓荒历程中实行。由于其独霸方法已存储在数据库中(作为一个包),无需在使用序次运转时生成,以是静态 SQL 语句可以快速实行。

    该方法的缺陷是,在实行之前,必需筹办好全部的静态 SQL 语句(换言之,必需生成其会见打算并存储在数据库中)。而且,在运转时不能变化静态 SQL 语句,而且每个运用静态 SQL 的使用序次都必需将其独霸包绑定到使用序次将要与之交互的每一个数据库上。其余,由于静态 SQL 使用序次需求延迟熟悉打听数据库对象,以是在拓荒使用序次之后编削这些对象能够孕育发作意想不到的效果。

    以下是静态 SQL 语句的示例:

      SELECT COUNT(*) FROM employee
      UPDATE employee SET lastname = 'Jones' WHERE empid = '001'
      SELECT MAX(salary), MIN(salary) INTO :MaxSalary, :MinSalary FROM employee
            


    静态 SQL 语句但凡较适当于对一组已知的数据库对象实行预界说独霸的高机能使用序次。





    回页首



    静态 SQL

    固然静态 SQL 语句极端苟且包含在使用序次中,但其运用有些受限定,由于必需事前知道它们的名目。而静态 SQL 语句要天真得多,由于它们可以在使用序次运转时停止机关;关于静态 SQL 语句的机关以及要与之停止交互的对象的信息不用事前知道。其余,由于静态 SQL 语句没有预编码的巩固名目,以是可以变化它们所援用的数据对象,而不会影响语句(只需语句援用的对象没有被删除)。

    只管静态 SQL 语句但凡比静态 SQL 语句更加天真,可是将其包含在使用序次中的历程经常更为复杂。由于解析语句并选择最优化的数据会见打算等使命是在使用序次运转时实行的(异常由 DB2 优化器完成),以是静态 SQL 语句的实行时分比等效的静态 SQL 更长。(由于静态 SQL 语句可以哄骗在使用序次运转时失失的数据库统计信息,以是也存在静态 SQL 语句比等效的静态 SQL 语句实行更快的形状,可是那些都是例外而非普通形状。)

    以下是静态 SQL 语句的示例:

     SELECT COUNT(*) FROM ?
     INSERT INTO EMPLOYEES VALUES (?, ?)
     DELETE FROM DEPARTMENT WHERE DEPTID = ?
            


    静态 SQL 语句但凡较适当于与快速变化的数据库停止交互也许应承用户界说和实行特定盘考的使用序次。




    版权声明: 原创作品,应承转载,转载时请务必以超链接方法标明文章 原始情由 、作者信息和本声明。否则将追查司法责任。

  • 相关阅读:
    cae when分组统计
    查看 Chrome 下载的文件的真实下载地址
    directory opus使用教程
    文件内容极速搜索工具: silversearcher-ag
    LINUX SHELL 变量的二次引用
    JS小练习
    jQuery
    JS-BOM对象
    JS-DOM对象
    JavaScript-基础知识
  • 原文地址:https://www.cnblogs.com/zgqjymx/p/1972851.html
Copyright © 2011-2022 走看看