EXEC SQL

EXEC SQL在线实用程序控制语句用于声明游标或执行动态SQL语句。 您可以将此实用程序作为LOAD实用程序 Db2 LOAD实用程序的交叉加载功能。

交叉加载功能允许您使用单个加载任务将数据从一个位置传输到另一个位置,或从同一位置的某个表传输到另一个表。 您可以使用本地服务器或任何符合DRDA标准的远程服务器作为数据输入源,为表格填充数据。 您的信息甚至可能来自其他来源,除了 Db2 for z/OS®;您可以使用 IBM® 信息集成器联盟功能,从 Oracle 和 Sybase 等不同来源获取数据,以及整个 Db2 数据库服务器。

重要: 更改开始如果将 DSNUTIL 与 DBPROTOCOL(DRDACBF) 绑定,则不能使用 EXEC SQL 发出远程动态 SQL 语句来修改数据;只能使用 EXEC SQL 声明游标,然后由 LOAD 用于更新。更改结束

输出

当您指定游标时,EXEC SQL控制语句会生成一个结果表。

需要授权

EXEC SQL语句本身无需任何权限即可执行。 适用于动态准备由EXECUTE IMMEDIATE指定的SQL语句的授权规则。

EXEC SQL的执行阶段

EXEC SQL控制语句完全在EXEC阶段执行。 如有必要,您可以重新启动EXEC阶段。

EXEC SQL的并发性和兼容性

您可以将EXEC SQL控制语句与任何允许在表空间上并发访问SQL的实用程序一起使用。 其他数据库不受影响。

更改开始

EXEC SQL语句数量的限制

虽然 Db2 不限制您可以在单个输入流(SYSIN)中包含的EXEC SQL语句的数量,但根据可用资源的情况,运行过多的语句可能会导致失败或长时间运行。 例如,运行数千个EXEC SQL语句可能需要花费不可接受的时间,或者失败。

更改结束

EXEC SQL语法

您可以使用 ISPF /PDF编辑功能创建控制语句。 创建后,将其保存在顺序或分区数据集中。 当您创建用于运行作业的 JCL 时,请使用 SYSIN DD 语句指定包含实用程序控制语句的数据集的名称。

以UNICODE提交的实用程序控制语句(包括EXEC SQL)在处理前会被转换为EBCDIC,但字符串常量不会被转换。 字符串常量保留在指定字符集中的位置。 在某些情况下,您可能需要使用十六进制字符串常量来实现所需的行为。

阅读语法图跳过可视化语法图 EXEC SQL DECLARE光标名称CURSORFORSELECT 语句非选择动态SQL语句 ENDEXEC

选项说明

光标名称
指定光标名称。 名称不得与同一输入流中已声明的游标相同。 当使用 Db2 跨加载器功能从远程服务器加载数据时,必须使用包含三个部分的名称来识别光标。 使用EXEC SQL实用程序指定的游标名称不能超过八个字符
select-statement
指定光标的显示结果。 此语句可以是任何有效的 SQL SELECT 语句,包括连接、并集、转换、聚合、特殊寄存器和用户定义的函数。
非选择动态SQL语句
指定一个动态 SQL 语句,作为 EXECUTE IMMEDIATE 的输入。 您可以在实用程序语句中指定以下动态 SQL 语句:
  • ALTER
  • COMMENT ON
  • COMMIT
  • 创建
  • 删除
  • DROP
  • EXPLAIN
  • GRANT
  • INSERT
  • LABEL ON
  • RENAME
  • REVOKE
  • SET CURRENT DEGREE
  • SET CURRENT SQLID
  • UPDATE

每个SQL语句作为一个单独的线程运行。 当实用程序执行SQL语句时,会解析指定的语句字符串并检查是否有错误。 如果SQL语句无效,EXEC SQL不会执行该语句,并报告错误情况。 如果 SQL 语句有效,但在执行期间发生错误,EXEC SQL 会报告该错误情况。 当发生错误时,该实用程序将终止。

EXEC SQL的终止或重启

如果您提交了任务,或者拥有 SYSOPR、SYSCTRL 或 SYSADM 权限,则可以使用 TERM UTILITY 命令终止 EXEC SQL 实用程序任务。

您可以重新启动EXEC SQL实用程序作业,但作业将从头开始。 如果您正在重新启动此实用程序,而之前执行的EXEC SQL命令已成功完成,但后来的实用程序却失败了,那么请尽量不要更改EXEC SQL实用程序的控制语句。 如果您必须更改 EXEC SQL 实用程序控制语句,请谨慎操作;任何更改都可能导致重新启动处理失败。

示例1:创建表格

以下控制语句指定 Db2 创建表MYEMP,其行和列与示例表EMP相同。

开始通用编程接口信息。
EXEC SQL
  CREATE TABLE MYEMP LIKE DSN8C10.EMP CCSID EBCDIC
ENDEXEC
通用编程接口信息结束。

这种类型的语句可用于创建映射表。

示例2:在表格中插入行

以下控制语句指定 Db2 将示例表EMP中的所有行插入到表MYEMP中。

开始通用编程接口信息。
EXEC SQL
  INSERT INTO MYEMP SELECT * FROM DSN8C10.EMP
ENDEXEC
通用编程接口信息结束。

示例3:声明游标

以下控制语句声明 C1 为查询光标,用于返回表 DSN8810.EMP 中的所有行。

开始通用编程接口信息。
EXEC SQL
  DECLARE C1 CURSOR FOR SELECT * FROM DSN8C10.EMP
ENDEXEC
通用编程接口信息结束。

您可以使用已声明的游标与 Db2 跨加载器功能的一部分,使用已声明的游标从本地服务器或任何符合DRDA标准的远程服务器加载数据。 Db2 交叉加载器功能的一部分。