可以放入所有高级语言中去,如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入门(4): 嵌入式SQL语言

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

  4. 第14讲:嵌入式SQL语言(基本技巧)

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

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

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

  6. 什么是Pro*C/C++,嵌入式SQL,第一个pro*c程序,pro*c++,Makefile,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.1 嵌入式SQL

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

随机推荐

  1. [HDOJ5542]The Battle of Chibi(DP,树状数组)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5542 题意:n个数中找m个数,使得从左到右读是上升的子序列.问一共有多少种. dp(i,j)表示取到第 ...

  2. sql默认启动密码

    首先启动sqlplus输入用户名:sqlplus / as sysdba密码空缺如果用户被锁定,记得加上SQL> alter user dbsnmp account unlock; User a ...

  3. poj 2985 The k-th Largest Group 树状数组求第K大

    The k-th Largest Group Time Limit: 2000MS   Memory Limit: 131072K Total Submissions: 8353   Accepted ...

  4. 作用域内优先级及this指针

    函数声明>变量声明 作用域:顶部----------------------> 函数声明会覆盖变量声明,但不会覆盖变量赋值 this指针不是变量.当调用括号的左边不是引用类型而是其它类型, ...

  5. 关于【bootstrap modal 模态框弹出瞬间消失的问题】

    前提是你没有重复引入bootstrap.js\bootstrap.min.js和modal.js.一下提供一个小例子. <button class="btnbtn-primary bt ...

  6. Android简单登陆页面

    布局: 线性布局+相对布局 日志打印: 利用LogCat和System.out.println打印观察. Onclick事件是采用过的第四种: 在配置文件中给Button添加点击时间 涉及知识: 通过 ...

  7. iOS - OC NSRect 位置和尺寸

    前言 结构体 这个结构体用来表示事物的坐标点和宽高度. typedef CGRect NSRect; struct CGRect { CGPoint origin; CGSize size; }; t ...

  8. 关于Java控制台输入输出乱码问题

    产生原因:因为这个开源项目的默认字符编码为UTF-8,所以我的控制台的字符编码也自动变成了UTF-8,而键盘的输入流的默认格式是GBK格式,这样就造成了在GBK转UTF-8的过程中产生的奇数乱码错误( ...

  9. SonarLint插件的安装与使用

    注意:版本要求Eclipse(4.2,3.8)以上,Java3.1.2,JavaScript 2. 一.SonarLint插件的安装方式 1.安装方式一:在线安装 1)Eclipse工具栏选择Help ...

  10. CSS3_新特性预览

    一.强大的CSS选择器 以前我们通常用class. ID 或 tagname 来选择HTML元素,CSS3的选择器强大的难以置信.  它们可以减少在标签中的class和ID的数量更方便的维护样式表.更 ...