IBM Books

Net.Data 参考


宏语言结构

本章节描述 Net.Data 宏文件中使用的 Net.Data 宏语言结构。

每个语言结构说明可以包含以下信息:

目的
定义为什么在 Net.Data 宏中使用语言结构。

语法
提供语言结构的逻辑结构的图例。

参数
定义语法图例中的所有成份,并提供与其它语言结构的语法和例子的交叉引用。

上下文
说明可以在 Net.Data 宏结构中的哪些地方使用此语言结构。

限制
定义它可以包含的语言成份,并指定任何用法上的限制。

例子
提供关于在 Net.Data 宏中如何使用关键字语句或块的一些简单例子和说明。

宏中使用以下结构;请参阅每个结构说明的语法和例子。

注解块

目的

把 Net.Data 宏的函数文档化。因为可以在宏文件的任何地方使用 COMMENT (注解)块, 所以它不在其它语法图中再作说明。

语法

>>-%{---文本---%}----------------------------------------------><
 

文本
一行或多行中的任何字符串。Net.Data 将忽略所有注解的内容。

上下文

可以在一个 Net.Data 宏的两个 Net.Data 语言结构之间的任何位置放上注解。

限制

允许任何文本或字符;但是,注解块不可以嵌套。

例 1:一个基本的注解块

%{
This is a comment block. It can contain any number of lines
and contain any characters. Its contents are ignored by Net.Data.
%}

例 2: 一个 FUNCTION 块中的注解

%function(DTW_REXX) getAddress(IN  name,   %{ customer name %}
                               IN  phone,  %{ customer phone number %}
                               OUT address %{ customer address %}
                              )
{
     ....
%}

例 3: 一个 HTML 块内的注解

%html(report) {
 
%{ run the query and save results in a table %}
@myQuery(resultTable)
 
%{ build a form to display a page of data %}
<form method="POST" action="report">
 
%{ send the table to a REXX function to send the data output %}
@displayRows(START_ROW_NUM, submit, resultTable, RPT_MAX_ROWS)
 
%{ pass START_ROW_NUM as a hidden variable to the next invocation %}
<input name="START_ROW_NUM" type="hidden" value="$(START_ROW_NUM)">
 
%{ build the next and previous buttons %}
%if (submit == "both" || submit == "next_only")
  <input name="submit" type="submit" value="next">
%endif
%if (submit == "both" || submit == "prev_only")
  <input name="submit" type="submit" value="previous">
%endif
</form>
%}

例 4 一个 DEFINE 块中的注解

%define {
   START_ROW_NUM = "1"        %{ starting row number for output table %}
   RPT_MAX_ROWS = "25"        %{ maximum number of rows in the table  %}
   resultTable = %table       %{ table to hold query results          %}
%}
 

DEFINE 块或语句

目的

DEFINE 段定义宏的声明部分中的变量名,它或可以是一个语句,或是一个块。

用双引号(""),变量定义可以在单行中;使用方括号或百分号({ %}),则可以跨多行。 在定义变量后,您可以在宏的任何地方引用它。

语法

>>-%DEFINE----+-| 定义条目 |---------------------+-------------><
              '-{--+---------------------+---%}--'
                   |  .---------------.  |
                   |  V               |  |
                   '----+-定义条目-+--+--'
                        '-包含语句-'
 
定义条目
 
                      .----------------.
                      V                |
|---+-变量名--=--+-"-----+----------+--+---"---+-+--------------|
    |            |       +-字符串---+          | |
    |            |       +-变量引用-+          | |
    |            |       '-函数调用-'          | |
    |            |    .----------------.       | |
    |            |    V                |       | |
    |            +-{-----+----------+--+---%}--+ |
    |            |       +-字符串---+          | |
    |            |       +-变量引用-+          | |
    |            |       +-函数调用-+          | |
    |            |       '-new_line-'          | |
    |            +-执行语句--------------------+ |
    |            +-表格语句--------------------+ |
    |            +-环境变量语句----------------+ |
    |            +-| 条件变量 |----------------+ |
    |            '-| 缩写的条件变量 |----------' |
    '-列表语句-----------------------------------'
 
条件变量
 
                           .----------------.
                           V                |
|---+---------+--?----+-"-----+----------+--+---"---+----------->
    '-变量名--'       |       +-字符串---+          |
                      |       +-变量引用-+          |
                      |       '-函数调用-'          |
                      |    .----------------.       |
                      |    V                |       |
                      '-{-----+----------+--+---%}--'
                              +-字符串---+
                              +-变量引用-+
                              '-函数调用-'
 
>-----+------------------------------------+--------------------|
      |         .----------------.         |
      |         V                |         |
      '-:--+-"-----+----------+--+---"---+-'
           |       +-字符串---+          |
           |       +-变量引用-+          |
           |       '-函数调用-'          |
           |    .----------------.       |
           |    V                |       |
           '-{-----+----------+--+---%}--'
                   +-字符串---+
                   +-变量引用-+
                   '-函数调用-'
 
缩写的条件变量
 
              .----------------.
              V                |
|---?----+-"-----+----------+--+---"---+------------------------|
         |       +-字符串---+          |
         |       +-变量引用-+          |
         |       '-函数调用-'          |
         |    .----------------.       |
         |    V                |       |
         '-{-----+----------+--+---%}--'
                 +-字符串---+
                 +-变量引用-+
                 '-函数调用-'
 

%DEFINE
一个用于定义变量的关键字。

定义项:

变量名
一个或多个名称,每个附加的名称用一个句点(.)相连。 请参阅变量名中的语法信息。

字符串
字母、数字字符和标点符号的任意序列。 如果此字符串出现在双引号内,则换行字符是不允许的。

变量引用
返回一个先前定义的变量的值,用 $ 和 () 来指定。 例如:如果 VAR='abc',则 $(VAR) 返回值 'abc' 。请 参阅变量引用中的语法信息。

函数调用
调用一个或多个先前已定义过的 FUNCTION 或 MACRO_FUNCTION 块,或带指定参数调用 Net.Data 内部函数。请 参阅函数调用 (@)中的语法和例子。

执行语句
EXEC 语句。一个外部程序的名称,在引用一个变量或调用一个函数时执行这个 程序。请参阅EXEC 块或语句中的语法和例子。

表格语句
TABLE 语句。定义了一组相关数据,其中包含一组相同的记录(或行)、一组 用于描述每行中各字段的列名。 请参阅TABLE 语句中的语法和例子。

环境变量语句
ENVVAR 语句。 引用环境变量。请参阅ENVVAR 语句中的语法和例子。

条件变量
根据另一个变量或字符串的值来设置一个变量的值。

缩写的条件变量
根据另一个变量或字符串的值来设置一个变量的值。 条件变量的一种短格式。

列表语句
LIST 语句。 定义了一组变量,它们用于构建一个定界的值列表。 请 参阅LIST 语句中的语法和例子。

包含语句
INCLUDE 语句。 读取并将文件包含到 Net.Data 宏中。 请 参阅INCLUDE 语句中的语法和例子。

上下文

DEFINE 块或语句必须在 IF 块内,或在 Net.Data 宏声明部分的所有其它块之外。

限制

例 1: 简单变量定义

%DEFINE var1 = "orders"
%DEFINE var2 = "$(var1).html"

在运行期间,变量 引用 $(var2) 的结果为 orders.html

例 2: 字符串内的引号

%DEFINE hi = "say ""hello"""
%DEFINE empty = ""

在显示时,变量 hi 的值 为 say "hello"。 变量 empty 为空。

例 3: 多变量的定义

%DEFINE{  DATABASE = "testdb"
          home = "http://www.software.ibm.com"
          SHOWSQL = "YES"
          PI = "3.14150"
%}

例 4: 一个变量的多行定义

%DEFINE text = {This variable definition
            spans two lines
%}

例 5: 这个条件变量例子演示,如果结果值不包含任何 NULL 值,则变量 var 如何获取在值 ("")内部的结果值。在下面的例子中,$(V) 和 MyFunc 都不可 有 NULL 结果。

%DEFINE var = ? "Hello! $(V)@MyFunc()"
%}

ENVVAR 语句

目的

在 DEFINE 块中把变量定义为环境变量。 当引用 ENVVAR 变量时,Net.Data返回同名的环境变量的当前值。使用这种方法来引用环境变量比使 用 DTW_GETENV 更为高效。关于 DTW_GETENV 的更多信息,请参阅DTW_GETENV

语法

>>-%ENVVAR-----------------------------------------------------><
 

