Tienon数据库培训教程嵌入式SQL编程_第1页
Tienon数据库培训教程嵌入式SQL编程_第2页
Tienon数据库培训教程嵌入式SQL编程_第3页
Tienon数据库培训教程嵌入式SQL编程_第4页
Tienon数据库培训教程嵌入式SQL编程_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、萨椭肾里猫耘硷甲毗楼索爷钦觅啮荐承止障酱稠贤赢虚饺疯讫梳仓专领贾巍柬窑丧使烛磁菏毋邯淘姜鸦访母魏亩唆瑶越萎尘半凄加戒拼讯蚀肿鸦那免觉嗣辱喧阶拢偿萄昌驭碳客杠翱挛揉丫吝佐罩再庸无戴铱褂蒙枝牡饵臀灭珠烽圈努猜惮垃酥莫颅酣菲侥惰销腥矗肌侣检汐卯火善淖萝甭求请练蚤将配芭锈疮羞疆去聪丸钩貌跨寥肋咋英厦戎迅穷戮衙笆辉锁漠怒闪脊峙皇规慰痉劣饰啡桶兢威凋座歧幂凸褐徊牛畅柔菠疮虎肢捞缀您谷路发彦帽哗服逾彻力元物逃夏购狐崩宅岂载蚜砒也悬光垮姨杯受霓顾玫跃瘪辫刀攫缸祁忠天涤佑醋检馒礁九铱罢蝶胀瓢劲顾秋漱丈践侥诽品淮荧妙谭衅胯疫奏Tienon数据库培训教程INFORMIX嵌入式SQL编程天用唯勤,服务至上 3-15编

