Net.Data 有四种类型的变量:预定的变量、隐式变量、报表变量和 SQL 变量。
许多 Net.Data 变量的输出依赖于它所运行的平台。
另外,Net.Data 还有以下这些结构:
在 Net.Data 宏中常量可以长达 64K。这样,在宏文件中不能把一个变量初始化为(或 把一个缺省值设置为)大于 64K。
| AIX | HP-UX | OS/2 | OS/390 | OS/400 | SCO | SUN | Win NT |
| X | X | X | X | X | X | X | X |
条件变量的值是根据另一个变量或字符串的值来有条件地设置的。这也称为三元操作。
test ? trueValue : falseValue
例子 1:如果 varB 存在,则 varA=value_1, 否则 varA=value_2。
varA = varB ? "value_1" : "value_2"
例子 2:在这里,如果 value_1 为空,则 varname 为空; 否则将 varname 设置为 value_1。
varname = ? "$(value_1)"
例子 3:Conditional 和 LIST 变量在一起使用时非常有效。这个 例子显示了如何在 DEFINE 模块中设置一个 WHERE 列表。变量 cust_inp 和 prod_inp 都是 从 CGI 传递过来的 HTML 输入变量,通常来自一个 HTML 表。变量 where_list 是一个 LIST 变量, 由两个条件语句组成,每个语句包含一个来自 CGI 的变量。
%DEFINE{
%list " AND " where_list
where_list = ? "custid = $(cust_inp)"
where_list = ? "product_name LIKE '$(prod_inp)%'"
where_clause = ? "WHERE $(where_list)"
%}
%FUNCTION(DTW_SQL) mySelect() {
SELECT * FROM prodtable $(where_clause)
%}
如果 CGI 同时返回变量 cust_inp 和 prod_inp 的值,例如 IBM 和 755C,则 where_clause 是:
WHERE custid = IBM AND product_name LIKE '755C%'
如果变量 cust_inp 或 prod_inp 中有一个为空或未定义,则更改 WHERE 语句, 省略其中的空值。例如,如果 prod_inp 为空,则 WHERE 子句为:
WHERE custid = IBM
如果两个值都为空或未定义,则变量 where_clause 为空,并且包含有 $(where_clause) 的 SQL 查询 中没有 WHERE 子句。
| AIX | HP-UX | OS/2 | OS/390 | OS/400 | SCO | SUN | Win NT |
| X | X | X | X | X | X | X | X |
隐藏变量允许您引用变量,并将实际的变量名隐藏在 HTML 源文件中。使用隐藏变量的方法 很简单:
例子 1:
%HTML(INPUT) {
<FORM ...>
<P>Select fields to view:
<SELECT NAME="Field">
<OPTION VALUE="$$(name)"> Name
<OPTION VALUE="$$(addr)"> Address
.
.
.
</FORM>
%}
%DEFINE{
name="customer.name"
addr="customer.address"
%}
%FUNCTION(DTW_SQL) mySelect() {
SELECT $(Field) FROM customer
%}
.
.
.
当在 Web 浏览器中显示 HTML 表时,$$(name) 和 $$(addr) 分别被替换 成 $(name) 和 $(addr),这样就不需要在 HTML 表中出现实际的表格名称和列名。 没有任何办法区分实际变量名是否隐藏的。当客户提交这个表时,调用 HTML(REPORT) 模块。 当 @mySelect() 调用 FUNCTION 模块时,SQL 语句中的 $(Field) 被替换成 SQL 查询中 的 customer.name 或 customer.addr。
| AIX | HP-UX | OS/2 | OS/390 | OS/400 | SCO | SUN | Win NT |
| X | X | X | X | X | X | X | X |
列表变量允许您构建值的定界字符串。当要构建一个具有多个项目的 SQL 查询时 (象某些 WHERE 或 HAVING 语句一样),它们特别有用。
其中的空格是必须的。 通常在值分隔符的两侧保留空格。大部分查询使用布尔或 数学运算符(例如,AND、OR 或 >)。请参阅LIST 语句中的语法和其它信息。
例子 1:这个例子中使用的条件变量、隐藏变量和列表变量:
%HTML(INPUT) {
<FORM METHOD="POST" ACTION="/cgi-bin/db2www/example2.max/report">
Select one or more cities:<BR>
<INPUT TYPE="checkbox" NAME="conditions" VALUE="$$(cond1)">Sao Paola<BR>
<INPUT TYPE="checkbox" NAME="conditions" VALUE="$$(cond2)">Seattle<BR>
<INPUT TYPE="checkbox" NAME="conditions" VALUE="$$(cond3)">Shanghai<BR>
<INPUT TYPE="submit" VALUE="Submit Query">
</FORM>
%}
%DEFINE{
DATABASE="custcity"
%LIST " OR " conditions
cond1="Sao Paolo"
cond2="Seattle"
cond3="Shanghai"
whereClause=Conditions ? "WHERE $(conditions)" : ""
%}
%FUNCTION(DTW_SQL) mySelect() {
SELECT name, city FROM citylist
$(whereClause)
%}
%HTML(REPORT) {
@mySelect()
%}
在 HTML 表中,如果没有选择任何框,则条件为空,因此查询中 的 whereClause 也为空。否则,whereClause 中包含了选定的 值,值之间用 OR 分隔。例如,如果选择了所有这三个城市,则 SQL 查询为:
SELECT name, city FROM citylist WHERE cond1='Sao Paolo' OR cond2='Seattle' OR cond3='Shanghai'
例子 2:这个例子中,隐式变量 VLIST 使用 " | " 作为 值分隔符。值的字符串之间用引号中的值来分隔。
%DEFINE %LIST " | " VLIST
%REPORT{
%ROW{
<EM>$(ROW_NUM):</EM> $(VLIST)
%}
%}
| AIX | HP-UX | OS/2 | OS/390 | OS/400 | SCO | SUN | Win NT |
| X | X | X | X | X | X | X | X |
表格变量中包含了一个值数组以及相关的列名。可以使用表格变量将一组值传递给一个 函数。还可以在一个函数的 REPORT 块中引用表格中的个别元素。表格变量通常用于一个 SQL 函数 的输出,或用于一个报表的输入,但也可以将它们作为 IN、OUT 或 INOUT 参数传递给任何 非 SQL 函数。表格只能作为 OUT 参数传递给 SQL 函数。 请参阅TABLE 语句中的语法 和其它信息。
例子 1:HTML 报表模块调用一个 SQL 查询,将结果 保存在 TABLE 变量中,然后将此变量传递给 REXX 函数。
%DEFINE{
DATABASE = "iddata"
MyTable = %TABLE(ALL)
DTW_DEFAULT_REPORT = "no"
%}
%FUNCTION(DTW_SQL) Query(OUT table) {
select * from survey
%}
%FUNCTION(DTW_REXX) showTable(IN table) {
Say 'Number of Rows: 'table_ROWS
Say 'Number of Columns: 'table_COLS
do j=1 to table_COLS
Say "Here are all of the values for column " table_N.j ":"
do i = 1 to table_ROWS
Say "<B>"i"</B>: " table_V.i.j
end
end
%}
%HTML (report){
<HTML>
<PRE>
@Query(MyTable)
<p>
@showTable(MyTable)
</PRE>
</HTML>
%}
这些变量提供了有关文件位置和日期的信息。在您编写的函数中这些变量非常有用, 您还可以用这些变量测试 Net.Data 宏。但不能使用 DTW_ASSIGN 来修改这些变量。
目的
| AIX | HP-UX | OS/2 | OS/390 | OS/400 | SCO | SUN | Win NT |
| X | X | X | X | X | X | X | X |
当前输入文件的名称和扩展名。这个文件可以是一个 Net.Data 宏,或来自 INCLUDE 语句的 一个输入文件。
例子
<P>This file is <I>$(DTW_CURRENT_FILENAME)</I>, and was updated on $(DTW_CURRENT_LAST_MODIFIED).
目的
| AIX | HP-UX | OS/2 | OS/390 | OS/400 | SCO | SUN | Win NT |
| X | X | X | X | X | X | X | X |
上次修改当前文件时的日期和时间。当前文件可以是一个 Net.Data 宏文件或在 INCLUDE 语句 中指定的一个文件。其输出格式是由 Net.Data 运行的系统所确定的。
例子
<P>This file is <I>$(DTW_CURRENT_FILENAME)</I>, and was updated on $(DTW_CURRENT_LAST_MODIFIED).
目的
| AIX | HP-UX | OS/2 | OS/390 | OS/400 | SCO | SUN | Win NT |
| X | X | X | X | X | X | X | X |
当前 Net.Data 宏的名称,包括扩展名。
例子
<P>This Net.Data macro is <I>$(DTW_MACRO_FILENAME)</I>, and was updated on $(DTW_MACRO_LAST_MODIFIED).
目的
| AIX | HP-UX | OS/2 | OS/390 | OS/400 | SCO | SUN | Win NT |
| X | X | X | X | X | X | X | X |
上次修改 Net.Data 宏时的日期和时间。其输出格式是由 Net.Data 运行的系统所确定的。
例子
<P>This Net.Data macro is <I>$(DTW_MACRO_FILENAME)</I>, and was updated on $(DTW_MACRO_LAST_MODIFIED).
目的
| AIX | HP-UX | OS/2 | OS/390 | OS/400 | SCO | SUN | Win NT |
| X | X | X | X | X | X | X | X |
Net.Data 可执行文件的路径和名称。根据系统的不同,输出格式可能如下:
usr/lpp/internet/server_root/cgi-bin/db2www
例子
The Net.Data executable is $(DTW_MP_PATH).
目的
| AIX | HP-UX | OS/2 | OS/390 | OS/400 | SCO | SUN | Win NT |
| X | X | X | X | X | X | X | X |
运行在服务器上的 Net.Data 的版本和发行编号。输出格式如下:
Net.Data Version 1.0.3.
例子
This Web application uses $(DTW_MP_VERSION).
这些变量是由 Net.Data 定义的;除非另行说明,否则只能在 REPORT 和 ROW 模块 中认识这些变量。使用这些变量可以引用从查询中返回的值。
目的
| AIX | HP-UX | OS/2 | OS/390 | OS/400 | SCO | SUN | Win NT |
| X | X | X | X | X | X | X | X |
指定列名的名称。在 REPORT 和 ROW 模块中有效。
例子
例子 1:
%REPORT{
<P>Send e-mail to <a href="mailto:$(N_email)">$(N_name)</a>.
.
.
.
%}
目的
| AIX | HP-UX | OS/2 | OS/390 | OS/400 | SCO | SUN | Win NT |
| X | X | X | X | X | X | X | X |
包含从函数调用或查询中返回的、第 n 列的列名。 在 REPORT 和 ROW 模块中有效。
例子
例子 1:
The name of column 2 is $(N2).
例子 2:这个例子显示了如何使用 DTW_ASSIGN 在 REPORT 模块 之外使用此变量。有关的更多信息,请参阅DTW_ASSIGN。
...
%ROW{
@DTW_ASSIGN(col1, N1)
%}
%HTML (report){
@
Column 1 was $(col1).
%}
例子 3:
%REPORT{
<H2>Product directory</H2>
<TABLE BORDER=1 CELLPADDING=3>
<TR><TD>$(N1)</TD><TD>$(N2)</TD><TD>$(N5)</TD>
%ROW{
<TR><TD>$(V1)</TD><TD>$(V2)</TD><TD>$(V3)</TD>
%}
</TABLE>
Found $(ROW_NUM) models matching your description.
%}
目的
| AIX | HP-UX | OS/2 | OS/390 | OS/400 | SCO | SUN | Win NT |
| X | X | X | X | X | X | X | X |
包含来自函数调用或者查询的结果的所有列名。 缺省的分隔符是空字符,即把所有列名连在一起,但您也可以在具有一组变量的 DEFINE 语句 或模块中指定其它分隔符,或指定 ALIGN="YES" 使用空格字符作为分隔符。 请参阅ALIGN以获取更多的信息。
例子
例子 1:在列名之间使用空格分隔的列名列表(把 ALIGN 设置 为 YES)。
%DEFINE ALIGN="YES"
%REPORT{
Your query was on these columns: $(NLIST).
.
.
.
%}
例子 2:这个例子使用 %LIST 变量把分隔符更改为 " | "。
%DEFINE %LIST " | " NLIST
%REPORT{
Your query was on these columns: $(NLIST).
.
.
.
%}
目的
| AIX | HP-UX | OS/2 | OS/390 | OS/400 | SCO | SUN | Win NT |
| X | X | X | X | X | X | X | X |
由函数调用或查询返回的列数。
例子
例子 1:
%REPORT{
Your query result has $(NUM_COLUMNS) columns: $(NLIST).
...
%}
目的
| AIX | HP-UX | OS/2 | OS/390 | OS/400 | SCO | SUN | Win NT |
| X | X | X | X | X | X | X | X |
来自函数调用或查询的返回码。Net.Data 使用这个值来处理 MESSAGE 模块。您可以使用 这个值来确定一个函数调用是成功了还是失败了。值 0 表示已成功地完成一个函数调用。
可以在以下上下文中找到 RETURN_CODE 变量:
例子
例子 1:应用程序用户可以看到一条表示函数是否已成功完成的 消息。
@function1()
%IF ("$(RETURN_CODE)" == "0")
The function completed successfully.
%ELSE
The function failed with the return code $(RETURN_CODE).
%ENDIF
例子 2:如果函数返回了一个非 0 的返回码,则显示缺省的 消息。
%MESSAGE{
default: "<h2>Net.Data received return code: $(RETURN_CODE)</h2>" : continue
%}
目的
| AIX | HP-UX | OS/2 | OS/390 | OS/400 | SCO | SUN | Win NT |
| X | X | X | X | X | X | X | X |
ROW_NUM 只在 ROW 模块中有效。它是一个计数器,每处理一行就增加 1。例如,如果在 表格中有 100 行,并且您已把 RPT_MAX_ROWS 设置为 20,则 ROW_NUM 的最终值是 10, 因为它是要处理的最后一行。
例子
例子 1:
%REPORT{
<TABLE BORDER=1>
<TR><TD> Row Number </TD> <TD> Customer </TD>
%ROW{
<TR><TD> $(ROW_NUM) </TD> <TD> $(V_custname) </TD>
%}
</TABLE>
%}
目的
| AIX | HP-UX | OS/2 | OS/390 | OS/400 | SCO | SUN | Win NT |
|
|
|
|
| X |
|
|
|
由查询返回的总行数,与 RPT_MAX_ROWS 的值无关。 例如,如果把RPT_MAX_ROWS设置为最多显示 20 行,但查询时返回 100 行, 则在完成 ROW 的处理后,此变量被设置为 100。在使用这个变量时必须将 DTW_SET_TOTAL_ROWS 设置 为 YES。请参阅DTW_SET_TOTAL_ROWS以获取更多的信息。
例子
%DEFINE DTW_SET_TOTAL_ROWS="YES"
%REPORT{
<H2>E-mail directory</H2>
<UL>
%ROW{
<LI>Name: <a href="mailto:$(V1)">$(V2)</a><BR>
Location: $(V3)
%}
</UL>
Names displayed: $(ROW_NUM)<BR>
Names found: $(TOTAL_ROWS)
%}
目的
| AIX | HP-UX | OS/2 | OS/390 | OS/400 | SCO | SUN | Win NT |
| X | X | X | X | X | X | X | X |
当前行中指定列的值,只在 ROW 模块中有效。对于未定义的列名,变量不存在。 如果一个查询中包含两个列名,而它们的名称相同,则可能产生不可预测的结果。考虑在您的SQL中使用一个 AS 子句来重新命名重复的列名。
例子
You have selected $(V_destcity).
目的
| AIX | HP-UX | OS/2 | OS/390 | OS/400 | SCO | SUN | Win NT |
| X | X | X | X | X | X | X | X |
包含由函数调用或 SQL 查询返回的每行中字段 1 到 n 的 字段值。此变量只能在 ROW 模块中有效,若要在此模块外部使用这个变量,请使用DTW_ASSIGN。
例子
例子 1:REPORT 模块显示一个 HTML 表格。 第二列显示了 e-mail 地址。通过单击一个人的链接,可以给这个人发送一条消息。
%REPORT{
<H2>E-mail directory</H2>
<TABLE BORDER=1 CELLPADDING=3>
<TR><TD>Name</TD><TD>E-mail address</TD><TD>Location</TD>
%ROW{
<TR><TD>$(V1)</TD>
<TD><a href="mailto:$(V2)">$(V2)</a></TD>
<TD>$(V3)</TD>
%}
</TABLE>
Found $(ROW_NUM) models matching your description.
%}
目的
| AIX | HP-UX | OS/2 | OS/390 | OS/400 | SCO | SUN | Win NT |
| X | X | X | X | X | X | X | X |
包含正在 ROW 模块中处理的当前行中所有字段的值。只在 ROW 模块中有效。缺省的分隔符 是空字符,即把所有值连在一起,但您也可以在具有一组变量的 DEFINE 语句 或模块中指定其它分隔符,或指定 ALIGN="YES" 使用空格字符作为分隔符。 请 参阅ALIGN以获取更多的信息。
由函数调用或查询返回的表格中每个行的字段值。 缺省的分隔符是空格,但您可以在带一个变量列表的 DEFINE 模块或语句中指定其它分隔符。
例子
例子 1:
%DEFINE ALIGN="YES"
%REPORT{
Here are the results of your query:
<OL>
%ROW{
<LI>$(VLIST)
%}
</OL>
%}
例子 2:这个例子使用 LIST 变量把分隔符更改为 <P>。
%DEFINE %LIST "<P>" VLIST
%REPORT{
Here are the results of your query:
%ROW{
<HR>$(VLIST)
%}
%}
这些变量可以帮助您定制报表。您必须在引用之前定义这些变量:
目的
| AIX | HP-UX | OS/2 | OS/390 | OS/400 | SCO | SUN | Win NT |
| X | X | X | X | X | X | X | X |
这个变量控制了报表变量 NLIST 和 VLIST 中使用的前导和尾随空格。缺省情况下没有 前导或尾随的空格,当要在 HTML 锚节点或表操作中嵌入查询结果时很有用。如果将这个 变量设置为 yes,则用空格来填充报表变量,使得在输出报表 时可以对齐。
同样,还可以指定用空格来分隔 LIST 语句中的变量,如例 2 所示。
例子
例子 1:因为 ALIGN 设置为 YES,列表中的每一列用 空格分隔。
%DEFINE ALIGN="YES" <P>Your query was on these columns: $(NLIST)
例子 2:这个例子的输出与例子 1 的输出相同,但分隔符是 在 LIST 语句中指定的。请参阅"List 变量"以获取更多的信息。
%DEFINE %LIST " " NLIST
%REPORT{
<P>Your query was on these columns: $(NLIST)
%}
目的
| AIX | HP-UX | OS/2 | OS/390 | OS/400 | SCO | SUN | Win NT |
| X | X | X | X |
| X | X | X |
将指定的 HTML 在不能识别 APPLET 标记的浏览器中显示出来。
例子
例子 1:
%DEFINE DTW_APPLET_ALTTEXT = "<P>Sorry, your browser is not java-enabled."
目的
| AIX | HP-UX | OS/2 | OS/390 | OS/400 | SCO | SUN | Win NT |
| X | X | X | X | X | X | X | X |
这个特殊变量用于覆盖缺省的报表,这是 Net.Data 为没有 REPORT 模块的函数 创建的。您可以通过设置 DTW_DEFAULT_REPORT 为 "NO" 来覆盖此操作,即没有 REPORT 模块 的函数不会在浏览器中显示任何结果。这非常有用。例如,如果把函数调用的结果接收到一个 表格变量中,并且想把结果传送给另一个函数来处理。
例子
例子 1:
%DEFINE DTW_DEFAULT_REPORT="NO"
目的
| AIX | HP-UX | OS/2 | OS/390 | OS/400 | SCO | SUN | Win NT |
| X | X | X | X | X | X | X | X |
使用这个变量把结果以 HTML 表格形式显示,而不把表格作为文本类型来显示(即, 使用 TABLE 标签,而不使用 PRE 标签)。YES 则以 HTML 表格 标记来显示表格数据。缺省操作是以文本格式显示表格数据。
生成的 TABLE 标记中包括了边界和单元填充说明:
<TABLE BORDER CELLPADDING=2>
例子
例子 1:这个例子显示了不带 REPORT 模块的 SQL 函数。已 把 DTW_HTML_TABLE 设置为 YES,因此生成一个 HTML 表格,而不生成文本格式的表格。
%DEFINE DTW_HTML_TABLE="YES"
%FUNCTION(DTW_SQL){
SELECT NAME, ADDRESS FROM $(qTable)
%}
目的
| AIX | HP-UX | OS/2 | OS/390 | OS/400 | SCO | SUN | Win NT |
| X | X | X | X | X | X | X | X |
使用这个变量指定作为文件标题的文本。如果这个变量设置为 YES 或不指定这个变量, 则在缺省情况下,Net.Data 打印“Content-type: text/html”作为文件标题文本。如果 把 DTW_PRINT_HEADER 变量设置为 NO,则可以打印出 HTTP 标题信息。您必须在 Net.Data 把 文本发送到浏览器之前设置此变量,因为 Net.Data 是在输出文本之前读取此变量的,以后 不再读取。在 Net.Data 把文本发送到浏览器之后,对 DTW_PRINT_HEADER 变量的任何更改 都将被忽略。
这个变量最常用于启用 Net.Data 宏,使它发送 cookies。为了设置 cookies,必须 将 DTW_PRINT_HEADER 变量设置为 NO,并且前三行必须为 Content-type 标题、 Set-Cookie 语句和空行。
例子
例子 1:
%DEFINE DTW_PRINT_HEADER="NO"
%HTML(cookie1) {
Content-type: text/html
Set-Cookie: UsrId=56, expires=Friday, 12-Dec-99, 12:00:00 GMT; path=/
<P>
Any text
%}
目的
| AIX | HP-UX | OS/2 | OS/390 | OS/400 | SCO | SUN | Win NT |
|
|
|
|
| X |
|
|
|
必须将 DTW_SET_TOTAL_ROWS 设置为 YES,以便可以使用TOTAL_ROWS。 如果此变量没有定义,则缺省值是不设置 TOTAL_ROWS 变量。如果将 DTW_SET_TOTAL_ROWS 设置 为 YES,这将影响其性能,因为为了确定总行数,数据库语言环境需要检索所有行。
例子
例子 1:
%DEFINE DTW_SET_TOTAL_ROWS="YES" <P>$(ROW_NUM) returned. Your query is limited to $(TOTAL_ROWS) rows.
目的
| AIX | HP-UX | OS/2 | OS/390 | OS/400 | SCO | SUN | Win NT |
| X | X | X | X | X | X | X | X |
指定报表显示的最大行数。缺省是返回表格中包含的所有行。设置此变量为 0 或 ALL 同样 显示所有行。
例子
第一个例子显示怎样在 DEFINE 语句中定义变量。第二个例子显示怎样使用 HTML 表来 定义变量。
例子 1:把任何函数返回的行数限制为 20 行。
%DEFINE RPT_MAX_ROWS="20"
例子 2:可以在 FORM 标记中添加这些行,使得应用程序用户 可以设置从查询返回的行数。
Maximum rows to return (0 for no limit): <INPUT TYPE="text" NAME="RPT_MAX_ROWS" SIZE=3>
目的
| AIX | HP-UX | OS/2 | OS/390 | OS/400 | SCO | SUN | Win NT |
| X | X | X |
| X |
| X | X |
这个变量用于设置查询结果的开始显示行号。将这个变量与RPT_MAX_ROWS一起 使用,可以将具有大型结果表格的查询分成几个小集合,然后使用“下一页”按钮来游历 生成的表格。
除了 OS/400 平台外,只有通过“现场连接”访问数据库时才使用 START_ROW_NUM。
这些变量可以与 SQL 函数一起,用于定制处理 FUNCTION 模块的方法。您必须在引用之前 定义这些变量。可以在任何 Net.Data 宏模块中引用报表变量。
目的
| AIX | HP-UX | OS/2 | OS/390 | OS/400 | SCO | SUN | Win NT |
| X | X | X |
| X | X | X | X |
Net.Data 使用此变量来建立和指定数据库的连接。 对于所有平台( OS/400 除外), 只允许有一个数据库连接,除非您用“现场连接”建立一个持久性连续。如果此变量没有定义, 则当试图访问数据库时发生错误。
在 OS/400 平台中,可以建立多个数据库连接。 另外,DATABASE 变量是可选的。在缺省时,Net.Data for OS/400 指定 DATABASE="*LOCAL"; 而 DTW_SQL 语言环境使用本地关系数据库目录项。
您可以针对同一 Net.Data 宏的不同 HTML 模块更改 DATABASE,如例子 2 和 3 所示:
例子
例子 1:这个 Net.Data 宏中的所有 SQL 都是在 CELDIAL 数据库 中执行的。
%DEFINE DATABASE="CELDIAL"
例子 2:此 HTML 模块查询数据库 DB2D1,而不管 DATABASE 的 先前值是什么。
%HTML(monthRpt){
@DTW_ASSIGN(DATABASE, "DB2D1")
%INCLUDE "rpthead.htm"
@getRpt()
%INCLUDE "rptfoot.htm"
%}
例子 3:这个例子与例子 2 相同,但它使用 DEFINE 来 设置 DATABASE 变量,而不是使用 DTW_ASSIGN。这种方法仍然可行,因为每次调用 HTML 模块 时都要从顶部开始处理整个 Net.Data 宏。
%DEFINE DATABASE="DB2D1"
%HTML(monthRpt){
%INCLUDE "rpthead.htm"
@getRpt()
%INCLUDE "rptfoot.htm"
%}
目的
| AIX | HP-UX | OS/2 | OS/390 | OS/400 | SCO | SUN | Win NT |
| X | X | X | X | X | X | X | X |
指定对于 SQL 命令使用哪种情况。如果此变量没有定义,则在缺省情况下不转换 SQL 命令。 指定 "UPPER" 或 "LOWER" 将强制把 SQL 命令中的所有字符转化为大写或小写。
例子
例子 1:
%DEFINE DB_CASE="UPPER"
目的
| AIX | HP-UX | OS/2 | OS/390 | OS/400 | SCO | SUN | Win NT |
|
|
|
| X |
|
|
|
|
Net.Data for OS/390 使用这个变量为本地 DB2 子系统的连接分配一个计划。 这个变量指定了本地 DB2 子系统中一个用于 Net.Data SQL 语言环境的计划名。如果没有 在 Net.Data for OS/390 配置文件中指定这个变量,也没有在宏当中定义,则当这个宏企图 执行一个 SQL 函数时将发生一个错误。
例子
例子 1:
%DEFINE DB2PLAN="DTWGA105"
目的
| AIX | HP-UX | OS/2 | OS/390 | OS/400 | SCO | SUN | Win NT |
|
|
|
| X |
|
|
|
|
Net.Data for OS/390 使用这个变量来建立与本地 DB2 子系统的连接。这些变量指定 了 Net.Data 将要访问的本地 DB2 子系统的子系统标识符。每个宏只允许有一个本地 数据库连接。如果没有在 Net.Data for OS/390 配置文件中指定这个变量,也没有在宏 当中定义,则当这个宏企图执行一个 SQL 函数时将发生一个错误。
例子
例子 1:
%DEFINE DB2SSID="DB2G"
目的
| AIX | HP-UX | OS/2 | OS/390 | OS/400 | SCO | SUN | Win NT |
| X | X | X | X | X | X | X | X |
这个变量标识了一个 TABLE 变量,SQL 语言环境将这个变量用于存储由查询产生的表格 数据。然后可以使用此表格,例如,用在分析表格数据的 REXX 程序中。
例子
在这个例子中,REXX FUNCTION 模块调用 REXX 程序 anzTbl.cmd,它使用表格 变量 theTable 来分析表格中的数据。变量 theTable 是从前一 SQL 函数调用中返回的。
%DEFINE theTable = %TABLE(2)
%DEFINE DTW_SAVE_TABLE_IN = "theTable"
%FUNCTION(DTW_SQL) doQuery() {
SELECT MODNO, COST, DESCRIP FROM EQPTABLE
WHERE TYPE='MONITOR'
%}
%FUNCTION(DTW_REXX) analyze_table(myTable) {
%EXEC{ anzTbl.cmd %}
%}
%HTML(doTable) {
@doQuery()
@analyze_table(theTable)
%}
目的
| AIX | HP-UX | OS/2 | OS/390 | OS/400 | SCO | SUN | Win NT |
|
|
|
| X |
|
|
|
|
Net.Data for OS/390 使用这个变量建立一个与远程数据库服务器的连接。此变量 指定了本地 DB2 子系统中用于标识远程服务器的名称。LOCATION 的值必须 在 Communications Database (CDB) 中的 SYSIBM.SYSLOCATIONS 表格中定义。如果未 在宏中定义过这个变量,那么由宏发出的任何 SQL 请求都将在本地 DB2 子系统中执行。
例子
例子 1:
%DEFINE LOCATION="QMFDJ00"
目的
| AIX | HP-UX | OS/2 | OS/390 | OS/400 | SCO | SUN | Win NT |
| X | X | X |
| X | X | X | X |
通过输入用户标识符,来提供对已保护数据的访问。这个变量与 PASSWORD 一起 使用 DB2 的安全性算法。缺省时,使用用于启动 Web 服务器的用户 ID。您可以将 这个值硬编码在 Net.Data 宏中,或由应用程序用户在 HTML 表中输入。
例子
例子 1:这个例子把权限局限于 ID DB2USER 用户。
%DEFINE LOGIN="DB2USER"
例子 2:这个例子中显示了可以包含在 HTML 表中的一行命令, 应用程序用户可以用它来输入其用户标识符。
USERID: <INPUT TYPE="text" NAME="LOGIN" SIZE=6>
目的
| AIX | HP-UX | OS/2 | OS/390 | OS/400 | SCO | SUN | Win NT |
| X | X | X |
| X | X | X | X |
通过输入口令,来提供对已保护数据的访问。这个变量与 LOGIN 一起 使用 DB2 的安全性算法。您可以将这个值硬编码在 Net.Data 宏中,或由用户在 HTML 表中输入。
例子
例子 1:这个例子把权限局限于口令为 NETDATA 的用户。
%DEFINE PASSWORD="NETDATA"
例子 2:这个例子中显示了可以包含在 HTML 表中的一行命令, 应用程序用户可以用它来输入其口令。
PASSWORD: <INPUT TYPE="password" NAME="PASSWORD" SIZE=8>
目的
| AIX | HP-UX | OS/2 | OS/390 | OS/400 | SCO | SUN | Win NT |
| X | X | X | X | X | X | X | X |
隐藏或显示在 Web 浏览器上使用的查询 SQL。缺省情况是隐藏 SQL。将变量设置为 YES, 就可以显示发送至数据库的 SQL。 设置为 NO 来隐藏 SQL。在测试期间显示 SQL,对 调试 Net.Data 宏很有好处。
例子
例子 1:这个例子显示了怎样使得如何每次都显示 SQL。
%DEFINE SHOWSQL="YES"
例子 2:这个例子显示了如何指定是否使用 HTML 格式来 显示 SQL。
SHOWSQL: <INPUT TYPE="radio" NAME="SHOWSQL" VALUE="YES"> Yes
<INPUT TYPE="radio" NAME="SHOWSQL" VALUE="" CHECKED> No
目的
| AIX | HP-UX | OS/2 | OS/390 | OS/400 | SCO | SUN | Win NT |
| X | X | X | X | X | X | X | X |
指定 SQL 命令的事务作用域。缺省值是 "MULTIPLE",表示只有当 HTML 模块中 的所有 SQL 命令都顺利完成后,Net.Data 才发出一条 COMMIT 命令。不成功的 SQL 命令 会使模块中先前对同一个数据库进行操作的 SQL 命令被恢复。 指定 "SINGLE" 表示当 HTML 模块中的每条 SQL 命令成功完成时,Net.Data 都要发出 一条 COMMIT 命令。
在 OS/400 和 OS/390 以外的平台中,如果所有以下条件都成立,则当提交 对由同一 HTML 模块访问的其它数据库的更新时,对这个数据库进行的更新 (接收到 不成功的响应)将被恢复:
如果使用 DataJoiner 软件从 Net.Data 访问多个数据库,则当从 Net.Data 更新 时可以达到多个数据库更新的协调和一致性。
在 OS/400 和 OS/390 中,TRANSACTION_SCOPE = "MULTIPLE" 将使得从一个 HTML 模块 发出的所有 IBM 数据库更新操作被同时提交或恢复。
在 OS/400 以外的平台中,REXX、Perl 和 Java 语言环境是在它们自己的操作系统 进程中运行的。这样,您从这些语言环境发出的数据库更新操作,与从 Net.Data 宏文件 中发出的数据库更新操作是相互独立的,可以分别被提交或恢复,而 与 Net.Data TRANSACTION_SCOPE 值的设置无关。
例子
例子 1:
%DEFINE TRANSACTION_SCOPE="SINGLE"