跳转到内容

SQL\400/静态嵌入式 SQL

来自维基教科书,开放的书籍,开放的世界

静态嵌入式 SQL

[编辑 | 编辑源代码]

静态嵌入式 SQL 语句被写入高级语言程序的源代码中,然后 SQL 预编译器将 SQL 语句转换为高级语言编译器可以接受的格式。

动态 SQL 语句是在程序运行时编制、准备和运行的。

SQL 嵌入 RPG

[编辑 | 编辑源代码]

SQL 语句可以放在 RPG 程序的计算中...详细计算、总计计算或 RPG 子程序。RPG 使用位置 6 的字符(用 C 表示计算)来识别程序的哪个部分。以下是 SQL 语句通常在 RPG 程序计算中嵌入的方式。

 C/EXEC SQL
 C+ SQL Statement
 C+ SQL Statement
 C+ SQL Statement...
 C/END-EXEC

可以有任意数量的 SQL 语句。请注意第一行和最后一行开头的斜杠,它们界定了嵌入在 RPG 代码中的 SQL 语句的开始和结束。请注意每个 SQL 语句开头的加号。

传统的 RPG 使用在程序代码的 F-spec 中指定的 文件。SQL 语句可以包含可能未在程序代码的 F-spec 中指定的 文件。

从 Release V5R4 开始,嵌入式 SQL 也可以用于 (RPG) 自由格式表示法。嵌入式 SQL 语句以 EXEC SQL 开头,可以放在第 8 列和第 80 列之间的任何位置。SQL 语句可以紧接在 EXEC SQL 之后编码,也可以从下一行开始。SQL 语句可以拆分成多行,但必须在第 8 列和第 80 列之间指定。自由格式中的嵌入式 SQL 语句以分号(;)结束,就像其他任何自由格式 RPG 语句一样。

/Free
    Exec SQL  SQL Statement;
    Exec SQL  
      SQL Statement;
    Exec SQL  SQL Statement 1st Row
      SQL Statement 2nd Row
      ...
      SQL Statement nth Row;

示例

 /Free
    Exec SQL  Select Coalesce(Max(OrdPos) + 1, 1) into :NewPos
                 From OrderPosition
                 Where OrderNo = :ParOrderNo;

SQL 嵌入 Cobol

[编辑 | 编辑源代码]

在 Cobol 中,SQL 语句嵌入在特定的程序部分。END-EXEC 必须以句号结束。

EXEC SQL
  SQL Statement
  SQL Statement
END-EXEC.

可以有任意数量的 SQL 语句。

静态 SQL SELECT 模式

[编辑 | 编辑源代码]

静态 SQL 提供两种操作模式,以及一些辅助选项。

  • 一次 SELECT 表中的一行。
  • 将一个或多个表的 SELECT 多行放入游标中。
    • 串行游标是指,每次打开游标时,结果集中的每一行只被获取一次,并按顺序遍历数据。每次将一行数据读入程序时,游标将移动到结果集中的下一行。重复此过程,直到到达数据结束,此时应关闭游标。要再次使用游标,请关闭当前使用,然后重新发出打开语句。我们无法在串行游标中回退。
    • 滚动游标支持按顺序遍历数据以外的替代方法。访问默认使用串行游标方法,而 Fetch 语句可以定位游标进行读取。如果未指定滚动游标是动态的,则访问为只读。这种类型的游标通常用于程序中,以在最终用户的屏幕上显示数据库的部分内容,然后最终用户可以键入一些内容来浏览数据,从而导致滚动游标定位到数据中的其他位置,以获取用户想要查看的内容。
    • 动态滚动游标允许更新访问的行。

SQL 游标

[编辑 | 编辑源代码]

这可以通过多种方式进行编程。一种方法是定义一个数据结构,该数据结构定义了在每次执行多行时将被选中的所有数据元素。它读取来自联接文件的数据,类似于在 RPG 或 Cobol 中从一个文件中读取记录。

与许多其他 AS/400 编程语言不同,在这些语言中可以在需要的地方定义变量,例如在将使用它们的某些子程序的开头,SQL/400 要求在程序源代码中,在任何地方使用嵌入 SQL 的程序之前定义任何内容。因此,处理嵌入在另一个高级语言中的 SQL 游标的顺序是

  1. 声明游标
  2. 打开游标
  3. 使用 Select 获取行
  4. 选择性地删除或更新
  5. 关闭游标
华夏公益教科书