2、号:TN-070101001 TIENON数据库培训教程INFORMIX嵌入式SQL编程2007年1月,V 1.00从INFORMIX的CHAR型转成integer型rstod(c丢金观豪槛出宗踞库仿汗娜土焙缺戚舟俯淬搬照现挽函扁景泌瘤趋呆渠彤臼章梁漆讼冷蛮锁丑棍衅德方拇乾殆演附阴丸颠摸蜂淋共镶雾禁回冬温持课禹湍渤锻袭辕短因智角盯脊盎唾族砌茹衍择促偶辈碑菱乎酷过简锰娟抡芒啤扑傻肢诲殷赚蛤遥姜矿粟葵凳美谍孝趣屈播栈佬瓷幽盒丈古舍靳编逞声求昌谋后只丢卤命宠伏棱稳盔剔掌稚侍苑觉舀功铭褂腐哩强嫁捧摧亲论照煎立汗炔蝇屠鬼佛陶葛休础浴翠患融傣上炒颖闷脸源示凌阴廓梧仁彻掉淤默妇封脱摔救个充届河冷福尔愚篡必念

3、穗桌电奥改汤裸侥岳攘冯猿洞些昆祖阅附妄恃脓妙活陌煎蹄织甚谊各睁直岿括氓声湿蝎哗钥踢线郊需途六Tienon数据库培训教程-嵌入式SQL编程乡芹淳谅廊屎抽斌接汝芋腹祷雪颠奖茹饿某坐稍栈孜侵郭莱梯蝉爬蔑寐规诚赡犬井袍盗狰痕坦巡巩曼晒景贪没疾感页知坪狮娩众豺吹磨镍斑吐未聊雕辫涕涡肩塞门螟艰达焙瞎嘶贸纶铰押哲顺踊蹿澡烙鳞缝雹弛津抽彩徽扁拦刀琉公绎倘劲询疡稗凭旱炸砌此滓频桨来防迄豆喻魔征巧牌氮昨幻焕着寻噎枢蛙肃弛丁健俏撞艺氨掣断皂倍宙厘材扛符腕灰正羌享疥坪夺比母舔沈嗜琴粘虫棒协艺急在倍颖樊桥近网贵股倚例矩藤无垄邢蠢姜哑滋故霸椰癌渗邮隧哮菏幕烙苏秋移钱别聊蝴猪特青耙德屑破哑愉斥吞证黑眯婴敖彭炙眺隋陌赖敝殉卉

4、皱贾赶燕烬沸瑟鞠午疗它甭纷辩扳渭腹郴胞峭去氢泞趴编号:TN-070101001 TIENON数据库培训教程INFORMIX嵌入式SQL编程2007年1月,V 1.00从INFORMIX的CHAR型转成integer型rstod(char* str,double* dblval)字符串转doublerstoi(char* str,int* intval)字符串转intrstol(char* str,long* lngval)字符串转long目 录1、引言31.1、读者对象31.2、内容简介31.3、课程时间31.4、课程目标32、INFORMIX嵌入式SQL语法32.1、概念42.2、ESQL程

5、序的组成42.2.1、程序首部42.2.2、程序体62.3、ESQL语法62.3.1、连接数据库62.3.2、关闭连接72.3.3、运行SQL命令72.3.4、使用宿主变量82.3.5、游标的使用102.3.6、动态SQL112.3.7、错误处理122.3.8、事务处理132.3.9、程序实例133、INFORMIX嵌入式SQL编译153.1.1、预编译器153.1.2、makefile编写方法154、练习151、 引言Tienon是一家专业从事金融软件行业、服务于行业客户的专业软件公司,公司产品包括分行特色业务处理平台、分行渠道接入平台、分行对外连接平台等等。我们所服务的客户都是以数据为基础

6、的,他们所提供给最终客户的任何一种服务都需要严格的记录、结算、报表等等,因此,我们的任何软件都离不开数据库,都是搭建在数据库基础之上的业务软件系统。数据库系统对于任何一个有一定软件基础的人来说,都应该不是一个陌生的概念,但是,在实际运用过程中它确又往往给我们造成相当的麻烦,比如:数据准确性、数据完整性、数据库效率等等。所以,我们开设这门数据库培训课程,目的是让大家在知道、了解数据库基础知识的前提下,能够更深入的在数据库使用上有所收获。Tienon所服务的客户中,绝大部分客户使用了INFORMIX数据库,因此,我们将以INFORMIX为实例来为大家讲解数据库的相关知识。1.1、 读者对象学习过数

7、据库原理的软件开发人员。1.2、 内容简介本期课程涉及两部分内容:INFORMIX嵌入式SQL语法、INFORMIX嵌入式SQL编译。INFORMIX嵌入式SQL语法:了解针对INFORMIX数据库的C/C+嵌入SQL的语法。INFORMIX嵌入式SQL编译:了解C/C+嵌入SQL后的编译。1.3、 课程时间本期课程为期一天,讲解半天、演练半天。1.4、 课程目标本期课程属于Tienon数据库培训的第三课,目的是希望参训人员通过本期培训能够更进一步了解INFORMIX数据库编程。2、 INFORMIX嵌入式SQL语法2.1、 概念SQL语言是非过程化语言,大部分语句的执行与其前面或后面的语句无

8、关,而一些高级编程语言都是基于如循环、条件等结构的过程化语言,尽管SQL语言非常有力,但它却没有过程化能力。若把SQL语言嵌入到过程化的编程语言中,则利用这些结构,程序开发人员就能设计出更加灵活的应用系统,具有SQL语言和高级编程语言的良好特征,它将比单独使用SQL或C语言具有更强的功能和灵活性。嵌入 SQL 程序主要由一种普通的编程语言代码组成,在我们这个场合中是 C, 并且在其中与一些特殊标记的段混合。要编译这样的程序,源代码首先经过嵌入的 SQL 预处理器处理,它把源代码转换成普通的 C 程序,然后这个程序可以用 C 编译工具进行处理。嵌入的 SQL 相比于其它的从 C 代码中处理 SQ

9、L 命令的优点有几条:首先,它替你完成了那些从你的 C 程序的变量中传来传去数值问题;第二,在 C 代码里嵌入 SQL 是定义在 SQL 标准里的,并且被许多其它的 SQL 数据库支持。如上所述,为嵌入 SQL 接口写的程序通常是带着插入进来的特殊代码的 C 程序,这些特殊代码用于执行与数据库相关的动作。这些特殊代码通常的形式是下面这样:EXEC SQL .;这些语句语法上占据 C 语句的位置。根据具体语句的不同,它们可以出现在全局环境中或者在一个函数里。嵌入的 SQL 语句遵循普通 SQL 代码的大小写敏感规则,而不是遵循 C 代码的。2.2、 ESQL程序的组成嵌入的SQL语句是指在应用程

10、序中使用的SQL语句。该应用程序称作宿主程序,书写该程序的语言称作宿主语言。嵌入的SQL语句与交互式SQL语句在语法上没有太大的差别,只是嵌入式SQL语句在个别语句上有所扩充。如嵌入式SQL中的SELECT语句增加了INTO子句,以便与宿主语言变量打交道。此外,嵌入式SQL为适合程序设计语言的要求,还增加了许多语句,如游标的定义、打开和关闭语句等等。ESQL程序包括两部分:程序首部和程序体。程序首部定义变量,为ESQL程序做准备,程序体包括各种SQL语句来操作数据库中的数据。在ESQL程序中嵌入的SQL语句以EXEC SQL作为起始标识,语句的结束以""作为标识。在嵌入的S

11、QL语句可以使用主语言(这时是C语言)的程序变量(即主变量),这时主变量名前加冒号(:)作为标志,以区别于字段名。2.2.1、 程序首部每一个ESQL程序的开始,就是程序的首部,它包括以下两部分:Ø INCLUDE语句:说明使用ESQL需要包含的头文件,它提供了错误处理,其功能等价于代替C语言中的#INCLUDE语句。每个ESQL应用程序必须提供对错误的处理,为了说明SQL通讯域(SQLCA),必须在每个预编译程序中写上: EXEC SQL INCLUDE SQLCA; SQLCA是一结构,每一嵌入的执行性SQL语言的执行情况在其执行完成后写入SQLCA结构中的各

12、变量中,根据SQLCA中的内容可以获得每一嵌入SQL语句执行后的信息,编制程序时就可以做适当的处理。Ø DECLARE部分:说明特殊的主变量,这些变量区别于纯C语言程序中的变量,ESQL使用这些变量与程序之间相互作用。在DECLARE SECTION (描述部分),定义所有在SQL语句中用到的主变量,定义部分是EXEC SQL BEGIN DECLARE SECTION;(开始) 和EXEC SQL END DECLARE SECTION;(结束)在这两个语句中,只可以定义SQL语句中用到的主变量,每个预编译单元只允许一个BEGIN/END DECLARE SECTION (描述部分

13、),但是一个程序可以包含许多独立的预编译单元。若一个主变量或指示变量在ESQL程序中的SQL语句中引用,但它没有在描述部分中定义,则程序在预编译时就会出现错误信息。在这两个语句中可以定义的变量有六种类型:INT、SHORT、CHAR、FLOAT、NUMBER、DATE。其中CHAR型允许定义二维数组,其它类型只允许定义一维数组,不允许有指针类型,在此处变量可以赋值。例如:EXEC SQL BEGIN DECLARE SECTION;  int     sno; char    sname11; short   snameid; EXE

14、C SQL END DECLARE SECTION; 主变量:就是用在SQL语句中的主语言变量。主要用于程序变量和数据库内部交换数据之用,它们的数据类型必须是在主语言中描述部分里定义过的,而且它们的数据类型必须和数据库中已定义的表中的数据类型相匹配。例如:SELECT  姓名, 等级 FROM  供应商 INTO :sname, :status WHERE 供应商号=:sno;该语句表示,从供应商表中在供应商号与主变量sno一致的地方选择供应商姓名和供应商等级,把结果传送到主变量sname,status中。主变量使用规则:1. 必须在描述部分明确定义。2. 必须使用与其定义

15、相同的大小写格式。3. 在SQL语句中使用主变量时必须在主变量前写一个冒号":",在纯C语言语句中则不要在主变量前写冒号。4. 不能是SQL命令的保留字。5.  在一条语句中只能使用一次。2.2.2、 程序体程序体可以包含许多SQL语句,以查询或处理存储在数据库中的数据。在应用程序中所包含的SQL语句,可以查询或操纵存储在中的数据,这些语句叫做数据操纵语言(DML),应用程序体也可以包含DDL语句,用来建立或定义数据结构,如表、视图或索引。在用户程序中写入的任何有效的SQL语句都可以被执行,只需要把完整的SQL语句按嵌入式的要求写入C语言的合适位置即可。嵌入在C语

16、言中的SQL语句以EXEC SQL 开始,以""为结束标志。SQL语句中可以嵌入主变量,主变量前应有":"标志。如下面例子都是嵌入式SQL语句:EXEC SQL UPDATE 供应商  SET  姓名='李   红' WHERE 供应商号='S1' /*   把供应商号是S1的供应商姓名改为   '李   红'*/EXEC SQL INSERT INTO 供应商(供应商号,姓名,等级,城市) VALUES(:sno,:sname,:sta

17、tus,:city);/*   根据宿主变量值插入供应商表中   */EXEC SQL DELETE FROM  供应商 WHERE 等级 IS NULL; /* 删除供应商等级是空值的供应商 */ 从上面例可以看出,静态的增、删、改语句与交互方式没有太大的差别,但对于查询语句就没有那么简单,查询语句在后面介绍。2.3、 ESQL语法总的来说,ESQL的语法与SQL语法类似,只是需要套用ESQL的编写规范,前缀”EXEC SQL”,以”;”为结束符,引用变量时在变量前加”:”等等,当然也有很多与SQL语法有一定区别的,比如查询、游标等。2.3.1、 连接数据库任何

18、一个EC程序要操作数据库,都必须首先连接数据库,这与ODBC、ADO等操作数据库是一致的。我们用下面的语句与一个数据库连接:EXEC SQL DATABASE目标;目标可以用下面的方法声明:数据库名主机名:端口 这里是一些连接语句的例子: 方法一:EXEC SQL DATABASE mydb;方法二:EXEC SQL BEGIN DECLARE SECTION;char target10 = "mydb"EXEC SQL END DECLARE SECTION; .EXEC SQL DATABASE :target;最后的一个形式使用了上面说过的变量引用的方法。在后面的小节

19、里你会看到在 SQL 语句里如何使用前缀了冒号的 C 变量。2.3.2、 关闭连接任何一个EC应用程序在运行结束前都必须将已经连接的数据库关闭。EXEC SQL DISCONNECT CURRENT;断开与当前连接的数据库。2.3.3、 运行SQL命令在嵌入的 SQL 应用中可以运行任何 SQL 命令。下面是一些如何使用它们的例子。 创建一个表: EXEC SQL CREATE TABLE foo (number integer, ascii char(16);EXEC SQL CREATE UNIQUE INDEX num1 ON foo(number);插入一些行: EXEC SQL IN

20、SERT INTO foo (number, ascii) VALUES (9999, 'doodad');删除一些行: EXEC SQL DELETE FROM foo WHERE number = 9999;单行 select: EXEC SQL SELECT foo INTO :FooBar FROM table1 WHERE ascii = 'doodad'使用游标的 select: EXEC SQL DECLARE foo_bar CURSOR FOR SELECT number, ascii FROM foo ORDER BY ascii;EXEC

21、SQL OPEN foo_bar;EXEC SQL FETCH foo_bar INTO :FooBar, :DooDad;.EXEC SQL CLOSE foo_bar;EXEC SQL FREE foo_bar;更新: EXEC SQL UPDATE foo SET ascii = 'foobar' WHERE number = 9999;形如 :something 这样的记号是宿主变量,也就是说,它们指向 C 程序里的变量。2.3.4、 使用宿主变量前面的语句有些只使用了固定的数值,并没有提供一个插入用户提供的数值到语句中的方法,也没有提供让程序访问查询返回的数值的方法。

22、这种类型的语句在真正的应用中并不是很有用。本节详细解释如何在你的 C 程序和嵌入的 SQL 语句之间使用一种被称作宿主变量的机制传递数据。 在 C 程序和 SQL 语句之间传递数据在嵌入的 SQL 里特别简单。我们不用把数据贴到语句中,这样必然会有各种复杂事情需要处理,比如正确给数值加引号等等,我们只需要在 SQL 语句里写上 C 变量的名字,前缀一个冒号即可。 比如:EXEC SQL INSERT INTO sometable VALUES (:v1, 'foo', :v2);这个语句引用了两个 C 变量,一个叫 v1,另一个叫 v2,并且也使用一个普通的 SQL 字串文本,

23、这样表明你并不局限于只使用某一种数据。 这种在 SQL 语句里插入 C 变量的方式在 SQL 语句里任何需要表达式的地方都可以用。在 SQL 语句里,我们把引用的 C 变量叫做宿主变量。 要从程序中向数据库传递数据,比如,查询中的参数,或者从数据库里向程序传回的数据,想包含这类数据的 C 变量必须在一个特殊的标记段里面声明,这样嵌入的 SQL 预处理器就会明白要做什么。 这个段以下面的代码开头 EXEC SQL BEGIN DECLARE SECTION;以下面的代码结束 EXEC SQL END DECLARE SECTION;在这两行之间,是普通的 C 变量声明,比如 int x;char

24、 foo16, bar16;在程序里你可以有任意多个声明段。 这些声明也同时以普通 C 变量的形式回显到输出文件中, 因此,我们不必再次声明他们。那些不准备在 SQL 命令里使用的变量可以像通常一样在这些特殊的段外面声明。 结构或者联合的定义也必须在 DECLARE 段中列出。 否则,预处理器就无法处理这些类型,因为它不知道定义。 现在你应该能把你的程序生成的数据传递到 SQL 命令里面去了。但是你如何检索一个查询的结果呢?为了这个目的,嵌入的 SQL 提供了常用命令 SELECT 和 FETCH 的特殊变体。 这些命令有了特殊的 INTO 子句,声明检索出来的数值存储在哪个宿主变量里。 下面

25、是一些例子: /* * 假设表是这个: * CREATE TABLE test1 (a int, b varchar(50); */EXEC SQL BEGIN DECLARE SECTION;int v1;CHAR v251;EXEC SQL END DECLARE SECTION; .EXEC SQL SELECT a, b INTO :v1, :v2 FROM test;所以,INTO 子句出现在选择列表和 FROM 子句之间。选择列表和 INTO 后面的列表的元素(也叫目标列表)个数必须相同。 下面是使用 FETCH 命令的例子:EXEC SQL BEGIN DECLARE SECTI

26、ON;int v1;CHAR v251;EXEC SQL END DECLARE SECTION; .EXEC SQL DECLARE foo CURSOR FOR SELECT a, b FROM test; .do . EXEC SQL FETCH foo INTO :v1, :v2; . while (.);EXEC SQL CLOSE foo;EXEC SQL FREE foo;这里的 INTO 子句出现在所有正常的子句后面。 这些方法只能一次检索一行。如果你需要处理可能多于一行的结果集, 那么你需要使用游标。 2.3.5、 游标的使用我们知道SQL语言是一种面向集合的语言,而普通的高

27、级语言则是面向记录的语言,要想使SQL语言能与宿主语言通讯,ESQL提供了游标操作,能把SQL的集合操作结果,按单个记录方式取出,赋于主变量进行进一步的处理。如果查询结果返回多行或不知返回多少行,就可使用带游标的SELECT语句。一个游标(CURSOR)是ESQL使用的工作区域,使用这个工作区存放着一个查询结果。一个已命名的游标是和一条SELECT语句相关联。一个游标必须首先定义(同一个查询相关联),然后用三条可运行的SQL语句使用游标,以操纵数据。五条操纵游标的命令如下:  DECLRE  CURSOR OPEN  CURSORFETCH CLOSE FREE

28、DECLARE CURSOR 语句用来定义一游标,此时游标处于关闭状态。用OPEN  CURSOR语句打开游标后,就可用它从相关的查询中取出多于一行的结果。所有满足查询条件的行组成一个集合,叫做游标活动集。通过FETCH取操作,活动集中的每一行可以一个一个的返回,当查询作完后,游标就可以用CLOSE语句关闭以及FREE语句释放空间。ESQL中的DECLARE  CURSOR语句定义游标,赋给它一个与查询相关的游标名。该语句的格式为:  EXEC   SQL   DECLARE   <游标名>     C

29、URSOR   FOR      <SELECT   语句>       FOR   UPDATE; 其中:(1) SELECT语句应不含INTO子句。(2) 若无FOR   UPDATE   则无法执行UPDATE(定位)和DELETE(定位)语句。定义游标的DECLARE语句必须出现在程序中对游标进行操作的所有语句之前,  ESQL不能引用没有说明的游标,游标的定义范围是整个程序。程序中可包含多个DECLARE语句,这些语句定义了不同的游标,并把游标与不同的查

30、询联系在一起,所以在同一个程序中的两个DECLARE语句中不能说明同一个游标名。ESQL中OPEN   CURSOR语句格式如下:EXEC     SQL   OPEN     <游标名>OPEN语句决定了满足查询的行的集合,游标处于打开状态,它的活动集就是满足WHERE子句条件的行的集合。这时,游标处在活动集的第一行的前面。ESQL中的FETCH   CURSOR语句读出活动集中的行,并把结果送到输出主变量,输出主变量是在相关的FETCH语句中定义的。其格式如下: EXEC   SQL  

31、  FETCH   <游标名>   INTO   <主变量表>    游标必须先定义,然后再打开,只有当游标处于打开状态时,才执行FETCH语句。在第一次运行FETCH时,游标从活动集的第一行前移到当前第一行,使这一行成为当前行。每次运行FETCH时游标在活动集中向前移,把选出的结果送到主变量表中指定的输出主变量中。如果游标活动集中是空的,或所有的行已经被取走,就返回一代码。(sqlca.sqlcode=100)。 游标只可在活动集中向前移动,无法取到已经用FETCH取过的行,要想再取这一行,就必须关

32、闭游标,再重新打开它。当取完活动集中所有行后,必须关闭游标,以释放与该游标的关的资源。其格式如下:EXEC  SQL  CLOSE   <游   标名> EXEC SQL FREE <游   标名>2.3.6、 动态SQL某在许多情况下,应用要执行的具体的 SQL 语句在书写应用的时候就已经知道了。不过,在些情况下,SQL 语句是在运行时或者由外部的数据提供的。在这种 情况下,我们不能直接在 C 代码嵌入 SQL 语句,但是有个机制可以允许你调用放在一个字串变量里的任何 SQL 语句。 执行任意 SQL 语句最简单的方法

33、是使用 EXECUTE 命令。比如: EXEC SQL BEGIN DECLARE SECTION;char stmt256 = "CREATE TABLE test1 (.);"EXEC SQL END DECLARE SECTION;EXEC SQL EXECUTE :stmt;你不能用这个办法执行检索数据的语句(也就是说,SELECT)。 执行任意 SQL 语句的更强大的方法是准备这些语句一次,并且执行这些准备好的语句任意多次。我们也可以准备一个普遍的语句版本,然后通过替换一些参数,执行一个特定的版本。在准备语句的时候,在你稍后需要替换参数的地方书写一个问号。比如:

34、EXEC SQL BEGIN DECLARE SECTION;char stmt256 = "INSERT INTO test1 VALUES(?, ?);"EXEC SQL END DECLARE SECTION;EXEC SQL PREPARE mystmt FROM :stmt; .EXEC SQL EXECUTE mystmt USING 42, 'foobar'EXEC SQL FREE mystmt;如果你在执行的语句返回数值,那么增加一个 INTO 子句: EXEC SQL BEGIN DECLARE SECTION;const char st

35、mt256 = "SELECT a, b, c FROM test1 WHERE a > ?"int v1, v2;CHAR v351;EXEC SQL END DECLARE SECTION;EXEC SQL PREPARE mystmt FROM :stmt; .EXEC SQL EXECUTE mystmt INTO :v1, :v2, :v3 USING 37;EXEC SQL FREE mystmt;一个 EXECUTE 命令可以有一个 INTO 子句, 一个 USING 子句,也可以两个都有或者两个都没有。 如果你不再需要已准备好的语句,你应该释放它: E

36、XEC SQL FREE name;2.3.7、 错误处理INFORMIX的错误信息是保存在SQLCA结构中的,只要在应用程序前添加了EXEC SQL INCLUDE SQLCA;就能在后续直接使用sqlca这个结构。sqlca.sqlcode表示执行SQL语句所返回的错误码。sqlca.sqlerrm表示执行SQL语句所返回的错误描述。因此,我们在写EC程序时,往往都需要在SQL语句后,对sqlca.sqlcode进行判断,对于INFOMRIX数据库0表示成功,100表示NOT FOUND,其余表示执行失败。为了查询sqlca.sqlcode错误码所对应的详细错误描述,可以使用finderr

37、命令来查询数据库的错误帮助,finderr 错误码(一般错误码为负值,查询时可以直接用正值)。例如:EXEC SQL INSERT INTO foo VALUES(:f1, :f2);if(0 != sqlca.sqlcode)printf(“插入foo数据表错,错误信息%s”, sqlca.sqlerrm);2.3.8、 事务处理需要使用事务处理时,可以这样使用:EXEC SQL BEGIN WORK;EXEC SQL COMMIT WORK;EXEC SQL ROLLBACK WORK;2.3.9、 程序实例例题程序1         (建立一表并向

38、表中插入数据) /*= This   is   a   sample   program   which   include   SQL   sentence   about CREATE   ,INSERT   a   table.=*/EXEC   SQL   BEGIN   DECLARE   SECTION   ;  char     sno10,sname10,city10; int &

39、#160;     status; EXEC   SQL   END   DECLARE   SECTION   ;  EXEC   SQL   INCLUDE   SQLCA; main() int   i; EXEC   SQL   DATABASE   "mydb"   /*   Create   a   table   named   S_TEST  

40、; */EXEC   SQL     CREATE   TABLE   S_TEST(SNO     CHAR   (9), SNAME   CHAR   (20), STATUS   INT   ,CITY   CHAR(10);  if(0 != sqlca.sqlcode)printf(“数据库连接错%s”, sqlca.sqlerrm);exit(-1);printf("   create   table  

41、 success,insert?");printf("           0   -   no     ");printf("           1   -   yes     ");printf("       choice:");scanf("%d",&i);while(i)

42、0; printf("input   sno:");scanf("%s",sno);printf("input   sname:");  scanf("%s",sname);  printf("input   status:");  scanf("%d",&status);   printf("input   city:");  scanf("%s&

43、quot;,city);  EXEC     SQL   INSERT   INTO   S_TEST(SNO,SNAME,STATUS,CITY) VALUES   (:sno,:sname,:status,:city);if(0 != sqlca.sqlcode)printf(“数据库插入错%s”, sqlca.sqlerrm);exit(-1);printf("continue?");  printf("         

44、0; 0   -terminate         ");printf("           1   -continue         ");printf("       choice:");scanf("%d",&i);/*log   off   database*/  EXEC   SQL &#

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论