📄 esql-c资料(完全版)四_unix_操作系统_网络学院_天新网.htm
字号:
src="ESQL-C资料(完全版)四_Unix_操作系统_网络学院_天新网.files/search5.gif" border=0>
</TD></TR></FORM></TBODY></TABLE></TD>
<TD background=ESQL-C资料(完全版)四_Unix_操作系统_网络学院_天新网.files/menubg.gif
height=25><TABLE cellSpacing=0 cellPadding=0 width="100%" align=center
border=0>
<TBODY>
<TR>
<TD align=middle height=2></TD></TR>
<TR>
<TD align=middle><SPAN
id=ad_search_right></SPAN></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></SPAN>
<TABLE cellSpacing=0 cellPadding=0 width=760 align=center border=0>
<TBODY>
<TR>
<TD class=mainbgcolor align=middle height=2></TD></TR></TBODY></TABLE><SPAN
id=txsite_smallcolumnmenu>
<TABLE cellSpacing=0 cellPadding=0 width=760 align=center border=0>
<TBODY>
<TR>
<TD class=mainbgcolor width=6></TD>
<TD
style="BORDER-RIGHT: #cccccc 1px solid; BORDER-TOP: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; BORDER-BOTTOM: #cccccc 1px solid"
vAlign=center bgColor=#666666 height=25> <A
href="http://school.21tx.com/os/win9x/"><FONT
color=#ffffff>Windows9x</FONT></A><FONT color=#ffffff> | </FONT><A
href="http://school.21tx.com/os/win2000/"><FONT
color=#ffffff>Win2000</FONT></A><FONT color=#ffffff> | </FONT><A
href="http://school.21tx.com/os/winxp/"><FONT
color=#ffffff>WindowsXP</FONT></A><FONT color=#ffffff> | </FONT><A
href="http://school.21tx.com/os/win2003/"><FONT
color=#ffffff>Windows2003</FONT></A><FONT color=#ffffff> | </FONT><A
href="http://school.21tx.com/os/longhorn/"><FONT
color=#ffffff>Vista</FONT></A><FONT color=#ffffff> | </FONT><A
href="http://school.21tx.com/os/dos/"><FONT
color=#ffffff>Dos</FONT></A><FONT color=#ffffff> | </FONT><A
href="http://school.21tx.com/os/app/"><FONT
color=#ffffff>Windows</FONT></A><FONT color=#ffffff> | </FONT><A
href="http://school.21tx.com/os/linux/"><FONT
color=#ffffff>Linux</FONT></A><FONT color=#ffffff> | </FONT><A
href="http://school.21tx.com/os/unix/"><FONT
color=#ffcc00>Unix</FONT></A><FONT color=#ffffff> | </FONT><A
href="http://school.21tx.com/os/freebsd/"><FONT
color=#ffffff>FreeBSD</FONT></A><FONT color=#ffffff> | </FONT><A
href="http://school.21tx.com/os/solaris/"><FONT
color=#ffffff>Solaris</FONT></A><FONT color=#ffffff> | </FONT><A
href="http://school.21tx.com/os/macos/"><FONT
color=#ffffff>MaxOS</FONT></A><FONT color=#ffffff> | </FONT><A
href="http://school.21tx.com/os/aix/"><FONT
color=#ffffff>AIX</FONT></A><FONT color=#ffffff> | </FONT></TD>
<TD class=mainbgcolor width=6></TD></TR></TBODY></TABLE></SPAN>
<TABLE cellSpacing=0 cellPadding=0 width=760 align=center border=0>
<TBODY>
<TR>
<TD class=mainbgcolor width=6></TD>
<TD style="BORDER-LEFT: #cccccc 1px solid" vAlign=top align=middle
bgColor=#ffffff>
<TABLE cellSpacing=0 cellPadding=0 width="100%">
<TBODY>
<TR>
<TD colSpan=2 height=3></TD></TR>
<TR>
<TD width="2%"><IMG height=22
src="ESQL-C资料(完全版)四_Unix_操作系统_网络学院_天新网.files/dline.gif" width=19></TD>
<TD width="98%"
background=ESQL-C资料(完全版)四_Unix_操作系统_网络学院_天新网.files/dline02.htm>
您现在的位置:<A href="http://www.21tx.com/">天新网</A> > <A
href="http://school.21tx.com/">网络学院</A> > <A
href="http://school.21tx.com/os/">操作系统</A> > <A
href="http://school.21tx.com/os/unix/">Unix</A> </TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=6 width="98%"
background=ESQL-C资料(完全版)四_Unix_操作系统_网络学院_天新网.files/data_title_bg.gif
border=0>
<TBODY>
<TR>
<TD align=middle><FONT class=f18
color=#339900><B>ESQL/C资料(完全版)四</B></FONT></TD></TR>
<TR>
<TD align=middle>http://school.21tx.com 2005年03月13日 <FONT
color=#a20010></FONT></TD></TR></TBODY></TABLE>
<P align=center><SPAN id=txsite_ad_cnt_top1></SPAN><SPAN
id=txsite_ad_cnt_top2>
<TABLE cellSpacing=0 cellPadding=0 width=468 align=center border=0>
<TBODY>
<TR>
<TD height=6></TD></TR>
<TR>
<TD
style="BORDER-RIGHT: #cccccc 1px solid; BORDER-TOP: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; BORDER-BOTTOM: #cccccc 1px solid"
align=middle width=468>
<SCRIPT type=text/javascript>
var arrBaiduCproConfig=new Array();
arrBaiduCproConfig['uid'] = 111945;
arrBaiduCproConfig['n'] = 'txadcpr';
arrBaiduCproConfig['tm'] = 30;
arrBaiduCproConfig['cm'] = 68;
arrBaiduCproConfig['um'] = 34;
arrBaiduCproConfig['rad'] = 1;
arrBaiduCproConfig['w'] = 468;
arrBaiduCproConfig['h'] = 60;
arrBaiduCproConfig['bd'] = '#ffffff';
arrBaiduCproConfig['bg'] = '#ffffff';
arrBaiduCproConfig['tt'] = '#0000ff';
arrBaiduCproConfig['ct'] = '#000000';
arrBaiduCproConfig['url'] = '#666666';
arrBaiduCproConfig['bdl'] = '#ffffff';
arrBaiduCproConfig['wn'] = 2;
arrBaiduCproConfig['hn'] = 1;
arrBaiduCproConfig['ta'] = 'right';
arrBaiduCproConfig['tl'] = 'bottom';
arrBaiduCproConfig['bu'] = 0;
</SCRIPT>
<SCRIPT src="ESQL-C资料(完全版)四_Unix_操作系统_网络学院_天新网.files/ui.js"
type=text/javascript>
</SCRIPT>
<SCRIPT type=text/javascript>
<!--
document.write(baiduCproIFrame());
-->
</SCRIPT>
</TD></TR>
<TR>
<TD height=6></TD></TR></TBODY></TABLE></SPAN><SPAN
id=txsite_ad_cnt_top3></SPAN></P>
<TABLE id=txsite_content cellSpacing=0 cellPadding=0 width="98%"
border=0><TBODY>
<TR>
<TD class=content><SPAN id=txsite_ad_cnt_start></SPAN>
<P class=line-height><BR>5.3
嵌入SQL的处理过程<BR>INFORMIX的预编译器为esql。嵌入SQL包含一些组件:嵌入SQL的库文件,提供访问数据库<A
href="http://www.21tx.com/server/"
target=_blank>服务器</A>、操作各种数据类型、出错信息的处理等函数。嵌入SQL的头文件(<A
href="http://school.21tx.com/os/unix/"
target=_blank>Unix</A>环境:$INFORMIXDIR/incl/esql下,<A
href="http://school.21tx.com/os/windows/"
target=_blank>Windows</A>环境:%INFORMIXDIR%\incl\esql下),提供程序用的数据结构、常数和宏的定义信息。Esql是预编译器。UNIX系统下,是finderr程序获得INFORMIX的错误信息,WINDOWS平台下是find
error获得错误信息。还有一些GLS
locale文件,提供一些特定的locale信息。在WINDOWS平台下,还有另外一些文件,如:setnet32、ilogin、regcopy、esqlmf程序。<BR>创建嵌入SQL/C的程序的一般步骤:程序的后缀可以是.ec或.ecp。<BR>1、定义宿主变量。<BR>2、访问数据库。<BR>3、操作。<BR>4、完成后,使用esql命令来预编译。如:esql
demo1.ec。在预编译后,程序中只有C语言语句,它们都可以为C语言的编译器所识别。所以,可以按照一般的方法进行编译和连接,但在将SQL语句转换以后,在C语言程序中,又引入了许多一般的C语言系统所没有的结构、变量和函数,因此应该设置INCLUDE和LIB的设置。最后生成的可执行文件。<BR>5.4
动态SQL语言<BR>所谓静态SQL的编程方法,就是指在预编译时SQL语句已经基本确定,即访问的表或视图名、访问的列等信息已经确定。但是,有时整个SQL语句要到执行的时候才能确定下来,而且SQL语句所访问的对象也要到执行时才能确定。这就需要通过动态SQL语句完成。动态SQL语句的处理步骤是:<BR>1、组合SQL语句。<BR>2、PREPARE。PREPARE语句是动态SQL语句独有的语句。其语法为:<BR>PREPARE
语句名 FROM
宿主变量|字符串<BR>该语句接收含有SQL语句串的宿主变量,并把该语句送到DBMS。DBMS编译语句并生成执行计划。在语句串中包含一个“?”表明参数,当执行语句时,DBMS需要参数来替代这些“?”。PREPRARE执行的结果是,DBMS用语句名标志编译后的语句。在执行SQL语句时,EXECUTE语句后面是这个语句名。请看下面这个例子:<BR>EXEC
SQL prepare slct_id from <BR>'select company from customer where
customer_num =
?';<BR>可以通过SQLCA检查PREPARE操作是否成功。<BR>3、EXECUTE或OPEN。<BR>EXECUTE语句的语法如下:<BR>EXECUTE
语句名 USING 宿主变量 | DESCRIPTOR
描述符名<BR>它的作用是,请求DBMS执行PREPARE语句准备好的语句。当要执行的动态语句中包含一个或多个参数标志时,在EXECUTE语句必须为每一个参数提供值。这样的话,EXECUTE语句用宿主变量值逐一代替准备语句中的参数标志(“?”),从而,为动态执行语句提供了输入值。<BR>如果是多行查询,则使用游标,使用OPEN
USING语句传递参数;如果是单行查询,则使用SELECT INTO。如果是修改数据:则使用EXECUTE
USING语句。如果知道参数个数,就可以使用宿主变量。如果不知道参数个数,则必须使用DESCRIBE语句。下表总结了动态SQL语句的处理方法:<BR>语句类型是否有输入参数执行的方法<BR>INSERT、DELETE、UPDATE没有EXECUTE<BR>INSERT、DELETE、UPDATE有(数据类型和个数确定)EXECUTE
…USING<BR>INSERT、DELETE、UPDATE有(数据类型和个数不确定)EXECUTE...USINGSQL
DESCRIPTOR或EXECUTE...USINGDESCRIPTOR<BR>SELECT(返回多行)无OPEN<BR>SELECT(返回多行)有(数据类型和个数确定)OPEN…USING<BR>SELECT(返回多行)有(数据类型和个数不确定)OPEN...USINGSQL
DESCRIPTOR或OPEN...USINGDESCRIPTOR<BR>SELECT(返回一行)无EXECUTE...INTO<BR>SELECT(返回一行,但是返回的数据类型和个数不确定)无EXECUTE...INTODESCRIPTOR或EXECUTE...INTOSQL
DESCRIPTOR<BR>SELECT(返回一行)有EXECUTE...INTO...USING<BR>SELECT(返回一行,但是返回的数据类型和个数不确定)有EXECUTE...INTO...USING
SQLDESCRIPTOR或EXECUTE...INTO...USINGDESCRIPTOR
<P>4、释放资源。<BR>5.4.1
SQLDA<BR>可以通过SQLDA为嵌入SQL语句提供输入数据和从嵌入SQ语句中输出数据。理解SQLDA的结构是理解动态SQL的关键。<BR>我们知道,动态SQL语句在编译时可能不知道有多少列信息。在嵌入SQL语句中,这些不确定的数据是通过SQLDA完成的。SQLDA的结构非常灵活,在该结构的固定部分,指明了多少列等信息(如下图中的sqld=2,表示为两列信息),在该结构的后面,有一个可变长的结构(SQLVAR结构),说明每列的信息。<BR>
<P>SQLDA结构<BR>Sqld=2<BR>sqlvar<BR>Desc_name<BR>Desc_occ<BR>Desc_next
<P><BR><BR>Sqltype=500<BR>Sqllen<BR>sqldata<BR>…..<BR><BR>Sqltype=501<BR>Sqllen<BR>Sqldata<BR>…..
<P>图6-6 SQLDA结构示例<BR>具体SQLDA的结构在sqlda.h中定义,是:<BR>struct
sqlvar_struct<BR>{<BR>short sqltype;/* variable type*/<BR>short
sqllen;/* length in bytes*/<BR>char *sqldata;/* pointer to
data*/<BR>short *sqlind;/* pointer to indicator*/<BR>char
*sqlname;/* variable name*/<BR>char *sqlformat;/* reserved for
future use */<BR>short sqlitype;/* ind variable type*/<BR>short
sqlilen;/* ind length in bytes*/<BR>char *sqlidata;/* ind data
pointer*/<BR>};
<P>struct sqlda<BR>{<BR>short sqld;<BR>struct sqlvar_struct
*sqlvar;<BR>char desc_name[19];/* descriptor name */<BR>short
desc_occ;/* size of sqlda structure */<BR>struct sqlda *desc_next;/*
pointer to next sqlda struct */<BR>};
<P>#endif /* _SQLDA
*/<BR>从上面这个定义看出,SQLDA是一种由三个不同部分组成的可变长数据结构。位于SQLDA开端的sqldaid用于标志该SQLDA描述了多少列的信息;而后是一个或多个sqlvar结构
,用于标志列数据。当用SQLDA把参数送到执行语句时,每一个参数都是一个sqlvar结构;当用SQLDA返回输出列信息时,每一列都是一个sqlvar结构。第三部分是SQLDA结构的描述信息部分。具体每个元素的含义为:<BR>lSqld。目前使用的sqlvar结构的个数。即输出列的个数。<BR>lSqlvar。指向sqlvar_struct结构。
即指向描述第一列信息的sqlvar结构。<BR>lDesc_name。Sqlda的名称。<BR>lDesc_occ。Sqlda结构的大小。<BR>lDesc_next。指向下一个SQLDA结构。<BR>lSqltype。代表参数或列的数据类型。它是一个整数数据类型代码。具体每个整数的含义见第二节。<BR>l
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -