ORACLE数据库的嵌入SQL语言(proc编程)

ORACLE数据库的嵌入SQL语言(proc编程)

ID:40572671

大小:78.50 KB

页数:22页

时间:2019-08-04

ORACLE数据库的嵌入SQL语言(proc编程)_第1页
ORACLE数据库的嵌入SQL语言(proc编程)_第2页
ORACLE数据库的嵌入SQL语言(proc编程)_第3页
ORACLE数据库的嵌入SQL语言(proc编程)_第4页
ORACLE数据库的嵌入SQL语言(proc编程)_第5页
资源描述:

《ORACLE数据库的嵌入SQL语言(proc编程)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、ORACLE数据库的嵌入SQL语言1基本的SQL语句1.1宿主变量和指示符1)、声明方法同其他数据库管理器一样,ORACLE使用宿主变量传递数据库中的数据和状态信息到应用程序,应用程序也通过宿主变量传递数据到ORACLE数据库。根据上面两种功能,宿主变量分为输出宿主变量和输入宿主变量。在SELECTINTO和FETCH语句之后的宿主变量称作“输出宿主变量”,这是因为从数据库传递列数据到应用程序。除了SELECTINTO和FETCH语句外的其他SQL语句中的宿主变量,称为“输入宿主变量”。这是因为从应用程序向数据库输入值。如:INS

2、ERT、UPDATE等语句。请看下面这个例子:intemp_number;chartemp[20];VARCHARemp_name[20];/*getvaluesforinputhostvariables*/printf("Employeenumber?");gets(temp);emp_number=atoi(temp);printf("Employeename?");gets(emp_name.arr);emp_name.len=strlen(emp_name.arr);EXECSQLINSERTINTOEMP(EMPNO,E

3、NAME)VALUES(:emp_number,:emp_name);在上面这个例子中,其中的emp_number和emp_name就是宿主变量。值得注意的是,它同其他数据库的区别是,定义宿主变量可以不需要BEGINDECLARESECTION和ENDDECLARESECTION。2)、指示符变量大多数程序设计语言(如C)都不支持NULL。所以对NULL的处理,一定要在SQL中完成。我们可以使用主机指示符变量来解决这个问题。在嵌入式SQL语句中,主变量和指示符变量共同规定一个单独的SQL类型值。指示符变量是一个2字节的整数。针对输

4、入宿主变量和输出宿主变量,指示变量共有下面几种情况:同输入宿主变量一起使用时:-1Oracle将null赋值给列,即宿主变量应该假设为NULL。>=0Oracle将宿主变量的实际值赋值给列。同输出宿主变量一起使用时:-1表示该列的输出值为NULL。0Oracle已经将列的值赋给了宿主变量。列值未做截断。>0Oracle将列的值截断,并赋给了宿主变量。指示变量中存放了这个列的实际长度。-2Oracle将列的值截断,并赋给了宿主变量。但是这个列的实际长度不能确定。从数据库中查询数据时,可以使用指示符变量来测试NULL:EXECSQLS

5、ELECTename,salINTO:emp_name,:salaryFROMempWHERE:commissionINDICATOR:ind_commISNULL...注意,不能使用关系操作符来比较NULL,这是因为NULL和任何操作都为false。如:EXECSQLSELECTename,salINTO:emp_name,:salaryFROMempWHEREcomm=:commission如果comm列的某些行存在NULL,则该SELECT语句不能返回正确的结果。应该使用下面这个语句完成:EXECSQLSELECTename

6、,salINTO:emp_name,:salaryFROMempWHERE(comm=:commission)OR((commISNULL)AND(:commissionINDICATOR:ind_commISNULL));1.2查询如果是单行查询,则应该使用SELECTINTO语句。如果是多行查询,应该使用游标或宿主变量数组。如:单行查询的一个例子:EXECSQLSELECTename,job,sal+2000INTO:emp_name,:job_title,:salaryFROMempWHEREempno=:emp_numbe

7、r;在嵌入SQL语句中,也可以使用子查询。如:EXECSQLINSERTINTOemp2(empno,ename,sal,deptno)SELECTempno,ename,sal,deptnoFROMempWHEREjob=:job_title;1.3修改数据1)、插入数据使用INSERT语句插入数据。其语法同ANSISQL语法类似。如:EXECSQLINSERTINTOemp(empno,ename,sal,deptno)VALUES(:emp_number,:emp_name,:salary,:dept_number);2)、

8、更新数据使用UPDATE语句更新数据。其语法同ANSISQL语法类似。如:EXECSQLUPDATEempSETsal=:salary,comm=:commissionWHEREempno=:emp_number;3)、删除数据使用DELETE语句

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。