3.7 嵌入式SQL

时间:2022-09-09 14:45:38

可以放入所有高级语言中去,如C

因为,SQL是过程性语句,需要高级语言的非过程性处理集合的分类处理

一、一般形式

  • 所有的SQL语句都必须加前缀EXEC SQL
  • SQL语句完成结束标志(;或END EXEC)
EXEC SQL<SQL语句>;
EXEC SQL<SQL语句> END EXEC

例:

EXEC SQL drop table Student;

二、嵌入式SQL语言与主语言之间的通信

  • 向主语言传递SQL语言的执行状态信息,使主语言能够根据此信息控制程序流程,主要使用SQL通信区(SQLCA);
  • 主语言向SQL语句提供参数,主要用主变量实现;
  • 将SQL语句查询数据库结果交主语言进行处理,主要用主变量和游标实现。

1.SQL通信区(SQLCA)

1)用EXEC SQL INCLUDE SQLCA进行定义;

2)每执行完一条SQL语句应测试返回代码SQL CODE的值,以了解执行情况并做相应处理

SQLCODE

=0:SQL语句执行成功,并满足条件的记录;

=100:SQL语句处理完最后一条满足条件的记录或者是数据库中没有满足条件的记录;

<0:SQL语句执行出错

2.主变量

主变量:SQL语句中使用的主语言程序变量

指示变量:指示变量的值或条件

  • 必须在SQL语句BEGIN DECLARE SECTION与END DECLARE SECTION之间进行说明;
  • 主变量可以在SQL语句中任一能够使用表达式的地方出现
  • SQL语句中的主变量名前要加上冒号(:)作为标志,与数据库对象区别
  • SQL语句之外,主变量和指示变量可以直接引用

3.游标:

用来协调SQL语言和主语言之间的处理速度失调问题(SQL语言:面向集合,可产生或处理多条记录    主语言:面向记录,只能存放一条记录)

系统为用户开设的一个数据缓冲区,存放SQL语句的结果。每个游标区都有一个名字,用户可通过游标逐一获取记录,并赋予主变量,交给主语言进一步处理

例:

exec sql include salca;
exec sql bedin declare section;
char Sno(5);
char Cno(3);
int Grade;
exec sql end declare section;
main()
{
exec sql declare c1 cursor for select Sno,Cno,Grade from SC;
exec sql open c1;
for(;;)
{
exec sql fetch c1 into :Sno,:Cno,:grade;
if(sqlCode!=0)
break;
printf("Sno:%s,Cno:%s,Grade:%d\n",:Sno,:Cno,:Grade);
}
exec sql chose c1;
}

三、不用游标的的SQL语言

  • 说明性语句
exec sql begin declare section;
exec sql end declare section;
  • 数据定义语句
exec sql create...
exec sql drop...
  • 数据控制语句
exec sql grant...
exec sql revoke...
  • 查询结果为单记录的select语句

1)用into子语句制定查询结果的存放变量

2)into语句,where语句,having短语中均可使用主变量

3)查询结果若为多记录则出错

exec sql select Sno,Sname,Sage,Sdept into:Sno,:Sname,:Sage,:Sdept from SC where Sno=: give Sno and Cno=:give Cno;
  • 非current形式的update语句
exec sql update SC set Grade=Grade+:raise where Cno='';
exec sql update Student set Sage=null where Sdept='CS'
  • 非current形式的delete语句
exec sql delete from SC where Sno=(select Sno from Student where Sname=:stdna);
  • insert语句

gradeid=-1;    指示变量

exec sql insert into SC(Sno,Cno,Grade) values (:Sno,:Cno,:Grade,:gradeid);

四、使用游标的SQL语言

  • 查询结果为多条结果的select语句
exec sql begin declare section;
...
exec sql end declare section;
...
exec sql declare SX cursor for select Sno,Sname,Sage,Ssex from Student where Sdept =:deptname;//说明游标
while(gets(deptname)!=null)
{
exec sql open SX;//打开游标
while(1)
{
exec sql fecth SX into :Sno,:Sname,:Sage,:Ssex;//推进游标指针并取当前记录
if(sqlcode=100)
break;
}
if (sqlcode<0)
{printf("error\n");
break;
}
...
};
exec sql close SX;//关闭游标
};
...
  • current形式的update和delete语句
exec sql  begin declare section;
...
exec sql end declare section;
...
Gets(deptname);
exec sql declare SX cursor for select Sno,Sname,Sage,Ssex from Student where Sdept=:deptname for update of Sage;//声明游标
exec sql open SX;//打开游标,进入缓冲区
while(1)
{
exec sql fetch SX into :Sno,:Sname,:Sage,:Ssex;//推进游标指针并取当前记录
if(sqlcode!=0)break;
printf("%s,%s,%d,%s\n",Sno,Sname,Sage,Ssex);
printf("update age?\n");
scanf("%c",&yn);
if(yn='y' or yn='Y')
{
print ("input new age;");
scanf("%d",&newage);
exec sal update Student set Sage =:newage where current of SX;
};
...
};
exec sql close SX;//关闭游标
...

