嵌入式SQL的处理过程:

嵌入式SQL是将SQL语句嵌入程序设计语言中,被嵌入的设计语言为主语言。

当主语言为C语言时,语法格式为:

EXEC SQL <SQL语句>

嵌入式SQL语句与主语言之间的通信:

将SQL嵌入到高级语言中混合编程,SQL语句负责操纵数据库,高级语言负责控制逻辑流程。

嵌入式SQL与源程序工作单元之间的通信主要包括:

(1)向主语言传递SQL语句的执行状态,使主语言能够根据此信息控制程序流程

主要用SQL通信区实现

(2)主语言向SQL提供参数,主要用主变量来实现

(3)将SQL语句查询数据库的结果交主语言处理,主要用主变量和游标实现

SQL通信区SQLCA:

是一个数据结构,SQL语句执行后,系统反馈给应用程序信息(描述系统当前工作状态和运行环境),将信息送到SQL通信区。应用程序从SQL通信区中取出这些状态信息,据此决定接下来执行的语句。

主变量:

嵌入式SQL语句中可以使用主语言的程序变量来输入或输出数据,该变量称为主变量。

主变量分为输入(到SQL)主变量和输出(到应用程序)主变量。

指示变量:是一个整型变量,用来指示所指主变量的值或条件,一个主变量可以附带一个指示变量。可以判断主变量是否为空。

游标:

SQL面向集合,一条SQL语句可以产生或处理多条记录,而主语言是面向记录的,一组主变量一次只能存放一条记录。所以引入了游标的概念。

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

游标的使用:

①说明游标:

  exec sql declare <游标名> cursor for <select语句>      --此时不执行select

②打开游标:

    exe sql open<游标名>

③推进游标指针并获取当前记录

exec sql fetch <游标名> into <主变量>[<指示变量>][<主变量>[指示变量]]…

④关闭游标

 exec sql close<游标名>

CURRENT形式的update和delete语句要用子句:

where current of <游标名>

当游标定义中的SELECT语句有union或order by子句,或者该select 语句相当于定义了一个不可更新的视图时,不能使用current形式的update和delete子句。

存储过程

存储过程是由过程化SQL语句书写的过程,这个过程经过编译和优化后存储在数据库服务器中,使用时只要调用即可。

创建存储过程:

create (or replace可以不写) procedure 过程名(参数1,参数2,...) as <过程化SQL>;

利用存储过程实现从账户1转指定数额的款项到账户2中。

账户关系表Account(Accountnum,Total)

create (or replace) procedure

transfer(inAccount int,outAccount int,amount float)

as declare

totalDepositOut Float;

totalDepositIn  Float;

inAccountnum  Int;

BEGIN

    select Total into totalDepositOut from Account

    where accountnum=outAccount;

if totalDepositOut is null then

rollback;//回滚事务

return;

endif

if totalDepositOut<amount then // 如果账户存款不足

rollback; //回滚事务

return;

endif

   select Accountnum into inAccountnum from Account 

   where accountnum=inAccount;

if inAccount is null then

rollback;

return;

endif

update Account set total=total-amount

where accountnum=outAccout;

update Account set total=total+amount

where accountnum=inAccount;

commit; 提交事务

    end

执行存储过程:

call procedure 过程名(参数1,参数2)

重命名:

alter procedure 过程名1 rename to 过程名2;

删除存储过程:

drop procedure 过程名()

(*)存储过程中使用游标:

create (or replace) function me() returns void

as

declare mcs cursor for

select title,year,name from movies,movieExec where producerC=cert;

declare mt char(20);

my int;

en char(12);

begin

open mcs

  loop

fetch mcs into mt,my,en;

     if not found then

             exit;

       end if;

insert into M values(mt,my,en);

    end loop;

close mcs;

end

函数

函数必须指定返回类型

create or replace function 函数名(参数1,参数2,...) returns 类型 as <过程化SQL块>

函数执行语句格式:

call 函数名(参数1,参数2,...)

函数重命名:

alter function 过程名1 rename to 过程名2

重新编译:

alter function 过程名 complie;

(背)习题:将maker作为输入参数,求该制造商生成的Laptop内存容量(ram)的平均值总和

create or replace function meanram(in m char(1),out mean float,out sumran int)

as $$

declare count_ram int;

declare getram int;

begin

mean:=0.0;

sumram:=0;

count_ram:=0;

for getram select ram from product,laptop

where product.model=laptop.model and maker=m;

loop

count_ram:=count_ram+1;

sumram:=sumram+getram;

end loop;

mean:=sumram/count_ram;

end;

$$language plpgsql;

creat or replace function Pubmprice (in pub_lisher char(20),out mean float)

as $$

declare sum float;

declare getprice int;

declare count int;

begin

sum:=0;

mean:=0;

count:=0;

for getprice in select price from Book where publisher=pub_lisher

loop

sum:=sum+getprice;

count:=count+1;

end loop;

mean:=sum/count;

end;

$$language plpgsql

