SQL\400/静态嵌入式 SQL
静态嵌入式 SQL 语句被写入高级语言程序的源代码中,然后 SQL 预编译器将 SQL 语句转换为高级语言编译器可以接受的格式。
动态 SQL 语句是在程序运行时编制、准备和运行的。
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;
在 Cobol 中,SQL 语句嵌入在特定的程序部分。END-EXEC 必须以句号结束。
EXEC SQL SQL Statement SQL Statement END-EXEC.
可以有任意数量的 SQL 语句。
静态 SQL 提供两种操作模式,以及一些辅助选项。
- 一次 SELECT 表中的一行。
- 将一个或多个表的 SELECT 多行放入游标中。
- 串行游标是指,每次打开游标时,结果集中的每一行只被获取一次,并按顺序遍历数据。每次将一行数据读入程序时,游标将移动到结果集中的下一行。重复此过程,直到到达数据结束,此时应关闭游标。要再次使用游标,请关闭当前使用,然后重新发出打开语句。我们无法在串行游标中回退。
- 滚动游标支持按顺序遍历数据以外的替代方法。访问默认使用串行游标方法,而 Fetch 语句可以定位游标进行读取。如果未指定滚动游标是动态的,则访问为只读。这种类型的游标通常用于程序中,以在最终用户的屏幕上显示数据库的部分内容,然后最终用户可以键入一些内容来浏览数据,从而导致滚动游标定位到数据中的其他位置,以获取用户想要查看的内容。
- 动态滚动游标允许更新访问的行。
这可以通过多种方式进行编程。一种方法是定义一个数据结构,该数据结构定义了在每次执行多行时将被选中的所有数据元素。它读取来自联接文件的数据,类似于在 RPG 或 Cobol 中从一个文件中读取记录。
与许多其他 AS/400 编程语言不同,在这些语言中可以在需要的地方定义变量,例如在将使用它们的某些子程序的开头,SQL/400 要求在程序源代码中,在任何地方使用嵌入 SQL 的程序之前定义任何内容。因此,处理嵌入在另一个高级语言中的 SQL 游标的顺序是
- 声明游标
- 打开游标
- 使用 Select 获取行
- 选择性地删除或更新
- 关闭游标