上下文

ENVVAR 语句可以在 DEFINE 块或语句中。

%ENVVAR
在 DEFINE 块中把变量定义为环境变量的关键字。此变量获取宏文件中任何地方的 环境变量的值。

限制

ENVVAR 语句不可以包含其它成分。

例 1: 在此例中,ENVVAR 定义一个变量,当它被引用时 ,返回环境变量 SERVER_SOFTWARE 的当前值,即 Web 服务器的名称。

%DEFINE SERVER_SOFTWARE = %ENVVAR
 
%HTML(REPORT) {
The server is $(SERVER_SOFTWARE).
%}

EXEC 块或语句

目的

当引用变量或调用某函数时,指定要执行的外部程序。

当引用变量或调用函数时,Net.Data 首先查找 Net.Data 初始化文件中 EXEC_PATH 变 量指定的目录,如果找不到,则把可执行文件的名称传送给系统外壳程序。

权限提示:确保此 Web 服务器具有对 EXEC 语句或块引用的任 何文件的访问权。请参阅 Net.Data 管理和程序设计指南的 配置一章中关于指定 Web 服务器对 Net.Data 文件的访问权限这一部分,以获取更多信息。

EXEC 语句和块在两种上下文中使用,根据使用的不同场合,它们可以有不同的语法。在 DEFINE 块中使用 EXEC 语句,在 FUNCTION 块中使用 EXEC 块。

语法

在 DEFINE 块中使用的 EXEC 语句语法:

                 .----------------.
                 V                |
>>-%EXEC------"-----+----------+--+---"------------------------><
                    +-字符串---+
                    +-变量引用-+
                    '-函数调用-'
 

在 FUNCTION 块中使用的 EXEC 块语法:

                 .---------------.
                 V               |
>>-%EXEC------{----+-字符串---+--+---%}------------------------><
                   +-变量引用-+
                   '-函数调用-'
 

%EXEC
此关键字指定了在引用一个变量或调用一个函数时要执行的外部程序的 名称。当 Net.Data 遇到在 EXEC 语句中定义的变量引用时,它就处理 EXEC 语句为此 变量而声明的操作。

字符串
字母、数字字符和标点符号的任意序列。 如果此字符串出现在双引号内,则换行字符是不允许的。

变量引用
返回一个先前定义的变量的值,用 $ 和 () 来指定。 例如:如果 VAR='abc',则 $(VAR) 返回值 'abc' 。请 参阅变量引用中的语法信息。

函数调用
调用一个或多个先前已定义过的 FUNCTION 或 MACRO_FUNCTION 块,或带指定参数调用 Net.Data 内部函数。请 参阅函数调用 (@)中的语法和例子。

上下文

可以在这些上下文中找到 EXEC 块或语句:

限制

EXEC 块或语句可以包含这些元素:

例 1: 由一个变量引用的可执行文件

%DEFINE mycall = %EXEC "MYEXEC.EXE $(empno)"
 
%HTML (report){
<P>Here is the report you requested:
<HR>$(mycall)
%}

这个例子在每个对此变量 (mycall) 的引用上执行 MYEXEC.EXE

例 2: 由一个函数引用的可执行文件

%FUNCTION(DTW_REXX) my_rexx_pgm(INOUT a, b, IN c, INOUT d){
 %EXEC{ mypgm.cmd this is a test %}
%}

这个例子在调用函数 my_rexx_pgm 时即执行 mypgm.cmd

FUNCTION 块

目的

定义 Net.Data 从宏文件中调用的一个子例行程序。 FUNCTION 块中的可执行语句可以是直接由语言环境解释的内联语句,或可以是对一个外部程序的 调用。

如果在 FUNCTION 块内使用 EXEC 块,则它必须是 FUNCTION 块中唯一的可执行语句。 在把此可执行语句传递给语言环境之前,Net.Data 把 EXEC 块中此程序的文件名 追加到由初始化文件中的 EXEC_PATH 配置语句所确定的路径名。结果字符串被传递 到语言环境去执行。

语言环境用于处理 EXEC 块的方法依赖于特定的语言环境。只有 REXX、 System 和 Perl Net.Data 提供的语言环境支持 EXEC 块。

语法

>>-%FUNCTION--(--语言环境--)--函数名--| 参数传递说明 |---------->
 
      .-;----------------------------------.
>-----+-| 返回说明 |--{--| 函数体 |----%}--+-------------------><
 
参数传递说明
 
|---(--+-----------------------------+---)----------------------|
       |  .-,---------------------.  |
       |  |      (1)              |  |
       |  V .-IN-------.          |  |
       '----+----------+---名称---+--'
            +-OUT------+
            '-INOUT----'
 
返回说明
 
|---+----------------------+------------------------------------|
    '-RETURNS--(--名称--)--'
 
函数体
 
|---+-------------------+--------------------------------------->
    |  .--------------. |
    |  V              | |
    +----内联语句块---+-+
    '-执行块------------'
 
>-----+----------------------------------+----------------------|
      |  .---------------.               |
      |  V         (2)   |               |
      +----报表块--------+---+---------+-+
      |                      '-消息块--' |
      '-消息块--.--------------------.   |
                V                    |   |
                ---+--------------+--+---'
                   |        (2)   |
                   '-报表块-------'
 

记录:

  1. 如果参数列表的开始没有指定参数类型,则应用缺省的参数类型 IN。 没有参数类型的参数使用参数列表中最近指定的类型,如果还未指定过,则使用 IN 类型。例如,参 数列表(parm1、INOUT parm2parm3、OUT parm4parm5),其中参数 parm1parm3parm5 没有参数类型。参数 parm1 的类型是 IN,因为还没有指定过初始参数类型。 参数 parm3 的类型是 INOUT,因为它是最近指定的参数类型。类似地,参数 parm5 的类型是 OUT,因为它是参数列表中最近指定的类型。

  2. 重复的报表块仅对数据库语言环境,处理返回多结果集 的存储过程时有效。

%FUNCTION
指定 Net.Data 从宏文件中调用的一个子例行程序的关键字。

lang_env
处理函数体的语言环境。 参阅 Net.Data 语言环境参考获取更多的信息。

function_name
定义函数的名称可以是一个字母或数字字符串,它以字母字符或下划线开头,可以包含字母、数字 或下划线字符的任意组合。

名称
一个字母或数字字符串,以字母字符或下划线开头, 可以包含字母、数字或下划线字符的任意组合。

parm passing spec:

IN
指定 Net.Data 把输入数据传送至语言环境。 IN 是缺省。

OUT
指定语言环境把输出数据返回至 Net.Data。

INOUT
指定 Net.Data 把输入数据传送至语言环境,语言环境再把输出数据返回给 Net.Data。

返回说明:

RETURNS
声明在函数完成后,包含语言环境指定的函数值的变量。

函数体:

内联语句块
来自函数定义中指定的语言环境(例如:REXX、 SQL 或 Perl)、语法上有效的语句。 参阅 Net.Data 语言环境参考中对使用的语言环境的说明。参见程序设计语言中对语 法和用法的程序设计参考。代表内联语句块的字符串可以包含 Net.Data 变量引用和函数调用,这可 以在执行内联语句块之前先进行求值。限制:不带任何 Net.Data 变量引用 或函数调用的最长的连续内联语句块限制在以下长度:

  • 对于 OS/2 和 NT:64KB

  • 对于 AIX:256KB

  • 对于 OS/390:256KB

  • 对于 OS/400:256KB

执行块
EXEC 块。一个外部程序的名称,在引用一个变量或调用一个函数时执行这个 程序。 请参阅EXEC 块或语句中的语法和例子。

报表块
REPORT 块。用于格式化函数调用的输出结果的一系列命令。 您还可以在报表中 使用标题和脚注。 请参阅REPORT 块中的语法和例子。

消息块
MESSAGE 块。 当从一个函数调用返回时使用的一组返回码、相关消息 和 Net.Data 采用的操作。 请参阅MESSAGE 块中的语法和例子。

上下文

可以在这些上下文中找到 FUNCTION 块:

限制

FUNCTION 块可以包含这些成份:

只有 REXX、System 和 Perl Net.Data 提供的语言环境支持 EXEC 语句。

以下例子是一般例子,没有覆盖所有的语言环境。 参阅 Net.Data 语言环境参考获取更多使用具有特定语言环境的 FUNCTION 块的信息。

例 1: 一个 REXX 子串函数

