⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 5.html

📁 网上一个牛人整理的关于linux内核编译
💻 HTML
📖 第 1 页 / 共 4 页
字号:
9)重新设置占位符个数<p>
这一步是将DESCRIBE命令获取到的实际占位符个数设置为变量N的值。<p>
10)为绑定变量分配内存并输入数据<p>
如果存在绑定变量占位符,那么应用程序必须为其赋值并分配内存。<p>
11)打开游标<p>
12)使用DESCRIBE命令获取查询列表信息<p>
如果动态SQL语句是SELECT语句,我们还必须使用DESCRIBE SELECT LIST命令将查询列表项的信息存储到查询描述区中。另外需要注意两点:<p>
&nbsp;&nbsp;&nbsp; &middot;该命令将F设置为实际的查询列表数,如果SQL语句不是SELECT语句,则变量F被设置为0。<p>
&nbsp;&nbsp;&nbsp; &middot;NUMBER值长度不可用,必须使用函数sqlprc()获取精度和标度。<p>
13)重新设置查询列表项<p>
这一步用于将DESCRIBE命令获取到的实际查询列表项个数设置为查询列表项的最大个数。<p>
14)重新设置每个查询列表项的长度和数据类型<p>
在使用FETCH命令获取查询列表项数据前,为显示结果可能需要重新设置某些元素的长度和数据类型。<p>
15)利用FETCH命令检索数据<p>
执行此命令后,数据被存储到了查询描述区中。<p>
16)获取并处理查询列表值<p>
在执行了FETCH命令后,可以通过数组V和数组I中的元素来处理检索到的数据。<p>
17)关闭游标<p>
在推进游标、检索完数据后,执行如下命令关闭游标:<p>
EXEC SQLCLOSE s_cursor;<p>
18)释放空间使用函数free()释放由函数malloc()所分配的内存,使用函数sqlclu()释放为查询描述区以及绑定描述区所分配的空间<p>
<br>



<center><A HREF="#Content">[目录]</A></center>
<hr><br><A NAME="I227" ID="I227"></A><center><b><font size=+2>检测错误和状态改变</font></b></center><br>

在Pro*C/C++中,用于检测错误和状态改变的方法有如下两种:<p>
&nbsp;&nbsp;&nbsp; &middot;定义状态变量SQLSTATE或SQLCODE,在执行了SQL语句后检查它们的值,并根据需要执行相应的操作。<p>
&nbsp;&nbsp;&nbsp; &middot;使用SQLCA。SQLCA被定义在头文件sqlca.h中。<p>
在该程序中我们使用了SQLCA进行错误检测。关于SQLCA的详细描述请参阅第八章相关说明,这里不再累述。<p>
WHENEVER语句用于检测并处理错误,使用该语句的语法如下:<p>
EXEC SQL WHENEVER&lt;condition&gt;&lt;action&gt;<p>
1)条件(condition)<p>
Oracle可自动检测以下条件:<p>
&nbsp;&nbsp;&nbsp; &middot;SQLWORING:当Oracle返回警告信息时会设置sqlworn[0]为“W”。使用该条件必须定义SQLCA。<p>
&nbsp;&nbsp;&nbsp; &middot;SQLERROR:出现严重错误,此时SQLCODE为负值。<p>
&nbsp;&nbsp;&nbsp; &middot;NOT FOUND:当Oracle不能找到满足条件的记录时SQLCODE被置为+1403。<p>
2)操作(action)<p>
当Oracle检测到以上条件时,应用程序可以执行如下操作:<p>
&nbsp;&nbsp;&nbsp; &middot;CONTINUE:继续运行下一条语句。<p>
&nbsp;&nbsp;&nbsp; &middot;DO:执行错误处理函数。<p>
&nbsp;&nbsp;&nbsp; &middot;GOTO lable_name:转移到标号处执行。STOP:停止执行,回滚事务。<p>
<br>



<center><A HREF="#Content">[目录]</A></center>
<hr><br><A NAME="I228" ID="I228"></A><center><b><font size=+2>SQLCA</font></b></center><br>

