143 lines
8.2 KiB
HTML
143 lines
8.2 KiB
HTML
|
<?xml version="1.0" encoding="UTF-8"?>
|
|||
|
<!DOCTYPE html
|
|||
|
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|||
|
<html lang="en-us" xml:lang="en-us">
|
|||
|
<head>
|
|||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|||
|
<meta name="security" content="public" />
|
|||
|
<meta name="Robots" content="index,follow" />
|
|||
|
<meta http-equiv="PICS-Label" content='(PICS-1.1 "http://www.icra.org/ratingsv02.html" l gen true r (cz 1 lz 1 nz 1 oz 1 vz 1) "http://www.rsac.org/ratingsv01.html" l gen true r (n 0 s 0 v 0 l 0) "http://www.classify.org/safesurf/" l gen true r (SS~~000 1))' />
|
|||
|
<meta name="DC.Type" content="reference" />
|
|||
|
<meta name="DC.Title" content="Example 1: Dynamically join database files without DDS" />
|
|||
|
<meta name="abstract" content="This example shows how to dynamically join database files without DDS." />
|
|||
|
<meta name="description" content="This example shows how to dynamically join database files without DDS." />
|
|||
|
<meta name="DC.Relation" scheme="URI" content="rbafodynjf.htm" />
|
|||
|
<meta name="copyright" content="(C) Copyright IBM Corporation 1998, 2006" />
|
|||
|
<meta name="DC.Rights.Owner" content="(C) Copyright IBM Corporation 1998, 2006" />
|
|||
|
<meta name="DC.Format" content="XHTML" />
|
|||
|
<meta name="DC.Identifier" content="rbafodynjfex1" />
|
|||
|
<meta name="DC.Language" content="en-us" />
|
|||
|
<!-- All rights reserved. Licensed Materials Property of IBM -->
|
|||
|
<!-- US Government Users Restricted Rights -->
|
|||
|
<!-- Use, duplication or disclosure restricted by -->
|
|||
|
<!-- GSA ADP Schedule Contract with IBM Corp. -->
|
|||
|
<link rel="stylesheet" type="text/css" href="./ibmdita.css" />
|
|||
|
<link rel="stylesheet" type="text/css" href="./ic.css" />
|
|||
|
<title>Example 1: Dynamically join database files without DDS</title>
|
|||
|
</head>
|
|||
|
<body id="rbafodynjfex1"><a name="rbafodynjfex1"><!-- --></a>
|
|||
|
<!-- Java sync-link --><script language="Javascript" src="../rzahg/synch.js" type="text/javascript"></script>
|
|||
|
<h1 class="topictitle1">Example 1: Dynamically join database files without DDS</h1>
|
|||
|
<div><p>This example shows how to dynamically join database files without
|
|||
|
DDS.</p>
|
|||
|
<div class="section"><p>Assume that you want to join FILEA and FILEB, and the files contain
|
|||
|
the following fields:</p>
|
|||
|
</div>
|
|||
|
|
|||
|
<table cellpadding="4" cellspacing="0" border="1" class="tableborder"><tr><td>
|
|||
|
<table cellpadding="4" cellspacing="0" summary="" width="100%" border="0"><thead align="left"><tr><th align="left" valign="bottom" width="33.33333333333333%" id="d0e25">FILEA</th>
|
|||
|
<th align="left" valign="bottom" width="33.33333333333333%" id="d0e27">FILEB</th>
|
|||
|
<th align="left" valign="bottom" width="33.33333333333333%" id="d0e29">JOINAB</th>
|
|||
|
</tr>
|
|||
|
</thead>
|
|||
|
<tbody><tr><td align="left" valign="top" width="33.33333333333333%" headers="d0e25 ">Cust</td>
|
|||
|
<td align="left" valign="top" width="33.33333333333333%" headers="d0e27 ">Cust</td>
|
|||
|
<td align="left" valign="top" width="33.33333333333333%" headers="d0e29 ">Cust</td>
|
|||
|
</tr>
|
|||
|
<tr><td align="left" valign="top" width="33.33333333333333%" headers="d0e25 ">Name</td>
|
|||
|
<td align="left" valign="top" width="33.33333333333333%" headers="d0e27 ">Amt</td>
|
|||
|
<td align="left" valign="top" width="33.33333333333333%" headers="d0e29 ">Name</td>
|
|||
|
</tr>
|
|||
|
<tr><td align="left" valign="top" width="33.33333333333333%" headers="d0e25 ">Addr</td>
|
|||
|
<td align="left" valign="top" width="33.33333333333333%" headers="d0e27 "> </td>
|
|||
|
<td align="left" valign="top" width="33.33333333333333%" headers="d0e29 ">Amt</td>
|
|||
|
</tr>
|
|||
|
</tbody>
|
|||
|
</table>
|
|||
|
</td></tr></table>
|
|||
|
<div class="section"><p>The join field is <em>Cust</em> which exists in both files. Any
|
|||
|
record format name can be specified on the Open Query File (OPNQRYF) command
|
|||
|
for the join file. The file does not need a member. The records are not required
|
|||
|
to be in keyed sequence.</p>
|
|||
|
</div>
|
|||
|
<div class="section"><div class="p">You can specify: <pre>OVRDBF FILE(JOINAB) TOFILE(FILEA) SHARE(*YES)
|
|||
|
OPNQRYF FILE(FILEA FILEB) FORMAT(JOINAB) +
|
|||
|
JFLD((FILEA/CUST FILEB/CUST)) +
|
|||
|
MAPFLD((CUST 'FILEA/CUST'))
|
|||
|
CALL PGM(PGME) /* Created using file JOINAB as input */
|
|||
|
CLOF OPNID(FILEA)
|
|||
|
DLTOVR FILE(JOINAB)</pre>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="section"><p>File JOINAB is a physical file with no data. This file contains
|
|||
|
the record format to be specified on the FORMAT parameter of the OPNQRYF command.</p>
|
|||
|
</div>
|
|||
|
<div class="section"><p>Notice that the TOFILE parameter on the Override with Database
|
|||
|
File (OVRDBF) command specifies the name of the primary file for the join
|
|||
|
operation (the first file specified for the FILE parameter on the OPNQRYF
|
|||
|
command). In this example, the FILE parameter on the OPNQRYF command identifies
|
|||
|
the files in the sequence they are to be joined (A to B). The format for the
|
|||
|
file is in the file JOINAB.</p>
|
|||
|
</div>
|
|||
|
<div class="section"><div class="p">The JFLD parameter identifies the <em>Cust</em> field in FILEA to
|
|||
|
join to the <em>Cust</em> field in FILEB. Because the <em>Cust</em> field is not
|
|||
|
unique across all of the joined record formats, it must be qualified on the
|
|||
|
JFLD parameter. The system attempts to determine, in some cases, the most
|
|||
|
efficient values even if you do not specify the JFLD parameter on the OPNQRYF
|
|||
|
command. For example, using the previous example, if you specified: <pre>OPNQRYF FILE(FILEA FILEB) FORMAT(JOINAB) +
|
|||
|
QRYSLT('FILEA/CUST *EQ FILEB/CUST') +
|
|||
|
MAPFLD((CUST 'FILEA/CUST'))</pre>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="section"><p>The system joins FILEA and FILEB using the <em>Cust</em> field because
|
|||
|
of the values specified for the QRYSLT parameter. Notice that in this example
|
|||
|
the JFLD parameter is not specified on the command. However, if either JDFTVAL(*ONLYDFT)
|
|||
|
or JDFTVAL(*YES) is specified on the OPNQRYF command, the JFLD parameter must
|
|||
|
be specified.</p>
|
|||
|
</div>
|
|||
|
<div class="section"><div class="p">The MAPFLD parameter is needed on the
|
|||
|
Open Query File (OPNQRYF) command to describe which file should be used for
|
|||
|
the data for the <em>Cust</em> field in the record format for file JOINAB. If
|
|||
|
a field is defined on the MAPFLD parameter, its unqualified name (the <em>Cust</em> field
|
|||
|
in this case without the file name identification) can be used anywhere else
|
|||
|
in the OPNQRYF command. Because the <em>Cust</em> field is defined on the MAPFLD
|
|||
|
parameter, the first value of the JFLD parameter need not be qualified. For
|
|||
|
example, the same result can be achieved by specifying: <pre>JFLD((CUST FILEB/CUST)) +
|
|||
|
MAPFLD((CUST 'FILEA/CUST'))</pre>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="section"><p>Any other uses of the same field name in the OPNQRYF command to
|
|||
|
indicate a field from a file other than the file defined by the MAPFLD parameter
|
|||
|
must be qualified with a file name.</p>
|
|||
|
</div>
|
|||
|
<div class="section"><p>Because no KEYFLD parameter is specified, the records appear in
|
|||
|
any sequence depending on how the OPNQRYF command selects the records. You
|
|||
|
can force the system to arrange the records the same as the primary file.
|
|||
|
To do this, specify *FILE on the KEYFLD parameter. You can specify this even
|
|||
|
if the primary file is in arrival sequence.</p>
|
|||
|
</div>
|
|||
|
<div class="section"><p>The JDFTVAL parameter (similar to the JDFTVAL keyword in DDS)
|
|||
|
can also be specified on the OPNQRYF command to describe what the system should
|
|||
|
do if one of the records is missing from the secondary file. In this example,
|
|||
|
the JDFTVAL parameter was not specified, so only the records that exist in
|
|||
|
both files are selected.</p>
|
|||
|
</div>
|
|||
|
<div class="section"><p>If you tell the system to improve the results of the query (through
|
|||
|
parameters on the OPNQRYF command), it generally tries to use the file with
|
|||
|
the smallest number of records selected as the primary file. However, the
|
|||
|
system also tries to avoid building a temporary file.</p>
|
|||
|
</div>
|
|||
|
<div class="section"><p>You can force the system to follow the file sequence of the join
|
|||
|
as you have specified it in the FILE parameter on the OPNQRYF command by
|
|||
|
specifying JORDER(*FILE). If JDFTVAL(*YES) or JDFTVAL(*ONLYDFT) is specified,
|
|||
|
the system will never change the join file sequence because a different sequence
|
|||
|
can cause different results.</p>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div>
|
|||
|
<div class="familylinks">
|
|||
|
<div class="parentlink"><strong>Parent topic:</strong> <a href="rbafodynjf.htm" title="The dynamic join function allows you to join files without having to first specify data description specifications (DDS) and create a join logical file.">Dynamically join database files without DDS</a></div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</body>
|
|||
|
</html>
|