%DEFINE lstring = "longstring"
%FUNCTION(DTW_REXX) substring(IN x, y, z) RETURNS(s) {
  s = substr("$(x)", $(y), $(z));
%}
%DEFINE a = {@substring(lstring, "1", "4")%} %{ assigns "long" to a %}

在对 a 求值时,发现 @substring 函数调用,并执行子串 FUNCTION 块。变量在 FUNCTION 块中的可执行语句中被替换,然后文本字符串 s = substr("longstring", 1, 4) 传送给 REXX 解释器执行。 因为指定 RETURNS 子句,在 a 的求值过程中 @substring 函数调用的值用 "long" 进行替换,其值为 s

例 2: 调用一个外部的 REXX 程序

EXEC 语句通知 REXX 语言环境,进而告诉 REXX 解释程序,让它执行 外部的 REXX 程序 mypgm.cmd。 因为 REXX 语言环境可以直接与 REXX 程序 共享 Net.Data 变量,所以在执行 mypgm.cmd 之前,将 REXX 变量 abc 的值 赋成 Net.Data 变量 wxy 的值。 mypgm.cmd 可以直 接使用 REXX 语句中的 abc 变量。当程序终止时,REXX 变量 abd 在 REXX 程序中接受检索,其值赋予 Net.Data 变量 wxz。因为 my_rexx_pgm FUNCTION 块的定义中未使用 RETURNS 子句,所以如果返回代码是 0,则 @my_rexx_pgm 函数调用的值是空字符串 "";如果返回代码非 0,则是此 REXX 程序返回代码的值。

例 3: 一个 SQL 查询和报表

%FUNCTION(DTW_SQL) query_1(IN x, IN y) {
   SELECT customer.num, order.num, part.num, status
   FROM customer, order, shippingpart
   WHERE customer.num = '$(x)'
      AND customer.ordernumber = order.num
      AND order.num = '$(y)'
      AND order.partnumber = part.num
%REPORT{
     <P>Here is the status of your order:
     <P>$(NLIST)
<UL>
%ROW{
       <LI>$(V1)  $(V2)  $(V3)  $(V4)
     %}
</UL>
        %}
%}
%DEFINE customer_name="IBM"
%DEFINE customer_order="12345"
%HTML(REPORT) {
  @query_1(customer_name, customer_order)
%}

@query_1 函数调用用 SELECT 语句中的值把 IBM 替换为 $(x)12345 替换为 $(y)。因为 SQL 函数 query_1 的定义没有指明输出表格变量, 因此将使用缺省的表格(请参阅 TABLE 变量块中的细节)。在 REPORT 块中 引用的 NLIST 和 Vi 变量是由缺省的表格定义所定义的。 由 REPORT 块产生的报表放置在输出的 HTML 中,在其中调用 query_1 函数。

例 4: 执行 Perl 脚本的系统调用

System 语言环境解释 FUNCTION 块中的可执行语句的方法是:通过 C 语言 中的 system() 函数调用将它们传递给操作系统。 这种方法不允许将 Net.Data 变量 直接传递到可执行语句,也不允许可执行程序直接检索这些变量,就象在 REXX 语言 环境中一样,因此,System 语言环境按以下方式传递和检索变量:

遇到 @today 函数调用时,Net.Data 在可执行语句上执行变量替换。对于此例, 可执行语句中没有 Net.Data 变量,因此没有执行变量替换。 可执行语句和参数被传递给 System 语言环境,它将创建一个命名管道,并将环境 变量 DTWPIPE 设置为管道的名称。

然后通过 C 语言的 system() 函数调用来调用外部程序。 外部程序以只读方式打开管 道,并象对一个标准流式文件一样,把输出参数的值写入管道。外部程序通过写至 STDOUT,生成 HTML 输出。在本例子中, 系统日期程序的输出被赋给结果变量,即由 FUNCTION 块的 RETURNS 子句 所标识的变量。 结果变量的值替换 HTML 块中的 @today() 函数调用。

例 5: Perl 语言环境

%FUNCTION(DTW_PERL) today() RETURNS(result) {
  $date = `date`;
  chop $date;
  open(DTW, "> $ENV{DTWPIPE}") || die "Could not open: $!";
  print DTW "result = \"$date\"\n";
%}
%HTML(INPUT) {
  @today()
%}

把这个例子和例 4 相比较,看如何使用 EXEC 块。例 4 中,System (系统)语言环 境并不了解如何解释 Perl 程序,但是此语言环境知道如何调用外部程序。EXEC 块告诉它调用称为

perl 的一个外部程序。实际 的 Perl 语言语句是由外部 Perl 程序解释的。 例 5 没有 EXEC块,因为 Perl 语言环境能够直接解 释 Perl 语言语句。

函数调用 (@)

目的

调用先前已定义的 FUNCTION 块、 MACRO_FUNCTION 块或以指定的参数调用内部函数。 如果函数不是内部函数,则必须在指定函数调用之前,先在 Net.Data 宏中定义它。

语法

>>-@function_name---(----+-------------------------+--)--------><
                         |  .-,------------------. |
                         |  V                    | |
                         '----+-变量名--------+--+-'
                              +-"--字符串--"--+
                              +-变量引用------+
                              '-函数调用------'
 

@function_name
任何现有函数的名称。一个字母或数字字符串,以字母字符或下划线开头, 可以包含字母、数字或下划线字符的任意组合。

变量名
一个或多个名称,每个附加的名称用一个句点(.)相连。 请参阅变量名中的语法信息。

字符串
字母、数字字符和标点符号的任意序列,换行字符除外。

变量引用
返回一个先前定义的变量的值,用 $ 和 () 来指定。 例如:如果 VAR='abc',则 $(VAR) 返回值 'abc' 。请 参阅变量引用中的语法信息。

函数调用
调用一个或多个先前已定义过的 FUNCTION 或 MACRO_FUNCTION 块,或带指定参数调用 Net.Data 内部函数。

上下文

可以在这些上下文中找到函数调用:

限制

例 1: 对 SQL 函数 formQuery 的一个调用

%FUNCTION(DTW_SQL) formQuery(){
SELECT $(queryVal) from $(tableName)
%}
 
%HTML (input){
<P>Which columns of $(tableName) do you want to see?
<FORM METHOD="POST" ACTION="report">
<INPUT NAME="queryVal" TYPE="CHECKBOX" VALUE="NAME">Name
<INPUT NAME="queryVal" TYPE="CHECKBOX" VALUE="MAIL">E-mail
<INPUT NAME="queryVal" TYPE="CHECKBOX" VALUE="FAX">FAX
<INPUT TYPE="SUBMIT" VALUE="Submit request">
%}
 
%HTML (report){
<P>Here are the columns you selected:
<HR>@formQuery()
%}

例 2: 对具有输入和输出参数的 REXX 函数的调用

%FUNCTION(DTW_REXX) my_rexx_pgm(INOUT a, b, IN c, OUT d) {
 %EXEC{ mypgm.cmd this is a test %}
%}
%HTML(INPUT) {
 <P> Original variable values: $(w) $(x) $(z)
 <P> @my_rexx_pgm(w, x, y, z)
 <P> Modified variable values: $(w) $(x) $(z)
%}

例 3: 对使用变量引用和函数调用的 REXX 函数的一个 调用,但没有参数

%FUNCTION(DTW_REXX) my_rexx_pgm(IN a, b, c, d, OUT e) {
  ...
%}
%HTML(INPUT) {
 <p>  @my_rexx_pgm($(myA), @getB(), @retrieveC(), $(myD), myE)
%} 

HTML 块

目的

包含任何将由客户的 Web 浏览器或任何可以理解 HTML 的工具进行处理的 HTML 标记或文本。 HTML 块还包含大部分 Net.Data 宏语言语句,这些语句在运行时求值和执行。Net.Data 查找 Net.Data 宏语句并执行之。 Net.Data 假定所有其它的文本都是 HTML 的,并把它发送给 Web 服务器。

语法

                             .------------------------.
                             V                        |
>>-%HTML----(--名称--)----{-----+------------------+--+---%}---><
                                +-exec_sql 语句----+
                                +-变量引用---------+
                                +-条件块-----------+
                                +-函数调用---------+
                                +-HTML 语句--------+
                                +-包含语句---------+
                                +-include_url 语句-+
                                '-循环块-----------'
 

%HTML
此关键字用于指定包含了要在客户浏览器中显示的 HTML 标记和文本的块。

名称
一个字母或数字字符串,以字母字符或下划线开头, 可以包含字母、数字或下划线字符的任意组合。

