嵌入式的SQL程序设计

嵌入式的SQL程序设计

  1 --嵌入式SQL程序设计
  2 --SQL2005管理员大全
  3 
  4 
  5 --嵌入SQL语句的应用程序叫做宿主程序,书写该程序的语言称为宿主语言。
  6 --宿主语言可以是C、C++、JAVA等。嵌入的SQL语句与交互式SQL在语法上类似
  7 --但是嵌入式SQL在个别语句上有所扩充
  8 
  9 --嵌入的SQL语句主要有两种类型:执行性SQL语句和说明性SQL语句。执行性SQL语句可用来
 10 --定义数据、查询和操纵数据库中的数据,每一执行性语句真正对数据库进行操作。说明性语句
 11 --用来说明通信域和SQL语句中用到的变量。说明性语句不生成执行代码
 12 
 13 --在C语言中使用嵌入式SQL
 14 --SQLSERVER提供对C的嵌入式语言的支持,在用于C语言的嵌入式SQL(以下简称ESQL/C)
 15 --大部分语法都来源于TSQL语法,只是在某些细节上略有不同。
 16 
 17 --在ESQL/C中,关键字和SQL语句都是不区分大小写的,但是对于游标、连接和动态SQL语句
 18 --的定义却是区分大小写的,例如,以下定义的两个游标是完全不同的
 19 
 20 DECLARE RED_CURSOR CURSOR
 21 DECLARE red_CURSOR CURSOR
 22 
 23 --1、连接到SQLSERVER
 24 --在ESQL/C中,连接到SQLSERVER用connect to语句,语法如下:
 25 CONNECT TO servername.databasename AS connection_name USER LOGIN.PASSWORD
 26 
 27 --当只有一个连接时,可以不指定连接的名称,但是如果应用程序使用了两个或以上的连接
 28 --,必须为每个连接指定不同的名称。当用connect to定义了连接后,所有的后续操作都将
 29 --在当前连接上进行,如果想使用另外一个连接,就要用SET CONNECTION来改变当前的连接,语法如下:
 30 SET CONNECTION connection_name
 31 
 32 --关闭与数据的连接用DISCONNECT,可以关闭当前连接或关闭所有连接,语法如下
 33 DISCONNECT connection_name | ALL | CURRENT
 34 
 35 --例子:连接机器red上数据库名为book和test的SQLSERVER数据库,数据库用户名为sa
 36 --密码为空,然后分别关闭他们
 37 EXEC SQL CONNECT TO red.book AS con1 USER sa;
 38 EXEC SQL CONNECT TO red.test AS con2 USER sa;
 39 EXEC SQL DISCONNECT CON1
 40 EXEC SQL DISCONNECT CON2
 41 
 42 
 43 --2、使用宿主变量
 44 --宿主变量作为标准的C变量在ESQL/C中定义,使用宿主变量可以在SQL语句中指定输入参数或接收输出参数
 45 --定义宿主变量的语句写在BEGIN DECLARE SECTION和END DECLARE SECTION语句之间
 46 EXEC SQL BEGIN DECLARE SECTION
 47 INT CompanyID
 48 CHAR CompanyName[30]
 49 EXEC SQL END DECLARE SECTION
 50 
 51 --使用宿主变量时,要在宿主变量前加一个冒号作为引用宿主变量的标志
 52 "WHERE CompanyID=:CompanID"
 53 
 54 --注意:如果从数据库中传给宿主变量的值是NULL,那么宿主变量将会把NULL值转换为-1处理,例如:虽然给
 55 --宿主变量Address赋予了NULL值,以下SQL语句还是不会返回Address为NULL值的记录
 56 
 57 EXEC SQL SELECT FROM Company
 58 WHERE Address=:ADDRESS
 59 
 60 --3、使用SQL语句
 61 --在ESQL/C中有两种SQL语句,一种是静态SQL语句,另一种是动态SQL语句,静态SQL语句是一个完整的SQL语句
 62 --而动态SQL语句需要在运行时指定条件变量
 63 
 64 --可以用PREPARE来定义一个动态SQL语句,语法如下:
 65 PREPARE stmt_name FROM :hvar
 66 
 67 --执行一个动态SQL语句可以用EXECUTE或EXECUTE IMMEDIATE,EXECUTE IMMEDIATE指的是
 68 --执行一个包含宿主变量中的SQL语句
 69 
 70 --可以用SELECT INTO L来把查询结果赋予指定的宿主变量,只用于返回一条记录的查询语句,如果查询
 71 --语句返回多行记录,可以使用游标来处理
 72 
 73 --例子:构造一个动态SQL语句,插入一条记录到COMPANY表
 74 EXEC SQL BEGIN DECLARE SECTION
 75 CHAR stmtcon[]="insert into company values(?,?)"
 76 CHAR companyid[30]
 77 CHAR companyname[30]
 78 EXEC SQL END DECLARE SECTION
 79 //提示用户输入数据//
 80 PRINTF("输入单位代码:")
 81 SCANF("%S",COMPANYID)
 82 PRINTF("输入单位名称:")
 83 scanf("%s",companyname)
 84 EXEC SQL PREPARE stmt FROM :stmtcon
 85 EXEC SQL EXECUTE stmt USING:COMPANYID,:COMPANYNAME
 86 
 87 --例子:把单位代码为"0001"的单位名称赋予给变量companname
 88 EXEC SQL BEGIN DECLARE SECTION 
 89 CHAR COMPANYNAME[30]
 90 EXEC SQL END DECLARE SECTION
 91 EXEC SQL SELECT COMPANYNAME INTO :COMPANYNAME
 92 FROM COMPANY WHERE COMPANYID='0001'
 93 
 94 --使用游标
 95 --当SQL查询语句只返回一行时,可以用SELECT INTO 语句把返回值赋予给宿主变量
 96 --但是当查询语句返回多行时,就不能用SELECT INTO,此时就需要游标来处理
 97 
 98 --游标分为静态游标和动态游标,静态游标包含完整的SQL语句,动态游标则需要在运行时指定参数
 99 --静态游标可以包含宿主变量,当打开他时,宿主变量就被读到SQL语句中,形成一个完整的SQL语句