SQLCA是一个数据结构,它的成员包含了SQL语句执行后的错误、警告和状态信息。在ORACLE_HOME\pro80\c\include目录下的sqlca.h文件中定义了SQLCA结构。<p>
使用如下语句可以将SQLCA包含到应用程序中:<p>
EXEC SQL INCLUDE SQLCA;<p>
或 #include&lt;sqlca.h&gt;<p>
其部分结构成员如下:<p>
&nbsp;&nbsp;&nbsp; &middot;sqlcaid:标识SQL通讯区的字符串成员,它被初始化为“SQLCA”。<p>
&nbsp;&nbsp;&nbsp; &middot;sqlcabc:整数成员,用于保存SQLCA的字节长度。<p>
&nbsp;&nbsp;&nbsp; &middot;sqlcode:整数成员,它保存着SQL语句执行后的状态代码。Sqlcode的值和含义见表8-1:<p>
<p>
<br>
Sqlcode的值<p>
含义<p>
<br>
0 执行SQL语句成功<p>
<br>
&gt;0 执行了该语句但检测到异常情况<p>
<br>
&lt;0 出现严重错误,语句没有执行<p>
&nbsp;&nbsp;&nbsp; &middot;sqlwarn:用于设置警告标记的单字符数组,通过赋“W”来设置警告标记。<p>
&nbsp;&nbsp;&nbsp; &middot;sqlerrm:包含了成员sqlerrml及sqlerrmc的一个结构,其中sqlerrml用于保存错误文本长度,sqlerrmc用于保存错误文本。<p>
Sqlerrmc最多可以保存70个字符的错误消息,使用函数sqlglm可以获得完整的错误消息文本,该函数的语法如下:<p>
voidsqlglm(char *message_buffer,size_t *buffer_size,size_t *message_lenth);<p>
参数说明如下:<p>
&nbsp;&nbsp;&nbsp; &middot;message_buffer:存储错误消息的文本缓冲区(尾部以空格填充)。<p>
&nbsp;&nbsp;&nbsp; &middot;buffer_size:缓冲区的字节长度。<p>
&nbsp;&nbsp;&nbsp; &middot;message_lenth:错误消息的实际长度。<p>
注意,调用该函数前必须确保SQLCODE或sqlca.sqlcode不等于0。该函数只能用于非线程应用。<p>
SQLCA中还包括其它结构成员,包括sqlerrp、sqlerrd、sqlext等,由于这些成员的作用相对次要或在程序中没有使用,故这里暂不作介绍。<p>
<p>
<br>



<center><A HREF="#Content">[目录]</A></center>
<hr><br><A NAME="I229" ID="I229"></A><center><b><font size=+2>SQLDA</font></b></center><br>

