<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML ><HEAD ><TITLE >ECPG - Embedded SQL in C</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK REV="MADE" HREF="mailto:pgsql-docs@postgresql.org"><LINK REL="HOME" TITLE="PostgreSQL 8.0.11 Documentation" HREF="index.html"><LINK REL="UP" TITLE="Client Interfaces" HREF="client-interfaces.html"><LINK REL="PREVIOUS" TITLE="Example Program" HREF="lo-examplesect.html"><LINK REL="NEXT" TITLE="Connecting to the Database Server" HREF="ecpg-connect.html"><LINK REL="STYLESHEET" TYPE="text/css" HREF="stylesheet.css"><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1"><META NAME="creation" CONTENT="2007-02-02T03:57:22"></HEAD ><BODY CLASS="CHAPTER" ><DIV CLASS="NAVHEADER" ><TABLE SUMMARY="Header navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="5" ALIGN="center" VALIGN="bottom" >PostgreSQL 8.0.11 Documentation</TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="top" ><A HREF="lo-examplesect.html" ACCESSKEY="P" >Prev</A ></TD ><TD WIDTH="10%" ALIGN="left" VALIGN="top" ><A HREF="largeobjects.html" >Fast Backward</A ></TD ><TD WIDTH="60%" ALIGN="center" VALIGN="bottom" ></TD ><TD WIDTH="10%" ALIGN="right" VALIGN="top" ><A HREF="information-schema.html" >Fast Forward</A ></TD ><TD WIDTH="10%" ALIGN="right" VALIGN="top" ><A HREF="ecpg-connect.html" ACCESSKEY="N" >Next</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><DIV CLASS="CHAPTER" ><H1 ><A NAME="ECPG" ></A >Chapter 29. <SPAN CLASS="APPLICATION" >ECPG</SPAN > - Embedded <ACRONYM CLASS="ACRONYM" >SQL</ACRONYM > in C</H1 ><DIV CLASS="TOC" ><DL ><DT ><B >Table of Contents</B ></DT ><DT >29.1. <A HREF="ecpg.html#ECPG-CONCEPT" >The Concept</A ></DT ><DT >29.2. <A HREF="ecpg-connect.html" >Connecting to the Database Server</A ></DT ><DT >29.3. <A HREF="ecpg-disconnect.html" >Closing a Connection</A ></DT ><DT >29.4. <A HREF="ecpg-commands.html" >Running SQL Commands</A ></DT ><DT >29.5. <A HREF="ecpg-set-connection.html" >Choosing a Connection</A ></DT ><DT >29.6. <A HREF="ecpg-variables.html" >Using Host Variables</A ></DT ><DD ><DL ><DT >29.6.1. <A HREF="ecpg-variables.html#AEN25305" >Overview</A ></DT ><DT >29.6.2. <A HREF="ecpg-variables.html#AEN25313" >Declare Sections</A ></DT ><DT >29.6.3. <A HREF="ecpg-variables.html#AEN25329" ><TT CLASS="COMMAND" >SELECT INTO</TT > and <TT CLASS="COMMAND" >FETCH INTO</TT ></A ></DT ><DT >29.6.4. <A HREF="ecpg-variables.html#AEN25347" >Indicators</A ></DT ></DL ></DD ><DT >29.7. <A HREF="ecpg-dynamic.html" >Dynamic SQL</A ></DT ><DT >29.8. <A HREF="ecpg-descriptors.html" >Using SQL Descriptor Areas</A ></DT ><DT >29.9. <A HREF="ecpg-errors.html" >Error Handling</A ></DT ><DD ><DL ><DT >29.9.1. <A HREF="ecpg-errors.html#AEN25480" >Setting Callbacks</A ></DT ><DT >29.9.2. <A HREF="ecpg-errors.html#AEN25561" >sqlca</A ></DT ><DT >29.9.3. <A HREF="ecpg-errors.html#AEN25607" ><TT CLASS="LITERAL" >SQLSTATE</TT > vs <TT CLASS="LITERAL" >SQLCODE</TT ></A ></DT ></DL ></DD ><DT >29.10. <A HREF="ecpg-include.html" >Including Files</A ></DT ><DT >29.11. <A HREF="ecpg-process.html" >Processing Embedded SQL Programs</A ></DT ><DT >29.12. <A HREF="ecpg-library.html" >Library Functions</A ></DT ><DT >29.13. <A HREF="ecpg-develop.html" >Internals</A ></DT ></DL ></DIV ><A NAME="AEN25130" ></A ><A NAME="AEN25133" ></A ><A NAME="AEN25135" ></A ><P > This chapter describes the embedded <ACRONYM CLASS="ACRONYM" >SQL</ACRONYM > package for <SPAN CLASS="PRODUCTNAME" >PostgreSQL</SPAN >. It was written by Linus Tolke (<CODE CLASS="EMAIL" ><<A HREF="mailto:linus@epact.se" >linus@epact.se</A >></CODE >) and Michael Meskes (<CODE CLASS="EMAIL" ><<A HREF="mailto:meskes@postgresql.org" >meskes@postgresql.org</A >></CODE >). Originally it was written to work with <ACRONYM CLASS="ACRONYM" >C</ACRONYM >. It also works with <ACRONYM CLASS="ACRONYM" >C++</ACRONYM >, but it does not recognize all <ACRONYM CLASS="ACRONYM" >C++</ACRONYM > constructs yet. </P ><P > This documentation is quite incomplete. But since this interface is standardized, additional information can be found in many resources about SQL. </P ><DIV CLASS="SECT1" ><H1 CLASS="SECT1" ><A NAME="ECPG-CONCEPT" >29.1. The Concept</A ></H1 ><P > An embedded SQL program consists of code written in an ordinary programming language, in this case C, mixed with SQL commands in specially marked sections. To build the program, the source code is first passed through the embedded SQL preprocessor, which converts it to an ordinary C program, and afterwards it can be processed by a C compiler. </P ><P > Embedded <ACRONYM CLASS="ACRONYM" >SQL</ACRONYM > has advantages over other methods for handling <ACRONYM CLASS="ACRONYM" >SQL</ACRONYM > commands from C code. First, it takes care of the tedious passing of information to and from variables in your <ACRONYM CLASS="ACRONYM" >C</ACRONYM > program. Second, the SQL code in the program is checked at build time for syntactical correctness. Third, embedded <ACRONYM CLASS="ACRONYM" >SQL</ACRONYM > in C is specified in the <ACRONYM CLASS="ACRONYM" >SQL</ACRONYM > standard and supported by many other <ACRONYM CLASS="ACRONYM" >SQL</ACRONYM > database systems. The <SPAN CLASS="PRODUCTNAME" >PostgreSQL</SPAN > implementation is designed to match this standard as much as possible, and it is usually possible to port embedded <ACRONYM CLASS="ACRONYM" >SQL</ACRONYM > programs written for other SQL databases to <SPAN CLASS="PRODUCTNAME" >PostgreSQL</SPAN > with relative ease. </P ><P > As already stated, programs written for the embedded <ACRONYM CLASS="ACRONYM" >SQL</ACRONYM > interface are normal C programs with special code inserted to perform database-related actions. This special code always has the form </P><PRE CLASS="PROGRAMLISTING" >EXEC SQL ...;</PRE ><P> These statements syntactically take the place of a C statement. Depending on the particular statement, they may appear at the global level or within a function. Embedded <ACRONYM CLASS="ACRONYM" >SQL</ACRONYM > statements follow the case-sensitivity rules of normal <ACRONYM CLASS="ACRONYM" >SQL</ACRONYM > code, and not those of C. </P ><P > The following sections explain all the embedded SQL statements. </P ></DIV ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE SUMMARY="Footer navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="lo-examplesect.html" ACCESSKEY="P" >Prev</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="index.html" ACCESSKEY="H" >Home</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="ecpg-connect.html" ACCESSKEY="N" >Next</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >Example Program</TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="client-interfaces.html" ACCESSKEY="U" >Up</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >Connecting to the Database Server</TD ></TR ></TABLE ></DIV ></BODY ></HTML >