100 --动态游标中的参数用?标记符来指定,当打开游标时,根据提供的?标记符代码的数据来构造
101 --SQL语句
102 
103 --在使用游标之前必须要定义游标,定义游标语法如下
104 DECLARE cursor_name INSENSITIVE SCROLL CURSOR FOR select_stmt
105 prepare_stmt_name FOR READ_ONLY | UPDATE   |OF column_list    
106 
107 --打开游标使用open语句,用fetch语句移动打开的记录集。对于打开的游标,可以用
108 --update来更新数据,delete来删除数据。游标使用完后,用close语句来关闭他
109 
110 --例子:定义一个游标,返回单位信息表的所有记录,并输出单位信息到屏幕上
111 //定义游标,并打开//
112 EXEC SQL DECLARE C1 CURSOR FOR
113 SELECT COMPANYID,COMPANYNAME FROM COMPANY FOR BROWSE
114 EXEC SQL OPEN C1
115 //定义变量//
116 EXEC SQL BEGIN DECLARE SECTION
117 CHAR COMPANYID[30]
118 CHAR COMPANYNAME[30]
119 EXEC SQL END DECLARE SECTION
120 //输出信息//
121 WHILE (SQLCODE==0)
122 {
123   EXEC SQL FETCH C1 INTO :COMPANYID,:COMPANYNAME
124   PRINTF("%S,%S",COMPANYID,COMPANYNAME)
125 }
126 
127 --例子:定义一个动态游标,查询单位名称为“北京怡神公司”的单位,返回其代码
128 EXEC SQL BEGIN DECLARE SECTION
129 CHAR SZCOMMAND[]="SELECT COMPANYID FROM COMPANY WHERE COMPANYNAME=?";
130 CHAR SZCOMPANYNAME[]="北京怡神公司";
131 CHAR SZCOMPANYID[30]132 EXEC SQL END DECLARE SECTION
133 //定义动态游标//
134 
135 EXEC SQL
136 DECLARE CON_CURSOR CURSOR FOR SELECT_STATEMENT;
137 //准备SQL语句//
138 EXEC SQL
139 PREPARE SELECT_STATEMENT FROM :SZCOMMAND
140 //打开游标,输出到变量中//
141 EXEC SQL OPEN CON_CURSOR USING:SZCOMPANYNAME;
142 EXEC SQL FETCH CON_CURSOR INTO:SZCOMPANYID;
143 
144 --5、使用事务
145 --ESQL/C像TSQL一样完全支持事务管理,打开一个事务用BEGIN TRANSACTION
146 --提交事务用COMMIT TRANSACTION,回滚事务用ROLLBACK TRANSACTION
147 --事务操作只对当前连接有效
148 
149 --注意:当提交或回滚事务时,ESQL/C并不自动关闭打开的游标,可以使用
150 --SET CURSOR_CLOSE_ON_COMMIT语句设置当提交或回滚事务时自动关闭当前连接的所有打开的游标

 

