REXX应用程序,用于发布SQL语句

只要可以使用REXX命令,就可以在REXX程序中编写SQL语句。

Db2 REXX Language Support 支持所有动态SQL语句和以下静态SQL语句:
  • CALL
  • CLOSE
  • CONNECT
  • DECLARE CURSOR
  • 描述准备好的陈述或表格
  • DESCRIBE CURSOR
  • DESCRIBE INPUT
  • DESCRIBE PROCEDURE
  • EXECUTE
  • EXECUTE IMMEDIATE
  • FETCH
  • OPEN
  • PREPARE
  • 释放连接
  • SET CONNECTION
  • SET CURRENT PACKAGE PATH
  • 设置当前套餐
  • 设置主机变量 = 当前日期
  • 设置主机变量 = 当前度数
  • SET 主机变量 = 当前成员
  • SET 主机变量 = 当前包集
  • SET 主机变量 = 当前路径
  • SET 主机变量 = 当前服务器
  • 设置主机变量 = 当前 SQLID
  • 设置主机变量 = 当前时间
  • SET 主机变量 = 当前时间戳
  • 设置主机变量 = 当前时区

REXX程序中的每个SQL语句必须以EXECSQL开头,且大小写或大小写混合均可。 以下项目之一必须遵循EXECSQL:

  • 用单引号或双引号括起来的SQL语句。
  • 一个包含 SQL 语句的 REXX 变量。 REXX变量前面不能有冒号。

例如,您可以在REXX程序中使用以下任一方法来执行COMMIT语句:

EXECSQL "COMMIT"
rexxvar="COMMIT"
EXECSQL rexxvar

必须在DSNREXX下使用EXECUTE IMMEDIATE或PREPARE和EXECUTE执行以下动态语句:

  • DECLARE GLOBAL TEMPORARY TABLE
  • SET CURRENT DEBUG MODE
  • SET CURRENT DECFLOAT ROUNDING MODE
  • SET CURRENT MAINTAINED TABLE TYPES FOR OPTIMIZATION
  • SET CURRENT QUERY ACCELERATION
  • SET CURRENT REFRESH AGE
  • SET CURRENT ROUTINE VERSION
  • SET SCHEMA

您不能执行包含宿主变量的 SELECT、INSERT、UPDATE、MERGE 或 DELETE 语句。 相反,您必须在语句中执行PREPARE,用参数标记代替宿主变量,然后在EXECUTE、OPEN或FETCH语句中使用宿主变量。 更多信息请参见宿主变量

SQL语句遵循适用于REXX命令的规则。 SQL语句可以以分号结尾,也可以用单引号或双引号括起来,如下例所示:
'EXECSQL COMMIT';
注释
在SQL语句中不能包含REXX注释(/* … */)或SQL注释(--)。 但是,您可以在程序中的任何其他位置添加REXX注释。
SQL语句的分隔符
在REXX程序中,通过在SQL语句前添加 EXECSQL 来限定SQL语句。 如果语句是文字字符串,请用单引号或双引号将其括起来。
SQL语句的继续
跨行的SQL语句遵循REXX语句延续规则。 您可以将语句分成几部分,每部分占一行,并用逗号或连字符分隔。 例如,以下任一陈述均成立:
EXECSQL ,
   "UPDATE DSN8C10.DEPT" ,
   "SET MGRNO = '000010'" ,
   "WHERE DEPTNO = 'D11'"
"EXECSQL " || ,
"  UPDATE DSN8C10.DEPT " || ,
"  SET MGRNO = '000010'" || ,
"  WHERE DEPTNO = 'D11'"
包括代码
EXECSQL INCLUDE语句对REXX无效。 因此,您不能在程序中包含外部定义的SQL语句。
页边距
与REXX命令一样,SQL语句可以在行中的任何位置开始和结束。

您可以使用任何有效的、不以句号结尾的REXX名称作为主机变量。 但是,主机变量名称不应以“SQL”、“RDI”、“DSN”、“RXSQL”或“QRW”开头。 变量名最多为64字节。

Null
REXX空值和SQL空值是不同的。 REXX语言中有一个空字符串(长度为0的字符串)和一个空子句(只包含空格和注释的子句)。 SQL空值是一个特殊值,与所有非空值不同,表示没有值。 将 REXX 空值分配给 Db2 列不会使列值变为空值。
声明标签
您可以像标记REXX命令一样,在SQL语句前添加一个标签。
处理 SQL 错误代码
Rexx应用程序可以从 Db2 获取有关SQL错误的更多信息。 更多信息,请参阅 《在REXX应用程序中处理SQL错误代码 》。