﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-天涯浪子-文章分类-（二）C++高级部分——Pro*C部分</title><link>http://www.cppblog.com/junfeng568/category/1053.html</link><description>==&gt;&gt;多情总被无情伤，此生无情又何妨！ 红豆本是相思子，一寸相思一寸灰。此生不能续旧盟，必当续之于来生。</description><language>zh-cn</language><lastBuildDate>Mon, 19 May 2008 23:37:33 GMT</lastBuildDate><pubDate>Mon, 19 May 2008 23:37:33 GMT</pubDate><ttl>60</ttl><item><title>数组变量部分</title><link>http://www.cppblog.com/junfeng568/articles/3907.html</link><dc:creator>天涯浪子</dc:creator><author>天涯浪子</author><pubDate>Wed, 08 Mar 2006 11:55:00 GMT</pubDate><guid>http://www.cppblog.com/junfeng568/articles/3907.html</guid><wfw:comment>http://www.cppblog.com/junfeng568/comments/3907.html</wfw:comment><comments>http://www.cppblog.com/junfeng568/articles/3907.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/junfeng568/comments/commentRss/3907.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/junfeng568/services/trackbacks/3907.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 前面介绍的变量只能进行单个数据的操作,若所用的SQL语句的输出结果有许多时,这时候就<BR>可以用数组变量来存取.<BR>1.注意事项:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (1)Pro*C只支持一维数组,但char类型除外,它可以支持二维数组.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (2)Pro*C不支持数组指针.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (3)Pro*C所支持的最大维数是32767.<BR>2.数组变量的声明也声明成宿主变量的形式.如:<BR>&nbsp;&nbsp;&nbsp; EXEC SQL BEGIN DECLARE SECTION<BR>&nbsp;&nbsp;&nbsp; char&nbsp; pwd[50];<BR>&nbsp;&nbsp;&nbsp; char v_name[100];<BR>&nbsp;&nbsp;&nbsp; EXEC SQL END DECLARE SECTION<BR>3.如何在SQL语句中使用数组变量?<BR>&nbsp;只需要给出:和变量名称,不要个下标.通过SQL语句查出的数据会自动排列.<BR>&nbsp;EXEC SQL BEGIN DECLARE SECTION;<BR>&nbsp;char pwd[ 30 ] ;<BR>&nbsp;char v_l_name[ 100 ] ;<BR>&nbsp;short ind_l_name ;<BR>&nbsp;EXEC SQL END DECLARE SECTION;<BR>&nbsp;................................<BR>&nbsp;................................<BR>&nbsp;EXEC SQL select last_name <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INTO :v_l_name :ind_l_name<BR>&nbsp;&nbsp; from emp<BR>&nbsp;&nbsp; where id=1 ;<BR>&nbsp;&nbsp; <BR>&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 以下的例子是错误的 :<BR>&nbsp; for(int i=0;i&lt;100;i++)<BR>&nbsp; {<BR>&nbsp; &nbsp;EXEC SQL select last_name <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INTO :v_l_name[i] :ind_l_name[i]<BR>&nbsp;&nbsp;from emp<BR>&nbsp;&nbsp;where id=1 ; <BR>&nbsp; }<BR>4.指示变量也可以定义成数组,但元素数应大于或等于数组变量数.如下例子:<BR>&nbsp;EXEC SQL BEGIN DECLARE SECTION;<BR>&nbsp;int emp_number[100];<BR>&nbsp;short ind_emp_number[100];//此处的指示变量数不能少于数组变量数.<BR>&nbsp;char emp_name[100][15];<BR>&nbsp;EXEC SQL END DECLARE SECTION;<img src ="http://www.cppblog.com/junfeng568/aggbug/3907.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/junfeng568/" target="_blank">天涯浪子</a> 2006-03-08 19:55 <a href="http://www.cppblog.com/junfeng568/articles/3907.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>  指示变量</title><link>http://www.cppblog.com/junfeng568/articles/3881.html</link><dc:creator>天涯浪子</dc:creator><author>天涯浪子</author><pubDate>Tue, 07 Mar 2006 15:58:00 GMT</pubDate><guid>http://www.cppblog.com/junfeng568/articles/3881.html</guid><wfw:comment>http://www.cppblog.com/junfeng568/comments/3881.html</wfw:comment><comments>http://www.cppblog.com/junfeng568/articles/3881.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/junfeng568/comments/commentRss/3881.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/junfeng568/services/trackbacks/3881.html</trackback:ping><description><![CDATA[<P><BR><BR>1.指示变量用于处理数据库的NULL值,监督和管理与其相关联的宿主变量,是短整型变量(short).<BR><BR>2.一个指示变量只管理一个宿主变量,指示变量紧跟在宿主变量后面.<BR><BR>3.语法结构有两种方式:<BR>&nbsp;(1):host_variable INDICATOR :indicator_varible<BR>&nbsp;(2):host_variable : indicator_variable//习惯上常用此种方法<BR><BR>4.指示变量的作用:<BR>&nbsp;&nbsp;&nbsp; 主要用在输出,即当宿主变量用于接收数据库的返回数据时.通过在宿主变量后用指示变量,<BR>&nbsp;&nbsp;&nbsp; 检测是否返回了NULL.<BR>&nbsp;&nbsp;&nbsp; -1:表示数据库表列的值为NULL<BR>&nbsp;&nbsp;&nbsp; =0:将原值原封不动的赋给宿主变量.<BR>&nbsp;&nbsp;&nbsp; &gt;0:将数据库表列的值截断后赋给宿主变量,指示变量值为该列值的原始长度.<BR><BR>5.指示变量的例子如下:<BR>习惯上一般在声明宿主变量的时候在其前面加v_,在声明指示变量时候在其前面加ind_.<BR>#include &lt;iostream&gt;<BR>using namespace std;<BR>EXEC SQL INCLUDE SQLCA;</P>
<P>//声明宿主变量<BR>EXEC SQL BEGIN DECLARE SECTION;<BR>char pwd[ 30 ] ;<BR>char v_l_name[ 100 ] ;<BR>short ind_l_name ;<BR>EXEC SQL END DECLARE SECTION;</P>
<P>int main(){<BR>&nbsp;EXEC SQL WHENEVER SQLERROR STOP ;//说明对sqlerror的处理方式<BR>&nbsp;//连接数据库<BR>&nbsp;cout&lt;&lt;"enter username and passwd&gt;";<BR>&nbsp;cin&gt;&gt;pwd ;<BR>&nbsp;EXEC SQL CONNECT :pwd;<BR>&nbsp;cout&lt;&lt;"connect db using "&lt;&lt; pwd&lt;&lt;" ok."&lt;&lt;endl;</P>
<P>&nbsp;EXEC SQL select last_name <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; into :v_l_name :ind_l_name<BR>&nbsp;&nbsp; from emp<BR>&nbsp;&nbsp; where id=1 ;<BR>&nbsp;//通过指示变量来判断宿主变量的值是否为NULL,并进行输出处理.<BR>&nbsp;if( ind_l_name == -1 ){<BR>&nbsp;&nbsp;cout&lt;&lt;"-- NULL --" &lt;&lt; endl;<BR>&nbsp;}else if( ind_l_name &gt; 0 ){<BR>&nbsp;&nbsp;cout&lt;&lt; v_l_name &lt;&lt;"..."&lt;&lt; endl;<BR>&nbsp;}else{<BR>&nbsp;&nbsp;cout&lt;&lt;"last name=&gt;" &lt;&lt; v_l_name &lt;&lt; endl;<BR>&nbsp;}<BR>&nbsp;<BR>&nbsp;//完成SQL语句并释放内存.<BR>&nbsp;EXEC SQL COMMIT WORK RELEASE ;<BR>&nbsp;return 0 ;<BR>}</P><img src ="http://www.cppblog.com/junfeng568/aggbug/3881.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/junfeng568/" target="_blank">天涯浪子</a> 2006-03-07 23:58 <a href="http://www.cppblog.com/junfeng568/articles/3881.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>宿主变量</title><link>http://www.cppblog.com/junfeng568/articles/3862.html</link><dc:creator>天涯浪子</dc:creator><author>天涯浪子</author><pubDate>Tue, 07 Mar 2006 12:36:00 GMT</pubDate><guid>http://www.cppblog.com/junfeng568/articles/3862.html</guid><wfw:comment>http://www.cppblog.com/junfeng568/comments/3862.html</wfw:comment><comments>http://www.cppblog.com/junfeng568/articles/3862.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/junfeng568/comments/commentRss/3862.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/junfeng568/services/trackbacks/3862.html</trackback:ping><description><![CDATA[1.宿主变量是一种Pro*C语言变量,用于在应用程序中和oracle数据库之间传递数据,Pro*C程序中, <BR>&nbsp; 既可在SQL语句中引用,也可在C语句中引用的变量称为SQL变量.<BR>2.宿主变量一般定义在语句EXEC SQL BEGIN DECLARE SECTION和EXEC SQL <BR>&nbsp; END DECLARE SECTION之间.<BR>3.宿主变量的数据类型<BR>&nbsp;数据类型&nbsp;&nbsp;描述<BR>&nbsp;char&nbsp;&nbsp;单字符<BR>&nbsp;char[n]&nbsp;&nbsp;N个定长字符数组<BR>&nbsp;int&nbsp;&nbsp;整数<BR>&nbsp;short&nbsp;&nbsp;短整数<BR>&nbsp;long&nbsp;&nbsp;长整数<BR>&nbsp;float&nbsp;&nbsp;单精度浮点数<BR>&nbsp;double&nbsp;&nbsp;双精度浮点数<BR>&nbsp;VARCHAR[n]&nbsp;变长字符串<BR>4.宿主变量的使用<BR>&nbsp;若宿主变量在SQL语句中使用时,应在宿主变量前面加冒号(:).<BR>&nbsp;输入===&gt;将应用程序的数据传递到数据库中.<BR>&nbsp;&nbsp;int salary,emp_number;<BR>&nbsp;&nbsp;cin&gt;&gt;salary;cin&gt;&gt;emp_number;<BR>&nbsp;&nbsp;EXEC SQL update emp set sal=:salary where<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; empno=:emp_number;<BR>&nbsp;输出===&gt;将数据库中的数据传递到应用程序中.<BR>&nbsp;&nbsp;float v_salary;<BR>&nbsp;&nbsp;char v_job;<BR>&nbsp;&nbsp;EXEC SQL select sal,job INTO:v_salary,:v_job from emp<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; where empno=888;<BR>&nbsp;&nbsp;cout&lt;&lt;v_salary&lt;&lt;v_job;<BR>5.使用宿主变量的注意事项:<BR>&nbsp;&nbsp;&nbsp; (1)最好在begin 和end之间声明宿主变量<BR>&nbsp;&nbsp;&nbsp; (2)在DDL语句中不能使用宿主变量.下面的例子是错误的:<BR>&nbsp;&nbsp;&nbsp; char v_name[30];<BR>&nbsp;&nbsp;&nbsp; cin&gt;&gt;v_name;<BR>&nbsp;&nbsp;&nbsp; EXEC SQL DROP TABLE:v_name;&nbsp;&nbsp;<img src ="http://www.cppblog.com/junfeng568/aggbug/3862.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/junfeng568/" target="_blank">天涯浪子</a> 2006-03-07 20:36 <a href="http://www.cppblog.com/junfeng568/articles/3862.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Pro*C的预编译</title><link>http://www.cppblog.com/junfeng568/articles/3825.html</link><dc:creator>天涯浪子</dc:creator><author>天涯浪子</author><pubDate>Mon, 06 Mar 2006 11:45:00 GMT</pubDate><guid>http://www.cppblog.com/junfeng568/articles/3825.html</guid><wfw:comment>http://www.cppblog.com/junfeng568/comments/3825.html</wfw:comment><comments>http://www.cppblog.com/junfeng568/articles/3825.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/junfeng568/comments/commentRss/3825.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/junfeng568/services/trackbacks/3825.html</trackback:ping><description><![CDATA[<STRONG>5.Pro*C的预编译程序<BR></STRONG>&nbsp;目的:完成Pro*C源程序到纯C源程序的转换.<BR>&nbsp;常用的预编译选项:<BR>&nbsp;(1)INAME=path and filename(预编译文件的输入名字)<BR>&nbsp;(2)ONAME=path and filename(预编译文件的输出名字)<BR>&nbsp;(3)INCLUDE=path(头文件所在的路径)<BR>&nbsp;=====&gt;多个头文件表达INCLUDE=(路径名1,路径名2.......)<BR>&nbsp;(4)PARSE=FULL|PARTIA|NONE(default is FULL for C, Other&nbsp; is for C++)<BR>&nbsp;&nbsp;当为C++时一般用NONE.<BR>&nbsp;(5)CODE=ANSI_C|CPP(default is ANSI_C),当为C++时用CPP.<BR>&nbsp;(6)USERID=username/password<BR>&nbsp;(7)SQLCHECK 用于是否对SQL语法作检测.<img src ="http://www.cppblog.com/junfeng568/aggbug/3825.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/junfeng568/" target="_blank">天涯浪子</a> 2006-03-06 19:45 <a href="http://www.cppblog.com/junfeng568/articles/3825.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Pro*C的基本结构</title><link>http://www.cppblog.com/junfeng568/articles/3824.html</link><dc:creator>天涯浪子</dc:creator><author>天涯浪子</author><pubDate>Mon, 06 Mar 2006 11:44:00 GMT</pubDate><guid>http://www.cppblog.com/junfeng568/articles/3824.html</guid><wfw:comment>http://www.cppblog.com/junfeng568/comments/3824.html</wfw:comment><comments>http://www.cppblog.com/junfeng568/articles/3824.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/junfeng568/comments/commentRss/3824.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/junfeng568/services/trackbacks/3824.html</trackback:ping><description><![CDATA[<P><STRONG>3.下面从Pro*C的一个简单程序入手:</STRONG><BR>#include &lt;iostream&gt;<BR>using namespace std;<BR>EXEC SQL INCLUDE SQLCA;</P>
<P>EXEC SQL BEGIN DECLARE SECTION;<BR>char username[30];<BR>char password[20];<BR>char last_name[30];<BR>EXEC SQL END DECLARE SECTION;</P>
<P>void sqlerror();<BR>main()<BR>{<BR>&nbsp;EXEC SQL WHENEVER SQLERROR<BR>&nbsp;&nbsp;DO sqlerror();<BR>&nbsp;strcpy(username,"langzi");<BR>&nbsp;strcpy(password,"langzi");<BR>&nbsp;EXEC SQL CONNECT:username<BR>&nbsp;IDENTIFIED BY:password;<BR>&nbsp;EXEC SQL select LAST_NAME<BR>&nbsp;&nbsp;&nbsp; into:last_name from S_EMP where id=2;<BR>&nbsp;&nbsp;&nbsp; printf("\nID=2,last_name=%s\n",last_name);<BR>}<BR>void sqlerror()<BR>{<BR>&nbsp;EXEC SQL WHENEVER SQLERROR<BR>&nbsp;CONTINUE;<BR>&nbsp;&nbsp;printf("\n=&gt;oracle error detected:\n");<BR>&nbsp;&nbsp;printf("%.60s\n",sqlca.sqlerrm.sqlerrmc);<BR>&nbsp;EXEC SQL ROLLBACK WORK RELEASE;<BR>&nbsp;exit(1);<BR>}<BR><STRONG>4.从上面的程序简要看一下其结构:<BR></STRONG>&nbsp;&nbsp;&nbsp; (1)include头文件(包括c/c++和Pro*C/C++)<BR>&nbsp;&nbsp;&nbsp; (2)定义变量<BR>&nbsp;&nbsp;&nbsp; (3)定义函数<BR>&nbsp;&nbsp;&nbsp; (4)写主方法main<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 联接数据库:connect<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL操作语句:EXEC SQL..........;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exception<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 断开联接,释放连接:EXEC SQL COMMIT/ROLLBACK WORK RELEASE<BR></P><img src ="http://www.cppblog.com/junfeng568/aggbug/3824.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/junfeng568/" target="_blank">天涯浪子</a> 2006-03-06 19:44 <a href="http://www.cppblog.com/junfeng568/articles/3824.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Pro*C编程基础</title><link>http://www.cppblog.com/junfeng568/articles/3823.html</link><dc:creator>天涯浪子</dc:creator><author>天涯浪子</author><pubDate>Mon, 06 Mar 2006 11:42:00 GMT</pubDate><guid>http://www.cppblog.com/junfeng568/articles/3823.html</guid><wfw:comment>http://www.cppblog.com/junfeng568/comments/3823.html</wfw:comment><comments>http://www.cppblog.com/junfeng568/articles/3823.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/junfeng568/comments/commentRss/3823.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/junfeng568/services/trackbacks/3823.html</trackback:ping><description><![CDATA[1.什么是Pro*C/C++<BR>&nbsp;通过在过程化编程语言C/C++中嵌入SQL语句而开发出的应用程序.<BR>2.简要说明:<BR>&nbsp;在通用编程语言中使用的SQL称为嵌入式SQL.目的是Pro*C/C++将使<BR>&nbsp;C/C++成为访问数据库的工具.<img src ="http://www.cppblog.com/junfeng568/aggbug/3823.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/junfeng568/" target="_blank">天涯浪子</a> 2006-03-06 19:42 <a href="http://www.cppblog.com/junfeng568/articles/3823.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>