exec_sql 语句
DB2WWW 发行版 1 语言成份,它保证了兼容性。 请参阅附录 A. DB2 WWW Connection 或 DB2 World Wide Web Release 1 文档。

变量引用
返回一个先前定义的变量的值,用 $ 和 () 来指定。 例如:如果 VAR='abc',则 $(VAR) 返回值 'abc' 。请 参阅变量引用中的语法信息。

条件块
IF 块。可以执行有条件的字符串 处理。 如果条件列表中的字符串值是代表整数的字符串,并且没有前导或尾随空格,则作为数值型 进行比较。它们可以有一个单个的前导加号(+)或者减号(-)。参阅IF 块中的语法和例子。

函数调用
调用一个或多个先前已定义过的 FUNCTION 或 MACRO_FUNCTION 块,或带指定参数调用 Net.Data 内部函数。 请 参阅函数调用 (@)中的语法和例子。

HTML 语句
包含任何要在客户浏览器中显示的字母或数字字符、以及 HTML 标记。

包含语句
INCLUDE 语句。 读取并将文件包含到 Net.Data 宏中。 请 参阅INCLUDE 语句中的语法和例子。

include_url 语句
INCLUDE_URL 语句。读取并将其它文件包含到指定此语句的 Net.Data Web 宏中。 指定的 文件可以存在于本地或者远程服务器上。 请 参阅INCLUDE_URL 语句中的语法和例子。

循环块
WHILE 块。执行具有条件字符串处理的循序。 参阅WHILE 块中的语法和例子。

上下文

可以在这些上下文中找到 HTML 块:

限制

HTML 块可以包含这些成份:

例 1: 带页眉和页脚的包含文件的 HTML 块

%HTML(example1){
%INCLUDE"header.html"
<P>You can put <EM>any</EM> HTML in an HTML block.
An SQL function call is made like this:
@xmp1()
%INCLUDE"footer.html"
%}

IF 块

目的

可以执行有条件的字符串 处理。 IF 块提供测试一个或多个条件的能力,然后基于条件测试的结果执行一个语句块。您可以在 一个 Net.Data 宏的声明部分、HTML 块、MACRO_FUNCTION 块、REPORT 块、 WHILE 块、 ROW 块中使用 IF 块,也可嵌套在另一个 IF 块内部。

如果条件列表中的字符串值是代表整数的字符串,并且没有前导或尾随空格,则作为数值型 进行比较。 它们可以有一个单个的前导加号(+)或者减号(-)。

限制: Net.Data 不支持非整型数的数值比较。例如浮点数。

嵌套的 IF 块:IF 块的语法规则是由块在宏文件中的位置确定 的。如果 IF 块嵌套在一个 IF 块内,而后者在声明部分中任何其它块的外部,则它可以使用外部块 可以使用的任何元素。如果 IF 块嵌套在另一个嵌套在某个 IF 块的块中,则它遵循它所处的那个模 块的语法规则。

在下面的例子中,嵌套的 IF 块必须遵循在它处于一个 HTML 块中时使用的规则。

%IF b块
...
  %HTML 块
...
     %IF 块

参阅本章节后面列出的限制。

语法

>>-%IF--| condition list |-------------------------------------->
 
>-----| statement_block |--| else_if spec |--%ENDIF------------><
 
condition list
 
|---(--+-(--条件列表--)----------+---)--------------------------|
       +-条件列表--&&--条件列表--+
       +-条件列表--||--条件列表--+
       +-!--条件列表-------------+
       +-| 条件 |----------------+
       '-| 条件项 |--------------'
 
statement_block
 
    .------------------------------.
    V                              |
|------+------------------------+--+----------------------------|
       |        (1)             |
       +-定义块-----------------+
       |          (1)           |
       +-定义语句---------------+
       |               (2)      |
       +-exec_sql 语句----------+
       |        (1)             |
       +-函数块-----------------+
       +-函数调用---------------+
       |         (1)            |
       +-HTML 块----------------+
       |           (2)          |
       +-HTML 语句--------------+
       +-条件块-----------------+
       +-包含语句---------------+
       +-include_url 语句-------+
       |                   (1)  |
       +-macro_function 块------+
       |        (1)             |
       +-消息块-----------------+
       |        (2)             |
       +-字符串-----------------+
       |          (2)           |
       +-变量引用---------------+
       |        (2)             |
       '-循环块-----------------'
 
条件
 
|---条件项--+-<--+---条件项-------------------------------------|
            +->--+
            +-<=-+
            +->=-+
            +-!=-+
            '-==-'
 
条件项
 
|---+-变量引用------+-------------------------------------------|
    +-"--字符串--"--+
    +-变量名--------+
    '-函数调用------'
 
else_if spec
 
|---+---------------------------------------------------------------+->
    |     .----------------------------------------------------.    |
    |     V                                                    |    |
    '--+----%ELIF--(--condition_list--)--| statement_block |---+-+--'
       '-%ELSE--| statement_block |------------------------------'
 
>---------------------------------------------------------------|
 

记录:

  1. 如果 IF 块位于宏的声明部分中任何其它块的外面,则此语言结构有效。

  2. 如果 IF 块位于一个 HTML 块、MACRO_FUNCTION 块、REPORT 块或 WHILE 块中,则此语言结构有效。

%IF
用于指定有条件的字符串处理的关键字。

条件列表
比较条件和条件项的值。条件列表可以使用布尔运算符进行连接。一个条件列表可以嵌套在另一个条件列表中。

statement_block
下列有效的 Net.Data 宏结构。请参阅图例注解和限制确定上下文,使Plea其中的宏结构有效 。

定义语句
DEFINE 块或语句。用于定义变量和设置配置变量。 变量名必须以一个字母或 下划线(_)开头,可以包含任何字母数字字符或下划线。 请 参阅DEFINE 块或语句中的语法和例子。

exec_sql 语句
DB2WWW 发行版 1 语言成份,它保证了兼容性。 请参阅附录 A. DB2 WWW Connection 或 DB2 World Wide Web Release 1 文档。

函数块
指定可以从 Net.Data 宏中进行调用的子程序的关键字。 FUNCTION 块中的可执行语句可以包 含直接由语言环境解释的语言语句,或可以指示对一个外部程序的调用。请 参阅FUNCTION 块中的语法和例子。

函数调用
调用一个或多个先前已定义过的 FUNCTION 或 MACRO_FUNCTION 块,或带指定参数调用 Net.Data 内部函数。 请 参阅函数调用 (@)中的语法和例子。

HTML 块
包含任何要在客户浏览器中显示的字母或数字字符、以及 HTML 标记。

HTML 语句
包含任何要在客户浏览器中显示的字母或数字字符、以及 HTML 标记。

条件块
IF 块。可以执行有条件的字符串 处理。 如果条件列表中的字符串值是代表整数的字符串,并且没有前导或尾随空格,则作为数值型 进行比较。 它们可以有一个单个的前导加号(+)或者减号(-)。

包含语句
INCLUDE 语句。 读取并将文件包含到 Net.Data 宏中。 请 参阅INCLUDE 语句中的语法和例子。

include_url 语句
INCLUDE_URL 语句。读取并将其它文件包含到指定此语句的 Net.Data Web 宏中。 指定的 文件可以存在于本地或者远程服务器上。 请 参阅INCLUDE_URL 语句中的语法和例子。

macro_function 块
指定可以从 Net.Data 宏中进行调用的子程序的关键字。 MACRO_FUNCTION 块中的可执行语 句可以包含 Net.Data 宏语言源语句。参阅MACRO_FUNCTION 块中的语法和例子。

消息块
MESSAGE 块。 当从一个函数调用返回时使用的一组返回码、相关消息 和 Net.Data 采用的操作。 请参阅MESSAGE 块中的语法和例子。

字符串
字母、数字字符和标点符号的任意序列。 如果此字符串在条件列表的条件项中,则它可以包含任何字符,新建行字符除外。如果此字符串在代码 的可执行块中,则它可以包含任何字符,包括新建行字符。

变量引用
返回一个先前定义的变量的值,用 $ 和 () 来指定。 例如:如果 VAR='abc',则 $(VAR) 返回值 'abc' 。请 参阅变量引用中的语法信息。

循环块
WHILE 块。执行具有条件字符串处理的循序。 参阅WHILE 块中的语法和例子。

条件
两个条件项之间使用比较运算符的一个比较表达式。 如果下面两个条件都为真,则 IF 条件看成是一个数值比较:

如果两者有一个不为真,则执行一个一般的字符串比较。

条件项
变量名、字符串、变量引用或函数调用。