【数据库系统】数据库编程相关推荐

  1. 【梳理】数据库系统概论 第8章 数据库编程 8.1 嵌入式SQL 8.2 过程化SQL 8.3 存储过程和函数 8.4 ODBC编程

    教材:王珊 萨师煊 编著 数据库系统概论(第5版) 高等教育出版社 注:文档高清截图在后 第8章 数据库编程 标准SQL是非过程化的查询语言,操作统一.面向集合.功能丰富.使用简单.非过程化语言是相对 ...

  2. 数据库系统原理 - - (5)数据库编程

    感谢内容提供者:金牛区吴迪软件开发工作室 上一篇:数据库系统原理 - - (4)SQL与关系数据库基本操作 文章目录 第五章:数据库编程 一.存储过程 1.存储过程的基本概念 2.创建存储过程 1)D ...

  3. 数据库笔记整理--基于《数据库系统概论》第五版王珊一书|第八章--数据库编程知识整理和课后习题答案

    该系列的博客都是基于<数据库系统概论>第五版王珊一书 前提: 因为最近要升学的原因,再加上重温数据库部分内容,所以整理一份比较详细且重点的笔记.适合有考研升学需求的人收藏 -------- ...

  4. Python环境下的数据库编程

    数据库编程 简介 数据库三种数据模型 ADO.DAO.ODBC 使用DAO访问数据库 使用ODBC 访问数据库 三者区别 简介 在应用程序中有很多信息需要存储起来,存储的方式有多种,数据库就是其中的一 ...

  5. Windows数据库编程接口简介

    数据库是计算机中一种专门管理数据资源的系统,目前几乎所有软件都需要与数据库打交道(包括操作系统,比如Windows上的注册表其实也是一种数据库),有些软件更是以数据库为核心因此掌握数据库系统的使用方法 ...

  6. 为什么使用JDBC数据库编程

    为什么使用JDBC数据库编程 本文节选自<21天学通JAVA>一书 在JDBC数据库编程中经常要使用ODBC.所以,在讲述JDBC的驱动程序分类之前,首先介绍什么是ODBC.ODBC是指O ...

  7. 数据库编程入门培训(一)

    最近刚刚对团队的新队员进行了数据库编程的入门培训,我把培训资料整理了一下,发布在这里,希望能够对更多的数据库初学者有所帮助.本文作为第一讲,主要讲述数据库的一些基本概念,具体的数据库编程将在下一篇文章 ...

  8. 深入浅出Qt数据库编程:从基本操作到高级技巧

    深入浅出Qt数据库编程:从基本操作到高级技巧 (Demystifying Qt Database Programming: From Basic Operations to Advanced Tech ...

  9. Go语言 数据库编程

    Go语言 文章目录 Go语言 20. 数据库编程 20.1 MySQL简介 20.1.1 安装MySQL 20.1.2 MySQL常见命令 20.2 database/sql 20.3 数据库基本操作 ...

  10. 【Java高级程序设计学习笔记】数据库编程

    目录 1.1 数据库基础 1.1.1 关系数据库 1.1.2 结构化查询语言 1.2 JDBC 1.2.1 工作原理 1.2.1.1 java.sql.Connection 1.2.1.2 java. ...

最新文章

  1. 我们准备在网关中支持GrahpQL了
  2. Linux之父警告全球程序员:我刚发布的5.12内核有bug,你们千万别用
  3. 屏幕输出语句_2.2 数据输入与输出
  4. rhel 8.2不识别unicode_Unicode的文本处理二三事
  5. 使用python完成冒泡排序_python 冒泡排序优化,用递归实现冒泡排序
  6. hdu 2275 Kiki Little Kiki 1 水题
  7. c语言保存文件格式如何改回来,急求如何将下列C语言程序数据存储到文件中?...
  8. VMware vSAN性能测试那点后续的事
  9. ionic 支持float吗_oppok7x怎么样值得买吗 oppok7x介绍
  10. eclipse启动tomcat报错:org.apache.logging.log4j.web.Log4jServletContextListener
  11. windows下如何安装pip
  12. java皮卡丘代码_Picachu代码源代码,皮卡丘,源码
  13. C++学习笔记(达内视频版)
  14. RealSense D435i数据录制 VINS离线运行
  15. Altium Designer使用--出现的错误报告
  16. ICCV 2021 | FACIAL :动态谈话人脸视频生成,姿态,眨眼皆可控!
  17. 程序员不要轻易去上海
  18. 微信后台服务器能查撤回的消息吗,微信撤回的消息还能看到吗?查看方法介绍...
  19. 用pandas新建excel并设置表头
  20. Science fiction list

热门文章

  1. Ucenter通信失败(终极解决)
  2. Autoware1.14-摄像头目标检测YOLO-V3
  3. linux 强制重启 sysrq,用Magic SysRq键实现Linux安全重启
  4. ImageJ对荧光信号离散的细胞计数方法
  5. 如何做好自己的职业规划?
  6. WINDOWS 2003设置攻略
  7. MKOnlinePlayer在线音乐播放器
  8. 长篇好文,手机充电放电架构与工作流程原理讲解
  9. 阿里云崩“出圈”了!保护业务还得加一道同云跨可用区容灾!
  10. 五款最出色的数据恢复工具