关于 ABAP OPEN SQL SELECT 语句的一些额外说明

简介: 关于 ABAP OPEN SQL SELECT 语句的一些额外说明

如果结果集包含多行,可以在 INTO 或 APPENDING 后使用转义字符 @ 指定任何表类型的内部表 itab 作为宿主变量。内部表的行类型必须满足先决条件。

根据 INSERT 的规则,结果集逐行插入到内部表 itab 中;如果是已排序的表,则执行排序过程。如果使用 INTO,则会初始化内部表。如果使用 APPENDING,则之前的行保持不变。如果与现有的唯一表键冲突,会引发一个无法处理的异常,就像在 INSERT LINES OF 的情况一样。


在将结果集的一行分配给内部表 itab 的初始行之前,会创建一个内部表的初始行,并将结果集的一行分配给这一行。


在将结果集的一行分配给内部表的一行时,无论是否使用 CORRESPONDING FIELDS,适用的规则与分配给个别工作区域 wa 时的规则相同(参见上文),但插入到内部表时的例外是,LOB 句柄可以作为定位器创建,而不是作为读取流。


如果没有使用附加的 PACKAGE SIZE,结果集的所有行都将插入到内部表 itab 中,且在 SELECT 后不得指定 ENDSELECT。


如果结果集为空,当使用 INTO 时,将初始化内部表;使用 APPENDING 时,内部表保持不变。


当指定具有唯一主键或次键的内部表时,如果尝试创建重复条目,将引发无法处理的异常。


如果在使用 CORRESPONDING FIELDS 时,内部表包含更多不必要的列,通常会由初始字段占用过多内存,并且语法检查会显示警告。在需要列的情况下,例如程序用派生值填充这些列时,可以使用 pragma 绕过警告。


由于一个 Open SQL 语句能够分配的数据流的最大数量限制为16,因此创建读取流来导入内部表没有任何意义。


附加说明


… PACKAGE SIZE n


效果


如果指定了 PACKAGE SIZE,那么对于 SELECT 的结果集,所有行将在循环中处理,并且这个循环必须以 ENDSELECT 结束。这些行以 n 行的包插入到内部表 itab 中。n 需要是一个宿主变量、宿主表达式或类型为 i 的字面量(包含行数)。n 的内容必须符合无损分配的数据类型 i 的规则。如果 n 的值小于 0,将引发无法处理的异常。如果 n 等于 0,则结果集的所有行都将插入内部表 itab。如果在 FETCH 语句中使用,则从当前游标位置提取 n 行。


如果使用 INTO,每次插入前都会初始化内部表,并且在 SELECT 循环中它只包含当前包的行。如果使用 APPENDING,则每个 SELECT 循环或每次使用 FETCH 提取时,将进一步的包添加到内部表的现有行中。


如果使用 INTO,ENDSELECT 后 itab 的内容未定义。即表可能包含最后一个包的行,也可能是初始化状态。如果使用 APPENDING,则 itab 的内容保留最后一个循环的状态。


注意


附加的 PACKAGE SIZE 可以在 INTO 之后使用,以限制一次性读入的数据量。否则,在将过大的数据集读入内部表时,可能会发生运行时错误,因为超出了其最大大小。在 APPENDING 后,PACKAGE SIZE 不能防止此种运行时错误。


如果与 FOR ALL ENTRIES 一起指定了 PACKAGE SIZE,则所有选定的行最初都读入一个内部系统表,包只在从系统表传递到实际目标表时创建。


PACKAGE SIZE 不影响配置在配置文件参数中,用于在数据库服务器和应用服务器之间传输数据的包的大小。

相关文章
|
20天前
|
SQL 数据库
SQL INSERT INTO SELECT 语句
SQL INSERT INTO SELECT 语句
32 8
|
20天前
|
SQL 关系型数据库 MySQL
SQL SELECT INTO 语句
SQL SELECT INTO 语句
26 6
|
18天前
|
SQL 关系型数据库 MySQL
SQL SELECT TOP, LIMIT, ROWNUM 子句
SQL SELECT TOP, LIMIT, ROWNUM 子句
24 2
SQL SELECT TOP, LIMIT, ROWNUM 子句
|
8天前
|
SQL 数据库
SQL INSERT INTO SELECT 语句
SQL INSERT INTO SELECT 语句
34 3
|
9天前
|
SQL 关系型数据库 MySQL
SQL SELECT INTO 语句
SQL SELECT INTO 语句
29 4
|
15天前
|
SQL Oracle 关系型数据库
SQL SELECT TOP, LIMIT, ROWNUM 子句
SQL SELECT TOP, LIMIT, ROWNUM 子句
24 4
|
23天前
|
SQL Oracle 关系型数据库
SQL SELECT TOP, LIMIT, ROWNUM 子句
SQL SELECT TOP, LIMIT, ROWNUM 子句
25 3
|
24天前
|
SQL 数据库
SQL SELECT DISTINCT 语句
SQL SELECT DISTINCT 语句
24 1
|
27天前
|
SQL 存储 PHP
SQL SELECT 语句
SQL SELECT 语句
27 3
|
2天前
|
SQL IDE Java
Java连接SQL Server数据库的详细操作流程
Java连接SQL Server数据库的详细操作流程