转载于:https://www.cnblogs.com/lyhabc/p/3458487.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
嵌入式SQL编程的范例,使用VC6编译Oracle 10g 嵌入式SQL程序操作步骤 一、 基本要求 1、所需软件Visual C++ 6.0 2、 源代码包括 PRO C 文件: student.pc 3、安装ORACLE10G 或其客户端 在ORACLE10G CLIENT 安装时并没有 Precomp C 的选项,可以选择全部安装或者开发人员选项进行安装。安装后确保有如下几个文件: PROC的可执行文件 : $ORACLE_HOME\BIN\PROC.EXE Oracle支持SQL在VC环境的库文件OraSQL10.LIB Oracle支持SQL在VC环境的头文件 : 位于$ORACLE_HOME\precomp\ PUBLIC \*.h 文件 二、 将PROC集成到VC环境中 1、增加PROC到Tools(工具)菜单列表 在本例中,$ORACLE_HOME指的是E:\oracle\product\10.1.0\db_1目录。   a) 运行Microsoft Visual C++ 6.0;   b) 从菜单项Tools(工具)中选择Customize(定制)项。为表述简单起见,书写成如下格式:菜单Tools/ Customize(工具/定制) 项。以下采用类似的表达方法。此时出现Customize(定制)对话框;   c) 单击Tools(工具)选项卡(或属性页),用鼠标移动“Menu contents(菜单目录)”框滚动条到底部区域;   d) 双击点划线矩形区域,在空白区域上输入“PROC”,然后按回车键;   e) 在“Command(命令)”框中,输入PROC的可执行文件名。例如:E:\oracle\product\10.1.0\db_1\BIN\ PROC. EXE  f) 在“Arguments(参数)”框中输入“$(TargetName)”。其作用在从菜单Tools中选择PROC项时,VC会将当前项目名传递给PROC,尔后PROC会直接打开该项目文件目录下扩展名为 .pre的同名文件; g) 在“Initial directory(初始化目录)”框中输入“$(WkspDir)” / 单击“Close(关闭)”按钮,完成将PROC集成到VC环境中的工作。 2、指定头文件路径   为了确保VC顺利完成编译链接,需要将Oracle提供的头文件增加到VC环境中。指定头文件路径的具体步骤如下。   a) 菜单Tools / Options(工具/选择)项,出现“Options(选择)”对话框;   b) 单击“Directories(目录)”选项卡,从“Show directories for(显示目录为):”列表框中选择“Include files”;   c) 移动“Directories(路径)”框的滚动条到底部区域; d) 双击点划线矩形区域,在空白区域上输入包含Oracle支持SQL在VC环境头文件的子目录,对缺省安装即输入E:\oracle\product\10.1.0\db_1\ PRECOMP \ PUBLIC。 e) 单击“Directories(目录)”选项卡,从“Show directories for(显示目录为):”列表框中选择“Library files”;   f) 移动“Directories(路径)”框的滚动条到底部区域; d) 双击点划线矩形区域,在空白区域上输入包含Oracle支持SQL在VC环境头文件的子目录,对缺省安装即输入E:\oracle\product\10.1.0\db_1\ PRECOMP \ lib\msvc。 3、可执行文件路径 a) 菜单Tools / Options(工具/选择)项,出现“Options(选择)”对话框; b) 单击“Directories(目录)”选项卡,从“Show directories for(显示目录为):”列表框中选择“Executable files”; c) 查看“Directories(路径)”框是否包括$ORACLE_HOME\BIN 路径,一般先安装ORACLE再安装VC,这个路径会包括在内的,如果没有包括,添加这么一条路径。 三、 程序创建过程 1、 创建新工程 当运行Visual C++ 6.0后,操作步骤如下:   a) 菜单File / New项 / Project卡;   b) 选择Win32 console Application 项;   c) 由浏览选择或直接输入工程将位于的路径 / 填入创建的工程名如student 。 d) 单击OK按钮 / 依缺省值单击Finish / 单击OK,完成创建控制台应用工程框架。 e) 菜单工程/设置 项/link卡, 添加两个文件 oraSQL10.lib, oraSQX10.lib 到对象/库模块中 2、将PRO C 文件加入工程  a) 菜单Project / Add To Project 项 / Files 项;   b) 将文件对话框的文件类型改为“所有文件”;   c) 路径选为student.pc 文件所在目录   d) 选择student.pc文件,单击“打开”钮,完成将PRO C文件加入工程。 3、预编译  通过预编译,将预编译源文件如student.pc转换成为student.c的C程序源文件。在PROC集成到VC环境下时操作步骤如下:   a) 菜单Tools / PROC 项; b)此时弹出PROC预编译命令行窗口,从窗口标题可以看成,其执行E:\oracle\product\10.1.0\db_1\BIN\ PROC. EXE student 当窗口提示:“press any key to continue” ,敲任意键该窗口关闭。 此时可以看到生成student.c 文件 c) 如果预编译结束,预编译对话框左边显示的状态图标为黄色(警告)或红色(预编译失败)时,应双击该标识观察帮助或出错信息。预编译失败,应当修改源程序,再进行预编译,直到通过预编译。 4、编译准备   为了使工程能通过编译,需要将预编译输出的工程源文件和Oracle支持SQL在VC环境下的运行库文件加入到工程中,下面具体介绍增加这两个文件的步骤。   1) 将预编译的输出文件和有关头文件加入工程   a) 菜单Project / Add To Project 项 / Files 项;   b) 在文件对话框中选择正确路径,选定预编译输出生成的文件student.c,单击“打开”按钮,即将这些文件加入工程。   2) 将运行库文件加入工程   a) 菜单Project / Add To Project 项 / Files 项;   b) 将文件对话框的文件类型改为“所有文件”;   c) 路径选为$ORACLE_HOME\precomp\LIB   d) 选择OraSQL10.LIB文件,单击“打开”钮,完成将运行库文件加入工程。 5、编译链接   按F7键或单击编译图标,对工程进行编译链接。如果没有出现错误,则通过编译链接,生成可执行文件如student.exe。
第六章 嵌入式SQL(E-SQL)简介 3 第一节 什么是嵌入SQL语言? 3 1.1 嵌入SQL程序的组成元素 3 1.2 什么是静态SQL和动态SQL? 4 1.3 什么是SQLCA? 4 1.4 什么是SQLDA? 5 第二节 SYBASE SQL SERVER嵌入式SQL语言 5 2.1 一个嵌入SQL语言的简单例子 5 2.2 嵌入SQL的处理过程 6 2.3 嵌入SQL语句总览 7 2.3.1 宿主变量 7 2.3.2 连接数据库 12 2.3.3 数据的查询和修改 13 2.3.4 游标的使用 13 2.3.5 SQLCA 15 2.3.6 WHENEVER 16 2.3.7 批处理 18 2.3.8 事务 18 2.4动态SQL语句 18 2.4 .1 动态修改 19 2.4.2 动态游标 20 2.4.3 SQLDA 23 2.4.4 DESCRIBE语句 27 2.5 两个例子程序 27 2.5.1 TELECOM程序 27 2.5.2 ADHOC程序 29 第三节 IBM DB2嵌入SQL语言 35 3.1 一个简单示例 35 3.2 嵌入SQL语句 37 3.2.1宿主变量 37 3.2.2单行查询 39 3.2.3多行查询 39 3.2.4插入、删除和修改操作 40 3.2.5 SQLCA 43 3.2.6事务 45 3.3 DB2的嵌入SQL程序处理过程 46 3.4 DB2的动态SQL嵌入语句 53 3.4.1 基本方法 53 3.4.2 动态游标 55 3.4.3 SQLDA 55 第四节 ORACLE数据库的嵌入SQL语言 66 4.1 基本的SQL语句 66 4.1.1宿主变量和指示符 66 4.1.2 查询 68 4.1.3 修改数据 68 4.1.4 游标 68 4.2 嵌入PL/SQL 71 4.3 动态SQL语句 72 4.3.1 ORACLE动态SQL语句的一些特点 72 4.3.2 使用动态SQL的四种方法 72 4.3.3 SQLDA 75 第五节INFORMIX的嵌入SQL/C语言 89 5.1 一个简单的入门例子 89 5.2 宿主变量 91 5.3 嵌入SQL的处理过程 96 5.4 动态SQL语言 96 5.4.1 SQLDA 97 第六节MICROSOFT SQL SERVER7嵌入式SQL语言 105 6.1 一个嵌入SQL语言的简单例子 105 6.2 嵌入SQL的处理过程 106 6.3 嵌入SQL语句 112 6.3.1 声明嵌入SQL语句中使用的C变量 112 6.3.2 连接数据库 115 6.3.3 数据的查询和修改 115 6.3.4 游标的使用 116 6.3.5 SQLCA 117 6.3.6 WHENEVER 118 6.4动态SQL语句 119 6.4 .1 动态修改 119 6.4.2 动态游标 120 6.4.3 SQLDA 122 6.4.4 DESCRIBE语句 130 6.5 API 130
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值