<simpara>
<literal><replaceable>connection-name</replaceable></literal>
</simpara>
</listitem>
<listitem>
<simpara>
<literal>CURRENT</literal>
</simpara>
</listitem>
<listitem>
<simpara>
<literal>ALL</literal>
</simpara>
</listitem>
</itemizedlist>
If no connection name is specified, the current connection is
closed.
</para>
<para>
It is good style that an application always explicitly disconnect
from every connection it opened.
</para>
</sect2>
</sect1>
<sect1 id="ecpg-commands">
<title>Running SQL Commands</title>
<para>
Any SQL command can be run from within an embedded SQL application.
Below are some examples of how to do that.
</para>
<sect2 id="ecpg-executing">
<title>Executing SQL Statements</title>
<para>
Creating a table:
<programlisting>
EXEC SQL CREATE TABLE foo (number integer, ascii char(16));
EXEC SQL CREATE UNIQUE INDEX num1 ON foo(number);
EXEC SQL COMMIT;
</programlisting>
</para>
<para>
Inserting rows:
<programlisting>
EXEC SQL INSERT INTO foo (number, ascii) VALUES (9999, 'doodad');
EXEC SQL COMMIT;
</programlisting>
</para>
<para>
Deleting rows:
<programlisting>
EXEC SQL DELETE FROM foo WHERE number = 9999;
EXEC SQL COMMIT;
</programlisting>
</para>
<para>
Updates:
<programlisting>
EXEC SQL UPDATE foo
SET ascii = 'foobar'
WHERE number = 9999;
EXEC SQL COMMIT;
</programlisting>
</para>
<para>
<literal>SELECT</literal> statements that return a single result
row can also be executed using
<literal>EXEC SQL</literal> directly. To handle result sets with
multiple rows, an application has to use a cursor;
see <xref linkend="ecpg-cursors"/> below. (As a special case, an
application can fetch multiple rows at once into an array host
variable; see <xref linkend="ecpg-variables-arrays"/>.)
</para>
<para>
Single-row select:
<programlisting>
EXEC SQL SELECT foo INTO :FooBar FROM table1 WHERE ascii = 'doodad';
</programlisting>
</para>
<para>
Also, a configuration parameter can be retrieved with the
<literal>SHOW</literal> command:
<programlisting>
EXEC SQL SHOW search_path INTO :var;
</programlisting>
</para>
<para>
The tokens of the form
<literal>:<replaceable>something</replaceable></literal> are
<firstterm>host variables</firstterm>, that is, they refer to
variables in the C program. They are explained in <xref
linkend="ecpg-variables"/>.
</para>
</sect2>
<sect2 id="ecpg-cursors">
<title>Using Cursors</title>
<para>
To retrieve a result set holding multiple rows, an application has
to declare a cursor and fetch each row from the cursor. The steps
to use a cursor are the following: declare a cursor, open it, fetch
a row from the cursor, repeat, and finally close it.
</para>
<para>
Select using cursors:
<programlisting>
EXEC SQL DECLARE foo_bar CURSOR FOR
SELECT number, ascii FROM foo
ORDER BY ascii;
EXEC SQL OPEN foo_bar;
EXEC SQL FETCH foo_bar INTO :FooBar, DooDad;
...
EXEC SQL CLOSE foo_bar;
EXEC SQL COMMIT;
</programlisting>
</para>
<para>
For more details about declaring a cursor, see <xref
linkend="ecpg-sql-declare"/>; for more details about fetching rows from a
cursor, see <xref linkend="sql-fetch"/>.
</para>
<note>
<para>
The ECPG <command>DECLARE</command> command does not actually
cause a statement to be sent to the PostgreSQL backend. The
cursor is opened in the backend (using the
backend's <command>DECLARE</command> command) at the point when
the <command>OPEN</command> command is executed.
</para>
</note>
</sect2>
<sect2 id="ecpg-transactions">
<title>Managing Transactions</title>
<para>
In the default mode, statements are committed only when
<command>EXEC SQL COMMIT</command> is issued. The embedded SQL
interface also supports autocommit of transactions (similar to