SQLDA结构的作用是处理和保存查询列表项以及宿主变量占位符的信息。<p>
当SQL语句所包含的查询列表项或绑定变量的个数不能确定时,我们就需要使用SQLDA结构来定义和描述查询列表项或绑定变量占位符。因此,该结构也被称为描述区,绑定变量列表所对应的绑定变量列表所对应的描述区就称为绑定描述区。<p>
SQLDA结构保存在ORACLE_HOME\pro80\include目录下的sqida.h文件中。利用如下语句可以将该结构包含至应用程序中:<p>
EXEC SQL INCLUDE sqlda;<p>
尔后还要定义指向查询描述区和绑定描述区的指针:<p>
SQLDA *bind_dp;<p>
SQLDA *selectdp;<p>
该结构的内容如下:<p>
struct SQLDA<br>
{<br>
long&nbsp;&nbsp; N;<br>
char&nbsp;&nbsp; **V;<br>
long&nbsp;&nbsp; *L;<br>
short&nbsp;&nbsp; *T;<br>
short&nbsp;&nbsp; **I;<br>
long&nbsp;&nbsp; F;<br>
char&nbsp;&nbsp; **S;<br>
short&nbsp;&nbsp; *M;<br>
short&nbsp;&nbsp; *C;<br>
char&nbsp;&nbsp; **X;<br>
short&nbsp;&nbsp; *Y;<br>
short&nbsp;&nbsp; *Z;<br>
};<p>
该结构的成员函数在动态SQL方法四中发挥着重要的作用,故在这里进行较详尽的介绍:<p>
&nbsp;&nbsp;&nbsp; &middot;变量N:<p>
变量N用于指定查询列表项或占位符的最大个数。在执行DESCRIBE命令前,必须将变量N设置为查询列表项或占位符的最大个数;在执行了DESCRIBE命令后,还必须将变量N设置为存储在变量F中的实际变量数。<p>
&nbsp;&nbsp;&nbsp; &middot;变量V:<p>
变量V是指向数据缓冲区地址数组的指针,该数据缓冲区用于存储查询列表项或绑定变量的值。当分配描述区时,函数sqlald()会将V[0]到V[N-1]设置为0。该函数语法如下:<p>
descriptor_name=sqlald(max_vars,max_name,max_ind_name);<p>
参数说明如下:<p>
&nbsp;&nbsp;&nbsp; &middot;max_vars:查询列表项或占位符的最大个数。<p>
&nbsp;&nbsp;&nbsp; &middot;max_name:查询列表项名称或占位符名称的最大长度。<p>
&nbsp;&nbsp;&nbsp; &middot;max_ind_name:占位符指示变量名称的最大长度。<p>
函数sqlald()只用于非线程应用。而如果要在线程应用中完成同样的功能,则需要使用函数sqlaldt()。另外,也可以使用SQLLIB的新函数SQLSQLDAAlloc(),该函数既可用于线程应用,又可用于非线程应用。<p>
对于查询描述区来说,在执行FETCH命令前必须为变量V分配内存。语句EXEC SQL FETCH…USINGDESCRIPTOR…将查询列表数据存储到了由V[0]到V[N-1]所指向的数据缓冲区中。其中,第i个值存储在V[i-1]所指向的数据缓冲区中。<p>
对于绑定描述区来说,在执行OPEN命令前必须为变量V分配内存。语句EXEC SQL OPEN…USINGDESCRIPTOR…将使用由V[0]到V[N-1]所指向的绑定变量值来执行动态SQL语句。其中,第i个绑定变量的值存储在V[i-1]所指向的数据缓冲区中。<p>
&nbsp;&nbsp;&nbsp; &middot;变量L:<p>
变量L是指向存储在数据缓冲区中的查询列表值或绑定变量值的长度数组的指针。<p>
对于查询描述区来说,DESCRIBESELECT LIST命令会将长度数组设置为每个查询列表项的最大长度。各种数据类型的长度是各不相同的。对于CHAR或VARCHAR2类型的查询列表项来说,DESCRIBE SELECT LIST将L[i]设置为查询列表项的最大长度;而对于NUMBER类型的查询列表项来说,分别被保存到了,通过调用函数sqlpre()可以从L[i]中读取到精度和标度值。函数sqlpre()的语法如下:<p>
sqlpre(long*length,int*precision,int*scale);<p>
该函数的原型在sqlcpr.h文件中。参数说明如下:<p>
&nbsp;&nbsp;&nbsp; &middot;length:指向存储NUMBER值长度的长整数变量的指针。对于变量L来说,长度被存储到L[i]中,而精度和标度分别存储在该变量的低字节和高字节中。<p>
&nbsp;&nbsp;&nbsp; &middot;precision:指向整数变量的指针,NUMBER值的精度返回到该变量中。<p>
&nbsp;&nbsp;&nbsp; &middot;scale: 指向整数变量的指针,NUMBER值的标度返回到该变量中。<p>
该函数只能用于非线程应用。而如果要在线程应用中完成同样功能,则需要使用函数sqlprct()。另外,也可以使用SQLLIB的新函数SQLNumberProV6(),该函数既可用于线程应用又可用于非线程应用。<p>
在执行FETCH命令前,还必须设置L[i]。例如,当将NUMBER值转换为char类型时,应该将L[i]设置为精度加二(也即数字位数+符号位+小数点);而当将NUMBER值转换为float类型时,应该将L[i]设置为浮点数的长度。<p>
对于绑定描述区来说,在执行OPEN命令前必须设置变量L。例如,我们可以通过使用函数strlen()获得绑定变量字符串的长度,尔后将变量L设置为该长度值。<p>
&nbsp;&nbsp;&nbsp; &middot;变量T:<p>
变量T是指向查询列表值或绑定变量值的数据类型代码数组的指针,这些数组类型代码确定了如何进行数据类型转换。<p>
下面列出了Oracle内部数据类型所对应的代码:<p>
Oracle内部数据类型 数据类型代码<p>
VARCHAR2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1<br>
NUMBER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2<br>
LONG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8<br>
ROWID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11<br>
DATE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 12<br>
RAW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 23<br>
LONG ROW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 24<br>
CHARTER(或VHAR)&nbsp; 96<br>
MISLABLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 106<p>
下面列出了Oracle外部数据类型所对应的代码以及C数据类型:<p>
<br>
Oracle内部数据类型 数据类型代码 C数据类型<br>
VARCHAR2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char[n]<br>
NUMBER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char[n](n 22)<br>
INTEGER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int<br>
FLOAT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; float<br>
STRING&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Float char[n+1]<br>
VARNUM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char[n](n 22)<br>
DECIMAL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; float<br>
LONG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char[n]<br>
VARCHAR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char[n+2]<br>
ROWID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char[n]<br>
DATE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char[n]<br>
VARRAW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char[n]<br>
RAW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned Char[n]<br>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -