ibm-information-center/dist/eclipse/plugins/i5OS.ic.db2_5.4.0.1/rbafzmstconj1.htm

298 lines
18 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 xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-us">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="dc.language" scheme="rfc1766" 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. -->
<meta name="dc.date" scheme="iso8601" content="2005-09-19" />
<meta name="copyright" content="(C) Copyright IBM Corporation 1998, 2006" />
<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="keywords" content="CONNECT (Type 1), SQL statements,
CONNECT (Type 1) statement, in CONNECT (Type 1) statement, variable, server-name,
USER clause, authorization-name, USING clause, password, RESET clause" />
<title>CONNECT (Type 1)</title>
<link rel="stylesheet" type="text/css" href="ibmidwb.css" />
<link rel="stylesheet" type="text/css" href="ic.css" />
</head>
<body>
<a id="Top_Of_Page" name="Top_Of_Page"></a><!-- Java sync-link -->
<script language = "Javascript" src = "../rzahg/synch.js" type="text/javascript"></script>
<a name="conj1"></a>
<h2 id="conj1"><a href="rbafzmst02.htm#ToC_823">CONNECT (Type 1)</a></h2><a id="idx1564" name="idx1564"></a><a id="idx1565" name="idx1565"></a>
<a name="aonj1"></a>
<p id="aonj1">The CONNECT (TYPE 1) statement connects an activation group
within an application process to the identified application server using the rules
for remote unit of work. This server is then the current server for the activation
group. This type of CONNECT statement is used if RDBCNNMTH(*RUW) was specified
on the CRTSQLxxx command. Differences between the two types of statements
are described in <a href="rbafzmstdiftab2.htm#rcncdif">CONNECT (Type 1) and CONNECT (Type 2) differences</a>. Refer to <a href="rbafzmstch2drda.htm#adduwmg">Application-directed distributed unit of work</a> for more information about connection states.</p>
<a name="wq1159"></a>
<h3 id="wq1159"><a href="rbafzmst02.htm#ToC_824">Invocation</a></h3>
<p>This statement can only be embedded within an application program or issued
interactively. It is an executable statement that cannot be dynamically prepared.
It must not be specified in Java&trade; or REXX.</p>
<p>CONNECT is not allowed in a trigger, a function, or a procedure if the
procedure is called on a remote application server.</p>
<a name="wq1160"></a>
<h3 id="wq1160"><a href="rbafzmst02.htm#ToC_825">Authorization</a></h3>
<p>The privileges held by the authorization ID of the statement must include
communications-level security. (See the section about security in the <a href="../ddp/rbal1kickoff.htm">Distributed Database Programming</a> book.)</p>
<p>If the application server is DB2 UDB for iSeries, the user profile of the person issuing the
statement must also be a valid user profile on the application server system, UNLESS:</p>
<ul>
<li>User is specified. In this case, the USER clause must specify a valid
user profile on the application server system.</li>
<li>TCP/IP is used with a server authorization entry for the application server. In
this case, the server authorization entry must specify a valid user profile
on the application server system.</li></ul>
<a name="wq1161"></a>
<h3 id="wq1161"><a href="rbafzmst02.htm#ToC_826">Syntax</a></h3>
<a href="rbafzmstconj1.htm#synsconct"><img src="c.gif" alt="Click to skip syntax diagram" /></a>
<pre class="cgraphic"><span><img src="c.gif" alt="Read syntax diagram" longdesc="rbafzmstsyn266.htm"
border="0" /></span><a href="#skipsyn-265"><img src="c.gif" alt="Skip visual syntax diagram"
border="0" /></a>>>-CONNECT--+----------------------------------------+--------->&lt;
+-TO--+-<span class="italic">server-name</span>-+--+---------------+-+
| '-<span><span class="italic">variable</span></span>----' '-<span class="italic">authorization</span>-' |
'-RESET----------------------------------'
authorization:
|--USER--+-<span class="italic">authorization-name</span>-+--USING--+-<span class="italic">password</span>-+------------|
'-<span><span class="italic">variable</span></span>-----------' '-<span><span class="italic">variable</span></span>-'
</pre>
<a name="skipsyn-265" id="skipsyn-265"></a>
<a name="synsconct"></a>
<h3 id="synsconct"><a href="rbafzmst02.htm#ToC_827">Description</a></h3><a id="idx1566" name="idx1566"></a><a id="idx1567" name="idx1567"></a>
<dl class="parml">
<dt class="bold">TO <var class="pv">server-name</var> <span class="base">or</span> <var class="pv">variable</var></dt>
<dd>Identifies the application server by the specified server name or the server
name contained in the variable. If a variable is specified:
<ul>
<li>It must be a character-string variable.</li>
<li>It must not be followed by an indicator variable.</li>
<li>The server name must be left-justified within the variable and must conform
to the rules for forming an ordinary identifier.</li>
<li>If the length of the server name is less than the length of the variable,
it must be padded on the right with blanks.</li></ul>
<p>When the CONNECT statement is executed, the specified server name
or the server name contained in the variable must identify an application server described
in the local directory and the activation group must be in the connectable
state.</p>
<p>If the <var class="pv">server-name</var> is a local relational
database and an <var class="pv">authorization-name</var> is specified, it must be the user
of the job. If the specified <var class="pv">authorization-name</var> is different than
the user of the job, an error occurs and the application is left in the unconnected
state.</p>
</dd>
<dt class="bold">USER <var class="pv">authorization-name or variable</var> </dt><a id="idx1568" name="idx1568"></a><a id="idx1569" name="idx1569"></a><a id="idx1570" name="idx1570"></a>
<dd>Identifies the authorization name that will be used to connect
to the application server.
<p>If a <var class="pv">variable</var> is specified, </p>
<ul>
<li>It must be a character string variable.</li>
<li>It must not be followed by an indicator variable.</li>
<li>The authorization name must be left-justified within the variable and
must conform to the rules of forming an authorization name.</li>
<li>If the length of the authorization name is less than the length of the
variable, it must be padded on the right with blanks.</li>
<li>The value of the server name must not contain lowercase characters.</li></ul>
</dd>
<dt class="bold">USING <var class="pv">password or variable</var> </dt><a id="idx1571" name="idx1571"></a><a id="idx1572" name="idx1572"></a><a id="idx1573" name="idx1573"></a>
<dd>Identifies the password that will be used to connect to
the application server.
<p>If password is specified as a literal, it must be
a character string. The maximum length is 128 characters. It must be left
justified. The literal form of the password is not allowed in static SQL or
REXX.</p>
<p>If a <var class="pv">variable</var> is specified, </p>
<ul>
<li>It must be a character-string variable.</li>
<li>It must not be followed by an indicator variable.</li>
<li>The password must be left-justified within the variable.</li>
<li>If the length of the password is less than that of the variable, it must
be padded on the right with blanks.</li></ul>
</dd>
<dt class="bold">RESET </dt><a id="idx1574" name="idx1574"></a>
<dd>CONNECT RESET is equivalent to CONNECT TO x where x is the local server
name.
</dd>
<dt class="bold">CONNECT <span class="base">with no operand</span></dt>
<dd>This form of the CONNECT statement returns information about the current
server and has no effect on connection states, open cursors, prepared statements,
or locks. The connection information is returned in the connection information
items in the SQL Diagnostics Area (or the SQLCA).
</dd>
</dl>
<a name="wq1162"></a>
<h3 id="wq1162"><a href="rbafzmst02.htm#ToC_828">Notes</a></h3>
<p><span class="bold">Successful connection:</span> If the CONNECT statement is
successful: </p>
<ul>
<li>All open cursors are closed, all prepared statements are destroyed, and
all locks are released from the current connection.</li>
<li>The activation group is disconnected from all current and dormant connections,
if any, and connected to the identified application server.</li>
<li>The name of the application server is placed in the CURRENT SERVER special register.</li>
<li>Information about the application server is placed in the <var class="pv">connection-information-items</var> in the SQL Diagnostics Area.</li>
<li>Information about the application server is also placed in the SQLERRP and SQLERRD(4)
fields of the SQLCA. If the application server is an IBM&reg; relational database product, the information
in the SQLERRP field has the form <var class="pv">pppvvrrm</var>, where:
<ul>
<li><var class="pv">ppp</var> identifies the product as follows:
<ul class="simple">
<li>ARI for DB2&reg; for VM and VSE</li>
<li>DSN for DB2 UDB for z/OS</li>
<li>QSQ for DB2 UDB for iSeries</li>
<li>SQL for all other DB2 UDB products</li></ul></li>
<li><var class="pv">vv</var> is a two-digit version identifier such as '07'</li>
<li><var class="pv">rr</var> is a two-digit release identifier such as '01'</li>
<li><var class="pv">m</var> is a one-digit modification level such as '0'</li></ul>
<p>For example, if the application server is Version 7 of DB2 UDB for z/OS, the value
of SQLERRP is 'DSN07010'.</p>
<p>The SQLERRD(4) field of the SQLCA
contains values indicating whether the application server allows commitable updates
to be performed. For a CONNECT (Type 1) statement SQLERRD(4) will always contain
the value 1. The value 1 indicates that commitable updates can be performed,
and the connection: </p>
<ul>
<li>Uses an unprotected
conversation,<sup class="fn"><a href="rbafzmstconj1.htm#fn001">63</a></sup> or</li>
<li>Is a connection to an application requester driver program using the *RUW
connection method, or</li>
<li>Is a local connection using the *RUW connection method.</li></ul></li>
<li>Additional information about the connection is placed in the SQLERRMC
field of the SQLCA. Refer to <a href="rbafzmstsqlcca.htm#sqlcca">Appendix C. SQLCA (SQL communication area)</a></li></ul>
<p><span class="bold">Unsuccessful connection:</span> If the CONNECT statement
is unsuccessful, the DB2_MODULE_DETECTING_ERROR condition information item
in the SQL Diagnostics Area (or the SQLERRP field of the SQLCA) is set to
the name of the module at the application requester that detected the error.
Note that the first three characters of the module name identify the product.
For example, if the application requester is DB2 UDB LUW for Windows the first three
characters are 'SQL'.</p>
<p>If the CONNECT statement is unsuccessful because the activation group is
not in the connectable state, the connection state of the activation group
is unchanged.</p>
<p>If the CONNECT statement is unsuccessful for any other reason: </p>
<ul>
<li>The activation group remains in a connectable, but unconnected state</li>
<li>All open cursors are closed, all prepared statements are destroyed, and
all locks are released from all current and dormant connections.</li></ul><p class="indatacontent"> An application in a connectable but unconnected state can only execute
the CONNECT or SET CONNECTION statements.</p>
<p><span class="bold">Implicit connect:</span></p>
<ul>
<li>When running in the default activation group, the SQL program implicitly
connects to a remote relational database when:
<ul>
<li>The activation group is in a connectable state.</li>
<li>The first SQL statement in the first SQL program on the program stack
is executed.</li></ul></li>
<li>When running in a non-default activation group, the SQL program implicitly
connects to a remote relational database when the first SQL statement in the
first SQL program for that activation group is executed.</li></ul>
<a name="wq1163"></a>
<div class="notetitle" id="wq1163">Note:</div>
<div class="notebody">It is a good practice for the first SQL statement executed
by an activation group to be the CONNECT statement.</div>
<p>When APPC is used for connecting to an RDB, implicit connect always sends
the <var class="pv">authorization-name</var> of the application requester job and does
not send passwords. If the <var class="pv">authorization-name</var> of the application server job
is different, or if a password must be sent, an explicit connect statement
must be used.</p>
<p>When TCP/IP is used for connecting to an RDB, an implicit connect is not
bound by the above restrictions. Use of the ADDSVRAUTE and other -SVRAUTE
commands allows one to specify, for a given user under which the implicit
(or explicit) CONNECT is done, the remote authorization-name and password
to be used in connecting to a given RDB.</p>
<p>In order for the password to be stored with the ADDSVRAUTE or CHGSVRAUTE
command, the QRETSVRSEC system value must be set to '1' rather than the default
of '0'. When using these commands for DRDA&reg; connection, it is very important to realize
that the value of the RDB name entered into the SERVER parameter must be in
UPPER CASE. For more information, see Example 2 under Type 2 CONNECT.</p>
<p>For more information about implicit connect, refer to the <a href="../sqlp/rbafykickoff.htm">SQL Programming</a> book. Once a connection to a relational database for a
user profile is established, the password, if specified, may not be validated
again on subsequent connections to the same relational database with the same
user profile. Revalidation of the password depends on if the conversation
is still active. See the <a href="../ddp/rbal1kickoff.htm">Distributed Database Programming</a> book for more details.</p>
<p><span class="bold">Connection states:</span> For a description of connection
states, see <a href="rbafzmstch2drda.htm#ruwcnst">Remote unit of work connection management</a>. Consecutive CONNECT statements
can be executed successfully because CONNECT does not remove the activation
group from the connectable state.</p>
<p>A CONNECT to either a current or dormant connection in the application
group is executed as follows: </p>
<ul>
<li>If the connection identified by the server-name was established using
a CONNECT (Type 1) statement, then no action is taken. Cursors are not closed,
prepared statements are not destroyed, and locks are not released.</li>
<li>If the connection identified by the server-name was established using
a CONNECT (Type 2) statement, then the CONNECT statement is executed like
any other CONNECT statement.</li></ul>
<p>CONNECT cannot execute successfully when it is preceded by any SQL statement
other than CONNECT, COMMIT, DISCONNECT, SET CONNECTION, RELEASE, or ROLLBACK.
To avoid an error, execute a commit or rollback operation before a CONNECT
statement is executed.</p>
<p>If any previous current or dormant connections were established using protected
conversations, then the CONNECT (Type 1) statement will fail. Either, a CONNECT
(Type 2) statement must be used, or the connections using protected conversations
must be ended by releasing the connections and successfully committing.</p>
<p>For more information about connecting to a remote relational database and
the local directory, see the <a href="../sqlp/rbafykickoff.htm">SQL Programming</a> book and
the <a href="../ddp/rbal1kickoff.htm">Distributed Database Programming</a> book.</p>
<p><span class="bold">SET SESSION AUTHORIZATION:</span> If a SET SESSION
AUTHORIZATION statement has been executed in the thread, a CONNECT to the
local server will fail unless prior to the connect statement, the SYSTEM_USER
value is the same as SESSION_USER.</p>
<p>This incudes an implicit connect due to invoking a program that
specifies ACTGRP(*NEW).</p>
<a name="wq1164"></a>
<h3 id="wq1164"><a href="rbafzmst02.htm#ToC_829">Examples</a></h3>
<p><span class="italic">Example 1:</span> In a C program, connect to the application
server TOROLAB. </p>
<pre class="xmp"> EXEC SQL <span class="bold">CONNECT TO</span> TOROLAB;</pre>
<p><span class="italic">Example 2:</span> In a C program, connect to an application
server whose name is stored in the variable APP_SERVER (VARCHAR(18)). Following
a successful connection, copy the product identifier of the application server
to the variable PRODUCT. </p>
<pre class="xmp"> void main ()
{
char product[9] = " ";
EXEC SQL <span class="bold">BEGIN DECLARE SECTION</span>;
char APP_SERVER[19];
char username[11];
char userpass[129];
EXEC SQL <span class="bold">END DECLARE SECTION</span>;
EXEC SQL <span class="bold">INCLUDE SQLCA</span>;
strcpy(APP_SERVER,"TOROLAB");
strcpy(username,"JOE");
strcpy(userpass,"XYZ1";
EXEC SQL <span class="bold">CONNECT TO</span> :APP_SERVER
<span class="bold">USER</span> :username <span class="bold">USING</span> :userpass;
if (strncmp(SQLSTATE, "00000", 5) )
{ EXEC SQL <span class="bold">GET DIAGNOSTICS CONDITION</span> 1
product = <span class="bold">DB2_PRODUCT_ID</span>; }
...
return;
}</pre><a id="idx1575" name="idx1575"></a><a id="idx1576" name="idx1576"></a>
<hr /><div class="fnnum"><a id="fn001" name="fn001">63</a>.</div>
<div class="fntext">To reduce the possibility of confusion between network
connections and SQL connections, in this book the term 'conversation' will
be used to apply to network connections over TCP/IP as well as over APPC,
even though it formally applies only to APPC connections.</div>
<br />
<hr /><br />
[ <a href="#Top_Of_Page">Top of Page</a> | <a href="rbafzmstc4comit.htm">Previous Page</a> | <a href="rbafzmstcon2t.htm">Next Page</a> | <a href="rbafzmst02.htm#wq1">Contents</a> |
<a href="rbafzmstindex.htm#index">Index</a> ]
<a id="Bot_Of_Page" name="Bot_Of_Page"></a>
</body>
</html>