3.7 嵌入式SQL的更多相关文章

  1. C语言中嵌入式SQL语句

    原文:[转载]C语言中嵌入式SQL语句 http://blog.csdn.net/cnlht/archive/2007/12/12/1930960.aspx原文地址 实验内容: 掌握SQL Serve ...

  2. 嵌入式SQL

    一.包含嵌入式SQL 程序的处理过程   由预处理程序对源程序进行扫描,识别出ESQL语句 把它们转换成主语言的函数调用语句,使主语言编译程序能够识别 最后由主语言的编译程序将整个源程序编译成目标码 ...

  3. SQL入门&lpar;4&rpar;&colon; 嵌入式SQL语言

    本节讲述内容: 1.嵌入式SQL 语言概述 2.变量声明与数据库连接 3.数据集与游标 4.可滚动游标与数据库的增删改 5.状态捕捉以及错误处理机制 (一)嵌入式SQL语言 之前我们所学的都是交互式S ...

  4. 第14讲:嵌入式SQL语言&lpar;基本技巧&rpar;

    一.交互式SQL的局限 & 嵌入式SQL的必要性 专业人员(如DBA)可以熟练地运用交互式SQL语言,但普通用户却不是那么容易上手,所以需要通过数据库应用程序来使用数据库.编写一个可以与数据库 ...

  5. 数据库原理及应用-SQL数据操纵语言(Data Manipulation Language)和嵌入式SQL&amp&semi;存储过程

    2018-02-19 18:03:54 一.数据操纵语言(Data Manipulation Language) 数据操纵语言是指插入,删除和更新语言. 二.视图(View) 数据库三级模式,两级映射 ...

  6. 什么是Pro&ast;C&sol;C&plus;&plus;,嵌入式SQL,第一个pro&ast;c程序,pro&ast;c&plus;&plus;&comma;Makefile&comma;Proc增删改查

     1 什么是Pro*C/C++ 1.通过在过程编程语言C/C++中嵌入SQL语句而开发出的应用程序 2.什么是嵌入式SQL 1.在通用编程语言中使用的SQL称为嵌入式SQL 2.在SQL标准中定义 ...

  7. 数据库系统学习(十)-嵌入式SQL语言之动态SQL

    第十讲 嵌入式SQL语言之动态SQL 静态SQL 区别变量和属性:高级语言向嵌入式SQL传递变量的方法 动态SQL 动态构造SQL语句是应用程序员必须掌握的重要手段 SQL语句的动态构造示例 根据界面 ...

  8. 数据库系统学习(九)-嵌入式SQL语言之基本技巧

    第九讲 嵌入式SQL语言之基本技巧 901 什么是嵌入式SQL语言 交互式SQL语言的局限性 嵌入式SQL语言 交互式和嵌入式语言的对比 高级语言中使用嵌入式语言需要解决的问题 902 程序与数据库连 ...

  9. 数据库-第八章 数据库编程-8&period;1 嵌入式SQL

    嵌入式SQL 一.嵌入式SQL的处理过程 1.嵌入式SQL语句的基本格式 2.嵌入式SQL的处理过程 3.主语言访问数据库的基本步骤 ⅰ建立数据库连接 ⅱ定义必要的主变量和数据通信区 ⅲ访问数据库并返 ...

随机推荐

  1. BPM始终服务于人,落脚于人

    数字经济时代下,云计算.大数据.移动互联已经成为当下企业必须采取的武装力量.随着互联网+.中国制造2025.工业4.0等国家战略的引导与支持,无数的企业在这场数字化浪潮中使尽浑身解数,想要抓住机遇奋力 ...

  2. Monkey环境搭建

    一.Monkey 1)Monkey是什么? Monkey是SDK中附带的一个工具.是Android中的一个命令行工具,可以运行在模拟器里或实际设备中.它向系统发送伪随机的用户事件流(如按键输入.触摸屏 ...

  3. ubuntu下安装Node&period;js(源码安装)

    最近使用hexo的过程中出现了问题,中间载nodejs安装的时候也耽误了些许时间,所以在此记录一下安装的过程. 环境:ubuntu14.0.4LTS,安装nodejs版本node-v0.10.36.t ...

  4. oracle10G&sol;11G官方下载地址集合 直接迅雷下载

    Oracle Database 11g Release 2 (11.2.0.1.0) for Microsoft Windows (64-bit)   http://download.oracle.c ...

  5. Update操作浅析,一定是先Delete再Insert吗?

    Update操作一定是先Delete再Insert吗? Update在数据库中的执行是怎么样的?“Update操作是先把数据删除,然后再插入数据”.在网上看了很多也都是这么认为的.但在查阅到一些不同看 ...

  6. wsdl 关于nillable和minOccurs 在&period;NET和java中的不同

    术语约定文章中会反复出现[值类型].[包装类型].[普通引用类型].[元素节点]和[元素取值]的表述1> [值类型]指的是java和.NET中的基本数据类型,如:int:2> [包装类型] ...

  7. 生活小助手--Android项目

    每次想做一个Android项目都不知道要怎么开始,所谓前期工作,都是辅助于项目能顺利完成而做的. 每一个项目开始都要有几首准备: 第一,项目要做什么? 第二,项目中有那些版块? 项目的概要设计 项目流 ...

  8. iReport默认参数和变量的含义解析【转】

    iReport默认参数和变量的含义解析[转] http://uule.iteye.com/blog/775338 参考:http://blog.csdn.net/terryzero/article/d ...

  9. MySQL数据库常见操作

    数据库连接与关闭:mysql -h 服务器主机地址 -u 用户名 -p 用户密码 创建新用户并授权:grant 权限 on 数据库.数据表 to 用户名@登录主机 identified by &quo ...

  10. blfs(systemd版本)学习笔记-构建gnome桌面系统

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 大概思路: lfs(系统)+xorg(驱动)+gnome(桌面组件) 链接: lfs(systemd版本)学习笔记系列:http ...