%ELIF
启动可选处理路径的关键字,可以包含条件列表和大多数 Net.Data 宏语句。

%ENDIF
一个用于结束 %IF 块的关键字。

%ELSE
用于在所有其它的条件列表都不满足时执行相关语句的一个关键字。

上下文

可以在这些上下文中找到 IF 块:

限制

当 IF 块位于 Net.Data 宏声明部分中的任何其它块之外时,它可以包含这些成份:

如果 IF 块位于 Net.Data 宏的 HTML 块、MACRO_FUNCTION 块、REPORT 块、ROW 块或 WHILE 块中,则它可以包含这些成份:

例 1: 在一个 Net.Data 宏的声明部分中的 IF 块

%DEFINE a = "1"
%DEFINE b = "2"
...
%IF ($(DTW_HTML_TABLE) == "YES")
%define OUT_FORMAT = "HTML"
%ELSE
%define OUT_FORMAT = "CHARACTER"
%ENDIF
 
%HTML(REPORT){
 ...
%}
 

例 2: 在一个 HTML 块内部的 IF 块

%HTML(REPORT){
@myFunctionCall()
%IF ($RETURN_CODE) == $(failure_rc))
   <P> The function call failed with failure code $(RETURN_CODE).
%ELIF ($(RETURN_CODE) == $(warning_rc))
   <P> The function call succeeded with warning code $(RETURN_CODE).
%ELIF ($(RETURN_CODE) == $(success_rc))
   <P>The function call was successful.
%ELSE
   P>The function call returned with unknown return code $(RETURN_CODE).
%ENDIF
%}
 

例 3:一个数值型比较

%IF (ROW_NUM < "100")
    <p>The table is not full yet...
%ELIF (ROW_NUM == "100")
    <p>The table is now full...
%ELSE
    <p>The table has overflowed...
%ENDIF
 

因为隐式表格变量 ROW_NUM 总是返回一个整数值,并且正在比较的值也是一个整数,所以执行数 值比较。

例 4: 嵌套的 IF 块

%IF (MONTH == "January")
  %IF (DATE = "1")
    HAPPY NEW YEAR!
%ELSE
    Ho hum, just another day.
%ENDIF
%ENDIF
 

INCLUDE 语句

目的

读取并将一个文件结合到其中指定这条语句的 Net.Data 宏中。

Net.Data 将搜索在初始化文件的 INCLUDE_PATH 语句中所指定的目录,以查找 此包含文件。

可以按照与大部分高级语言所使用的相同方式使用包含文件。 它们可以用于插入公用标题和脚注、定义公用的变量集合,或将 FUNCTION 模块定义 的公用子程序库包含到 Net.Data 宏中。

Net.Data 在处理宏时只执行 INCLUDE 语句一次,并把包含进来的文件的内容插入宏 文件中 INCLUDE 语句的位置。在包含文件的名称中的任何变量引用都在第一次执行 INCLUDE 语句、 而不是在要执行包含文件的内容时进行分析的。

当 INCLUDE 语句在一个 ROW 或 WHILE 块中时,Net.Data 不重复执行 INCLUDE 语句。Net.Data 在它第一次执行 ROW 或 WHILE 块时执行 INCLUDE 语句,并把包含文件 的内容结合到这个块中,然后用包含文件的内容重复执行 ROW 或 WHILE 块。

权限提示:确保此 Web 服务器具有对 INCLUDE 语句引用的任 何文件的访问权。请参阅 Net.Data 管理和程序设计指南的 配置一章中关于指定 Web 服务器对 Net.Data 文件的访问权限这一部分,以获取更多信息。

提示:如果想要包含本地 Web 服务器中的某个 HTML 文件,则 如例 3 中所示的 INCLUDE_URL 使用 INCLUDE_URL 结构。通过使用所演示的语法,您不必更新 Net.Data 初始化文件中的 INCLUDE_PATH 来指定其实 Web 服务器已经知道的目录。

语法

                  .---------------.
                  V               |
>>-%INCLUDE----"----+-字符串---+--+---"------------------------><
                    '-变量引用-'
 

%INCLUDE
指示要被读取并结合到 Net.Data 宏中的某个文件的关键字。

名称
一个字母或数字字符串,以字母字符或下划线开头, 可以包含字母、数字或下划线字符的任意组合。

字符串
字母、数字字符和标点符号的任意序列,换行字符除外。

变量引用
返回一个先前定义的变量的值,用 $ 和 () 来指定。 例如:如果 VAR='abc',则 $(VAR) 返回值 'abc' 。请 参阅变量引用中的语法信息。

上下文

可以在这些上下文中找到 INCLUDE 语句:

限制

INCLUDE 语句可以包含这些成份:

例 1: 在一个 HTML 块中的 INCLUDE 语句

%HTML(start){
%INCLUDE "header.hti"
...
%}

例 2: 在一个 REPORT 块中的 INCLUDE 语句

       %REPORT {
  %INCLUDE "report_header.txt"
  %ROW {
    %INCLUDE "row_include.txt"
  %}
  %INCLUDE "report_footer.txt"
%}

例 3: 在一个 INCLUDE 语句中的变量引用

%define library = "/qsys.lib/mylib.lib/"
%define filename = "macros.file/incfile.mbr"
 
%include "$(library)$(filename)"

INCLUDE_URL 语句

目的

读取并将另一个文件结合到其中指定这条语句的 Net.Data 生成的输出中。指定的 文件可以存在于本地或者远程服务器上。

使用 INCLUDE_URL 语句,可以从另一个宏中调用一个宏,而不用要求应用程序用 户选择“递交”按钮。

Net.Data 在处理宏时只执行 INCLUDE_URL 语句一次,并把包含进来的文件的内容插入宏 文件中 INCLUDE_URL 语句的位置。在包含文件的名称中的任何变量引用都在第一次执行 INCLUDE_URL 语句、而不是在要执行包含文件的内容时进行分析的。

当 INCLUDE_URL 语句在一个 ROW 或 WHILE 块中时,Net.Data 不重复执行 INCLUDE_URL 语句。 Net.Data 在它第一次执行 ROW 或 WHILE 块时执行 INCLUDE_URL 语句,并把包含 文件的内容结合到这个块中,然后用包含文件的内容重复执行 ROW 或 WHILE 块。

语法

                       .---------------.
                       V               |
>>-%INCLUDE_URL---"------+-字符串---+--+--"--------------------><
                         '-变量引用-'
 

%INCLUDE_URL
指示要被读取并结合到本地或远程服务器上的 Net.Data 宏中的某个文件的关键字。

字符串
字母、数字字符和标点符号的任意序列,换行字符除外。

变量引用
返回一个先前定义的变量的值,用 $ 和 () 来指定。 例如:如果 VAR='abc',则 $(VAR) 返回值 'abc' 。请 参阅变量引用中的语法信息。

上下文

可以在这些上下文中找到 INCLUDE_URL 语句:

限制

INCLUDE_URL 语句可以包含这些成份:

INCLUDE_URL 文件具有以下文件尺寸限制:

INCLUDE_URL 在 OS/400 环境中是受支持的。

例 1: 包含一个在另一台服务器上的 HTML 文件

 %include_url "http://www.ibm.com/path/myfile.html"

例 2: 通过调用一个远程服务器的名称,包含一个 在此远程服务器上的 HTML 文件

 %include_url "myserver/path/myfile.html"

其中 myserver 是服务器名称。

例 3: 包含一个在本地 Web 服务器上的 HTML 文件

 %include_url "/path/myfile.html"

提示:使用这种方法,您不必更新 Net.Data 配置文件中的 INCLUDE_URL 路径来指定 Web 服务器其实已经知道的目录。如果此字符串 是以斜杠开头的,则 Net.Data 假定此字符串是一个服务器名称,并以 相应的名称试图在服务器上检索此文件。

例 4: 包含在一台远程服务器上的其它 Net.Data 宏

%REPORT{
<P>Current hot pick as of @DTW_rTIME():
%include_url "http://www.ibm.com/cgi-bin/db2www/hotpic.mac/report?custno=$(custno)"

在此例子中,调用宏文件 hotpic.mac,并 把 custno 作为变量传递。如果此字符串是以斜杠开头的,则 Net.Data 在本 地 Web 服务器上检索此 INCLUDE 文件。

LIST 语句

目的

构建一张定界的值的列表。在构建带多个条件项(例如 在某些 WHERE 或 HAVING 子句中可找到的项目)的 SQL 查询时,可以使用 LIST 语句。

语法

             .----------------.
             V                |
>>-%LIST--"-----+----------+--+---"----变量名------------------><
                +-字符串---+
                +-变量引用-+
                '-函数调用-'
 

%LIST
此关键字指定了要用于构建一个带定界符的值列表的变量。

字符串
字母、数字字符和标点符号的任意序列,换行字符除外。

变量引用
返回一个先前定义的变量的值,用 $ 和 () 来指定。 例如:如果 VAR='abc',则 $(VAR) 返回值 'abc' 。请 参阅变量引用中的语法信息。

函数调用
调用一个或多个先前已定义过的 FUNCTION 或 MACRO_FUNCTION 块,或带指定参数调用 Net.Data 内部函数。 请 参阅函数调用 (@)中的语法和例子。

变量名
一个或多个名称,每个附加的名称用一个句点(.)相连。 请参阅变量名中的语法信息。

上下文

可以在这些上下文中找到 LIST 语句:

限制

LIST 语句可以包含这些成份:

例 1: 一张变量列表

 %DEFINE{
DATABASE="custcity"
%LIST " OR " conditions
cond1="cond1='Sao Paolo'"
cond2="cond2='Seattle'"
cond3="cond3='Shanghai'"
whereClause=conditions ? "WHERE $(conditions)" : ""
%}

MACRO_FUNCTION 块

目的

定义一个可以从 Net.Data 宏中进行调用的子程序。MACRO_FUNCTION 块中的可执行语 句必须是 Net.Data 宏语言源语句。

语法

>>-%MACRO_FUNCTION--函数名--| 参数传递说明 |----{--| 函数体 |--->
 
>-----+--------------+--%}-------------------------------------><
      |        (3)   |
      '-报表块-------'
 
参数传递说明
 
|---(--+-----------------------------+---)----------------------|
       |  .-,---------------------.  |
       |  |      (1)              |  |
       |  V .-IN-------.          |  |
       '----+----------+---名称---+--'
            +-OUT------+
            '-INOUT----'
 
函数体
 
    .-----------------------------.
    V                             |
|------+-----------------------+--+-----------------------------|
       +-exec_sql 语句---------+
       +-变量引用--------------+
       +-条件块----------------+
       +-函数调用--------------+
       +-HTML 语句-------------+
       +-包含语句--------------+
       |                  (2)  |
       +-include_url 语句------+
       '-循环块----------------'
 

记录:

  1. 如果参数列表的开始没有指定参数类型,则应用缺省的参数类型 IN。 没有参数类型的参数使用参数列表中最近指定的类型,如果还未指定过,则使用 IN 类型。 例如,参 数列表(parm1、INOUT parm2parm3、OUT parm4parm5),其中参数 parm1parm3parm5 没有参数类型。 参数 parm1 的类型是 IN,因为还没有指定过初始参数类型。 参数 parm3 的类型是 INOUT,因为它是最近指定的参数类型。 类似地,参数 parm5 的类型是 OUT,因为它是参数列表中最近指定的类型。

  2. OS/400 不支持 INCLUDE_URL 语句。

  3. 只有 OS/400 的 MACRO_FUNCTION 块中才支持 REPORT 块。

%MACRO_FUNCTION
指定可以从 Net.Data 宏中进行调用的子程序的关键字。MACRO_FUNCTION 块中的可执行语 句必须包含 Net.Data 直接解释的语言语句。

function_name
要定义的函数名称。一个字母或数字字符串,以字母字符或下划线开头, 可以包含字母、数字或下划线字符的任意组合。

参数传递说明:

IN
指定 Net.Data 把输入数据传送至语言环境。 IN 是缺省。

OUT
指定语言环境把输出数据返回至 Net.Data。

INOUT
指定 Net.Data 把输入数据传送至语言环境,语言环境再把输出数据返回给 Net.Data。

名称
一个字母或数字字符串,以字母字符或下划线开头, 可以包含字母、数字或下划线字符的任意组合。

函数体:

exec_sql
DB2WWW 发行版 1 语言成份,它保证了兼容性。 请参阅附录 A. DB2 WWW Connection 或 DB2 World Wide Web Release 1 文档。

变量引用
返回一个先前定义的变量的值,用 $ 和 () 来指定。 例如:如果 VAR='abc',则 $(VAR) 返回值 'abc' 。请 参阅变量引用中的语法信息。

条件块
IF 块。可以执行有条件的字符串 处理。 如果条件列表中的字符串值是代表整数的字符串,并且没有前导或尾随空格,则作为数值型 进行比较。它们可以有一个前导加号(+)或者减号(-)。

函数调用
调用一个或多个先前已定义过的 FUNCTION 或 MACRO_FUNCTION 块,或带指定参数调用 Net.Data 内部函数。 请 参阅函数调用 (@)中的语法和例子。

HTML 语句
包含任何要在客户浏览器中显示的字母或数字字符、以及 HTML 标记。

包含语句
INCLUDE 语句。 读取并将文件包含到 Net.Data 宏中。 请 参阅INCLUDE 语句中的语法和例子。

include_url 语句
INCLUDE_URL 语句。读取并将另一个文件结合到其中指定这条语句的 Net.Data 宏中。指定的 文件可以存在于本地或者远程服务器上。 请 参阅INCLUDE_URL 语句中的语法和例子。

循环块
WHILE 块。执行具有条件字符串处理的循序。 参阅WHILE 块中的语法和例子。

报表块
REPORT 块。用于格式化函数调用的输出结果的一系列命令。 您还可以在报表中 使用标题和脚注。 请参阅REPORT 块中的语法和例子。

上下文

可以在这些上下文中找到 MACRO_FUNCTION 块:

限制

此结构在 OS/390 操作系统中不可用。

MACRO_FUNCTION 块可以包含这些成份:

例 1:指定消息处理的一个宏函数

%MACRO_FUNCTION setMessage(IN rc, OUT message) {
%IF (rc == "0")
  @dtw_assign(message, "Function call was successful.")
%ELIF (rc == "-1")
  @dtw_assign(message, "Function failed, out of memory.")
%ELIF (rc == "-2")
  @dtw_assign(message, "Function failed, invalid parameter.")
%ENDIF
%}

例 2:指定标题信息的一个宏函数

%MACRO_FUNCTION setup(IN browserType) {
%{ call this function at the top of each HTML block in the macro %}
%INCLUDE "header_info.html"
@dtw_rdate()
%IF (browserType == "IBM")
  @setupIBM()
%ELIF (browserType == "MS")
  @setupMS()
%ELIF (browserType == "NS")
  @setupNS()
%ELSE
  @setupDefault()
%ENDIF
%}
 

MESSAGE 块

目的

指定了要显示的消息,并根据来自函数的返回码要执行的操作。

在 MESSAGE 块中定义返回码的集合,及其相应的消息和操作。当完成一个 函数调用时,Net.Data 把其返回码和 MESSAGE 块中定义的返回码进行比较。 如果 函数的返回码与 MESSAGE 模块中的某个返回码相匹配,则 Net.Data 显示相应的 消息并对操作进行求值,确定是继续处理还是退出 Net.Data 宏。

MESSAGE 块在作用域上可以是全局的、或局部于一个 FUNCTION 块。 如果 MESSAGE 块是在最外层定义的,则认为它的作用域是全局的。当定义多个 全局 MESSAGE 块时,只有最后一个被处理的模块是活动的块。如果 MESSAGE 块是 在 FUNCTION 块中定义的,则此块的作用域局限于定义它的 FUNCTION 块。 请 参阅 Net.Data 管理和程序设计指南 中的 MESSAGE 块,获取 有关返回码的处理规则。

语法

>>-%MESSAGE--{-------------------------------------------------->
 
      .-------------------------------------------------------------------.
      V                                                                   |
>--------+-------------------------------------------------------------+--+>
         '--+-| 返回码说明 |--+--:---| 消息文本说明 |----| 操作说明 |--'
            '-| SQLSTATE |----'
 
>----%--}------------------------------------------------------><
 
操作说明
 
|--+---------------+--------------------------------------------|
   '-| 操作说明 |--'
 
返回码说明
 
|---+-DEFAULT------------+--------------------------------------|
    +-+DEFAULT-----------+
    +- -DEFAULT----------+
    +-+----+---msg_code--+
    | +- --+             |
    | '-+--'             |
    '-包含语句-----------'
 
SQLSTATE
 
|---SQLSTATE--:----+-state_id-------+---------------------------|
                   '-字母数字字符串-'
 
消息文本说明
 
          .----------------.
          V                |
|----+-"-----+----------+--+---"---+----------------------------|
     |       +-字符串---+          |
     |       +-变量引用-+          |
     |       +-函数调用-+          |
     |       '-(换行)---'          |
     |    .----------------.       |
     |    V                |       |
     +-{-----+----------+--+---%}--+
     |       +-字符串---+          |
     |       +-变量引用-+          |
     |       '-函数调用-'          |
     '-包含语句--------------------'
 
操作说明
 
         .-EXIT-----.
|---+-:--+----------+-+-----------------------------------------|
    |    '-CONTINUE-' |
    '-包含语句--------'
 

%MESSAGE
使用此关键字的块定义了一组返回码、相应的消息以及在函数调用返回时 Net.Data 所 要采用的操作。

返回码说明
一个正整数或负整数。如果 Net.Data RETURN_CODE 变量的值与 返回码说明值相匹配,则使用消息语句中的剩余信息来处理这个函数调用。您 也可以为返回码指定消息,而不需要在 MESSAGE 块中特别输入。

+DEFAULT
一个用于指定缺省的正消息代码的关键字。 如果 RETURN_CODE 大于 0 并且未指定精确匹配,则 Net.Data 使用这条消息语句中的信息来处理函 数调用。

-DEFAULT
指定缺省的负消息代码的关键字。如果 RETURN_CODE 小于 0 并且未指定精确匹 配,则 Net.Data 使用这条消息语句中的信息来处理函数调用。

DEFAULT
指定缺省消息代码的关键字。如果满足下面所有的条件,则 Net.Data 使用这条 消息语句中的信息来处理函数调用:

  • 如果 RETURN_CODE 大于或小于零,但不为零

  • 如果未指定返回码的精确匹配

  • 如果 RETURN_CODE 大于或小于零时,并未指定 +DEFAULT 或 -DEFAULT 值

msg_code
用于指定在处理期间出现的错误和警告的消息代码。数字是 0 到 9 的数字字符串。

SQLSTATE
提供应用程序给针对普遍错误情况的公用代码的关键字。SQLSTATE 值基于 SQL 标准中所含的 SQLSTATE 说明,并且编码机制和 SQL 的所有 IBM 实现都相同。限 制:OS/400 平台不支持。

state_id
一个字母或数字字符串,以字母字符或下划线开头, 可以包含字母、数字或下划线字符的任意组合。

字母数字字符串
一个字母或数字顺序的字符串,它包含字母或数字字符的任意组合。它不含标点符号。

消息文本说明
当 RETURN_CODE 与当前消息语句中的 return_code 值相匹配时,发送 给 Web 浏览器的一个字符串。

字符串
字母、数字字符和标点符号的任意序列。 如果此字符串出现在双引号内,则换行字符是不允许的。

变量引用
返回一个先前定义的变量的值,用 $ 和 () 来指定。 例如:如果 VAR='abc',则 $(VAR) 返回值 'abc' 。请 参阅变量引用中的语法信息。

函数调用
调用一个或多个先前已定义过的 FUNCTION 或 MACRO_FUNCTION 块,或带指定参数调用 Net.Data 内部函数。 请 参阅函数调用 (@)中的语法和例子。

操作说明
当 RETURN_CODE 与当前消息语句中的 return_code 值相匹配时,Net.Data 所 执行的操作。

EXIT
这个关键字指定了:当发生与指定的消息返回码相应的错误与警告时,立即 退出这个宏。 此值是缺省值。

CONTINUE
这个关键字指定了:当发生与指定的消息返回码相应的错误与警告时,继续 进行处理。

包含语句
INCLUDE 语句。 读取并将文件包含到 Net.Data 宏中。 INCLUDE 语句可以出现在 MESSAGE 中的任何地方。请 参阅INCLUDE 语句中的语法和例子。

上下文

可以在这些上下文中找到 MESSAGE 块:

限制

MESSAGE 块可以包含这些成份:

OS/400 平台不支持 SQLSTATE。

例 1: 一个本地 MESSAGE 块

%MESSAGE{
-601: {<H3>The table has already been created, please go back and enter your name.</H3>
<P><a href="input">Return</a>
%}
default: "<H3>Can't continue because of error $(RETURN_CODE)</H3>"
%}

例 2: 一个全局 MESSAGE 块

%{ 全局消息块 %}
%MESSAGE {
     -100     : "Return code -100 message"   : exit
      100     : "Return code 100 message"    : continue
   +default : {
This is a long message that spans more
than one line. You can use HTML tags, including
links and forms, in this message. %}   : continue
%}
 
%{ local message block inside a FUNCTION block %}
%FUNCTION(DTW_REXX) my_function() {
  %EXEC { my_command.cmd %}
%MESSAGE {
     -100     : "Return code -100 message"   : exit
      100     : "Return code 100 message"    : continue
     -default : {
This is a long message that spans more
than one line. You can use HTML tags, including
links and forms, in this message. %}   : exit
  %}

例 3: 一个包含 INCLUDE 语句的 MESSAGE 块。

 %message {
   %include "rc1000.msg"
   %include "rc2000.msg"
   %include "defaults.msg"
 %}                         

REPORT 块

目的

格式化来自一个函数调用的输出。可以输入一个表格名称参数,指定此报表将使用已命名的表格中 的数据。否则,此报表由函数参数列表中找到的第一个输出表格来生成,或者如果在此列表中找 不到表格名称,则用缺省的表格数据来生成。

语法

                                    .------------------------.
                                    V                        |
>>-%REPORT----+-------------+--{-------+------------------+--+-->
              '-(--名称--)--'          +-字符串-----------+
                                       +-条件块-----------+
                                       +-变量引用---------+
                                       +-函数调用---------+
                                       +-HTML 语句--------+
                                       +-包含语句---------+
                                       +-include_url 语句-+
                                       '-循环块-----------'
 
                 .------------------------.
                 V                        |
>-----+------+------+------------------+--+--%}----------------><
      '-行块-'      +-字符串-----------+
                    +-条件块-----------+
                    +-变量引用---------+
                    +-函数调用---------+
                    +-HTML 语句--------+
                    +-包含语句---------+
                    +-include_url 语句-+
                    '-循环块-----------'
 

%REPORT
这个关键字指定了用于格式化函数调用的输出结果的一系列命令。 您还可以在报表中 使用标题和脚注。

名称
一个字母或数字字符串,以字母字符或下划线开头, 可以包含字母、数字或下划线字符的任意组合。

字符串
字母、数字字符和标点符号的任意序列。

条件块
IF 块。可以执行有条件的字符串 处理。 如果条件列表中的字符串值是代表整数的字符串,并且没有前导或尾随空格,则作为数值型 进行比较。它们可以有一个前导加号(+)或者减号(-)。 参阅IF 块中的语法和例子。

变量引用
返回一个先前定义的变量的值,用 $ 和 () 来指定。 例如:如果 VAR='abc',则 $(VAR) 返回值 'abc' 。请 参阅变量引用中的语法信息。

函数调用
调用一个或多个先前已定义过的 FUNCTION 或 MACRO_FUNCTION 块,或带指定参数调用 Net.Data 内部函数。 请 参阅函数调用 (@)中的语法和例子。 限制: 除了在 OS/400 环境外,REPORT 块不能包含 SQL 函数调用。

HTML 语句
包含任何要在客户浏览器中显示的字母或数字字符、以及 HTML 标记。

包含语句
INCLUDE 语句。 读取并将文件包含到 Net.Data 宏中。 请 参阅INCLUDE 语句中的语法和例子。

include_url 语句
INCLUDE_URL 语句。读取并将另一个文件结合到其中指定这条语句的 Net.Data 宏中。指定的 文件可以存在于本地或者远程服务器上。 请 参阅INCLUDE_URL 语句中的语法和例子。

行块
ROW 块。针对每一行返回自某个函数调用的数据,显示一次 HTML 格式化数据。请 参阅ROW 块中的语法和例子。

循环块
WHILE 块。执行具有条件字符串处理的循序。 参阅WHILE 块中的语法和例子。

上下文

可以在这些上下文中找到 REPORT 块:

限制

REPORT 块可以包含这些成份:

例 1: 一张显示名称和位置列表的双列 HTML 表格

%REPORT{
<H2>Query Results</H2>
<P>Select a name for details.
<TABLE BORDER=1>
<TR><TD>Name</TD><TD>Location</TD>
%ROW{
<TR>
<TD>
<a href="/cgi-bin/db2www/name.mac/details?name=$(V1)&location=$(V2)">$(V1)</a></TD>
<TD>$(V2)</TD>
%}
</TABLE>
%}

若在表格中选择一个名称,则调用 Net.Data 宏 name.mac详细的 HTML 块,并把这两个值作 为 URL 的一部分发送给它。 对于此例子,可以在 name.mac 中 使用这些值来查找有关名称的其它细节。

ROW 块

目的

处理返回自一个函数调用的每个表格行。Net.Data 为表格中的每一行 处理一次 ROW 块中的语句。

语法

              .------------------------.
              V                        |
>>-%ROW--{-------+------------------+--+--%}-------------------><
                 +-字符串-----------+
                 +-条件块-----------+
                 +-变量引用---------+
                 +-函数调用---------+
                 +-HTML 语句--------+
                 +-包含语句---------+
                 +-include_url 语句-+
                 '-循环块-----------'
 

%ROW
此关键字指定了要显示的、经过 HTML 格式化的数据,对从函数调用返回的每行数据, 都要处理一遍。

字符串
字母、数字字符和标点符号的任意序列。

条件块
IF 块。可以执行有条件的字符串 处理。 如果条件列表中的字符串值是代表整数的字符串,并且没有前导或尾随空格,则作为数值型 进行比较。 它们可以有一个单个的前导加号(+)或者减号(-)。 参阅IF 块中的语法和例子。

变量引用
返回一个先前定义的变量的值,用 $ 和 () 来指定。 例如:如果 VAR='abc',则 $(VAR) 返回值 'abc' 。请 参阅变量引用中的语法信息。

函数调用
调用一个或多个先前已定义过的 FUNCTION 或 MACRO_FUNCTION 块,或带指定参数调用 内部函数。请 参阅函数调用 (@)中的语法和例子。 限制: 除了在 OS/400 环境外,ROW 不能包含 SQL 函数调用。

HTML 语句
包含任何要在客户浏览器中显示的字母或数字字符、以及 HTML 标记。

包含语句
INCLUDE 语句。 读取并将文件包含到 Net.Data 宏中。 请 参阅INCLUDE 语句中的语法和例子。

include_url 语句
INCLUDE_URL 语句。读取并将另一个文件结合到其中指定这条语句的 Net.Data 宏中。 指定的 文件可以存在于本地或者远程服务器上。 请 参阅INCLUDE_URL 语句中的语法和例子。

循环块
WHILE 块。执行具有条件字符串处理的循序。 参阅WHILE 块中的语法和例子。

上下文

可以在这些上下文中找到 ROW 块:

限制

ROW 块可以包含这些成份:

例 1: 一张显示名称和位置列表的双列 HTML 表格

%REPORT{
<H2>Query Results</H2>
<P>Select a name for details.
<TABLE BORDER=1>
<TR><TD>Name</TD><TD>Location</TD>
 
%ROW{
<TR>
<TD>
<a href="/cgi-bin/db2www/name.mac/details?name=$(V1)&location=$(V2)">$(V1)</a></TD>
<TD>$(V2)</TD>
%}
 
</TABLE>
%}

若在表格中选择一个名称,则调用 Net.Data 宏 name.mac详细的 HTML 块,并把这两个值作 为 URL 的一部分发送给它。 对于此例子,可以在 name.mac 中 使用这些值来查找有关名称的其它细节。

TABLE 语句

目的

定义一个变量,它是一个相关数据的集合。它包含一个相同记录或列的数组,和一个在每 一行描述字段的列名的数组。 表格语句只能在 DEFINE 语句或模块中。

语法

>>-%TABLE--| 上限 |--------------------------------------------><
 
上限
 
|---+------------------+----------------------------------------|
    '-(--+-数值-+---)--'
         '-ALL--'
 

%TABLE
此关键字定义了一组相关数据,其中包含一组相同的记录(或行)、一组 用于描述每行中各字段的列名。

上限
表格中可以包含的行数。

数值
数值是 0 到 9 的数字字符串。 0 值允许表格中行数不限。

ALL
此关键字允许在表格中包含任意多表格行。

上下文

可以在这些上下文中找到 TABLE 语句:

限制

TABLE 语句可以包含这些成份:

例 1:上限为 30 行的 Net.Data 表格

%DEFINE myTable1=%TABLE(30)

例 2:使用缺省为所有行的 Net.Data 表格

%DEFINE myTable2=%TABLE

例 3:指定所有行的 Net.Data 表格

%DEFINE myTable3=%TABLE(ALL)

WHILE 块

目的

提供一个基于条件字符串处理的循环结构。 可以在 HTML 块、REPORT 块、ROW 块和 MACRO_FUNCTION 块中使用 WHILE 块。如果条件列表中的字符串值是代表整数的字符串,并且没有前导或尾随空格,则作为数值型 进行比较。 它们可以有一个单个的前导加号(+)或者减号(-)。

语法

                               .---------------------.
                               V                     |
>>-%WHILE--| 条件列表 |---{-------+---------------+--+--%}-----><
                                  +-exec_sql 语句-+
                                  +-函数调用------+
                                  +-HTML 语句-----+
                                  +-条件块--------+
                                  +-循环块--------+
                                  +-变量引用------+
                                  '-字符串--------'
 
条件列表
 
|---(--+-(--条件列表--)----------+---)--------------------------|
       +-条件列表--&&--条件列表--+
       +-条件列表--||--条件列表--+
       +-!--条件列表-------------+
       +-| 条件 |----------------+
       '-| 条件项 |--------------'
 
条件
 
|---条件项--+-<--+---条件项-------------------------------------|
            +->--+
            +-<=-+
            +->=-+
            +-!=-+
            '-==-'
 
条件项
 
|---+-变量引用------+-------------------------------------------|
    +-"--字符串--"--+
    +-变量名--------+
    '-函数调用------'
 

%WHILE
指定循环处理的关键字。

条件列表
比较条件和条件项的值。条件列表可以使用布尔运算符进行连接。一个条件列表可以嵌套在另一个条件列表中。

条件
两个条件项之间使用比较运算符的一个比较表达式。 如果下面两个条件都为真,则 IF 条件看成是一个数值比较:

如果两者有一个不为真,则执行一个一般的字符串比较。

条件项
变量名、字符串、变量引用或函数调用。

exec_sql 语句
DB2WWW 发行版 1 语言成份,它保证了兼容性。 请参阅附录 A. DB2 WWW Connection 或 DB2 World Wide Web Release 1 文档。

函数调用
调用一个或多个先前已定义过的 FUNCTION 或 MACRO_FUNCTION 块,或带指定参数调用 内部函数。请 参阅函数调用 (@)中的语法和例子。

HTML 语句
包含任何要在客户浏览器中显示的字母或数字字符、以及 HTML 标记。

条件块
IF 块。可以执行有条件的字符串 处理。 如果条件列表中的字符串值是代表整数的字符串,并且没有前导或尾随空格,则作为数值型 进行比较。它们可以有一个前导加号(+)或者减号(-)。 参阅IF 块中的语法和例子。

循环块
WHILE 块。执行具有条件字符串处理的循序。 参阅WHILE 块中的语法和例子。

变量引用
返回一个先前定义的变量的值,用 $ 和 () 来指定。 例如:如果 VAR='abc',则 $(VAR) 返回值 'abc' 。请 参阅变量引用中的语法信息。

字符串
字母、数字字符和标点符号的任意序列。 用在条件列表中的此字符串可以包含任何字符,新建行字符除外。

变量名
一个或多个名称,每个附加的名称用一个句点(.)相连。 请参阅变量名中的语法信息。

上下文

可以在这些上下文中找到 WHILE 块:

限制

WHILE 块可以包含这些成份:

例 1: 一个生成表格中若干行的 WHILE 块

%DEFINE loopCounter = "1"
 
%HTML(build_table) {
%WHILE (loopCounter <= "100") {
  %{ generate table tag and column headings %}
  %IF (loopCounter == "1")
<TABLE BORDER>
<TR>
     <TH>Item #
     <TH>Description
     </TR>
%ENDIF
 
  %{ generate individual rows %}
<TR>
<TD>
  <TD>$(loopCounter)
  <TD>@getDescription(loopCounter)
  </TR>
 
  %{ generate end table tag %}
  %IF (loopCounter == "100")
</TABLE>
%ENDIF
 
  %{ increment loop counter %}
  @dtw_add(loopCounter, "1", loopCounter)
%}
%}
 
 
 


[ 页的顶部 | 上一页 | 下一页 | 目录 | 索引 ]