【数据库系统】数据库编程
嵌入式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
【数据库系统】数据库编程相关推荐
- 【梳理】数据库系统概论 第8章 数据库编程 8.1 嵌入式SQL 8.2 过程化SQL 8.3 存储过程和函数 8.4 ODBC编程
教材:王珊 萨师煊 编著 数据库系统概论(第5版) 高等教育出版社 注:文档高清截图在后 第8章 数据库编程 标准SQL是非过程化的查询语言,操作统一.面向集合.功能丰富.使用简单.非过程化语言是相对 ...
- 数据库系统原理 - - (5)数据库编程
感谢内容提供者:金牛区吴迪软件开发工作室 上一篇:数据库系统原理 - - (4)SQL与关系数据库基本操作 文章目录 第五章:数据库编程 一.存储过程 1.存储过程的基本概念 2.创建存储过程 1)D ...
- 数据库笔记整理--基于《数据库系统概论》第五版王珊一书|第八章--数据库编程知识整理和课后习题答案
该系列的博客都是基于<数据库系统概论>第五版王珊一书 前提: 因为最近要升学的原因,再加上重温数据库部分内容,所以整理一份比较详细且重点的笔记.适合有考研升学需求的人收藏 -------- ...
- Python环境下的数据库编程
数据库编程 简介 数据库三种数据模型 ADO.DAO.ODBC 使用DAO访问数据库 使用ODBC 访问数据库 三者区别 简介 在应用程序中有很多信息需要存储起来,存储的方式有多种,数据库就是其中的一 ...
- Windows数据库编程接口简介
数据库是计算机中一种专门管理数据资源的系统,目前几乎所有软件都需要与数据库打交道(包括操作系统,比如Windows上的注册表其实也是一种数据库),有些软件更是以数据库为核心因此掌握数据库系统的使用方法 ...
- 为什么使用JDBC数据库编程
为什么使用JDBC数据库编程 本文节选自<21天学通JAVA>一书 在JDBC数据库编程中经常要使用ODBC.所以,在讲述JDBC的驱动程序分类之前,首先介绍什么是ODBC.ODBC是指O ...
- 数据库编程入门培训(一)
最近刚刚对团队的新队员进行了数据库编程的入门培训,我把培训资料整理了一下,发布在这里,希望能够对更多的数据库初学者有所帮助.本文作为第一讲,主要讲述数据库的一些基本概念,具体的数据库编程将在下一篇文章 ...
- 深入浅出Qt数据库编程:从基本操作到高级技巧
深入浅出Qt数据库编程:从基本操作到高级技巧 (Demystifying Qt Database Programming: From Basic Operations to Advanced Tech ...
- Go语言 数据库编程
Go语言 文章目录 Go语言 20. 数据库编程 20.1 MySQL简介 20.1.1 安装MySQL 20.1.2 MySQL常见命令 20.2 database/sql 20.3 数据库基本操作 ...
- 【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. ...
最新文章
- 我们准备在网关中支持GrahpQL了
- Linux之父警告全球程序员:我刚发布的5.12内核有bug,你们千万别用
- 屏幕输出语句_2.2 数据输入与输出
- rhel 8.2不识别unicode_Unicode的文本处理二三事
- 使用python完成冒泡排序_python 冒泡排序优化,用递归实现冒泡排序
- hdu 2275 Kiki Little Kiki 1 水题
- c语言保存文件格式如何改回来,急求如何将下列C语言程序数据存储到文件中?...
- VMware vSAN性能测试那点后续的事
- ionic 支持float吗_oppok7x怎么样值得买吗 oppok7x介绍
- eclipse启动tomcat报错:org.apache.logging.log4j.web.Log4jServletContextListener
- windows下如何安装pip
- java皮卡丘代码_Picachu代码源代码,皮卡丘,源码
- C++学习笔记(达内视频版)
- RealSense D435i数据录制 VINS离线运行
- Altium Designer使用--出现的错误报告
- ICCV 2021 | FACIAL :动态谈话人脸视频生成,姿态,眨眼皆可控!
- 程序员不要轻易去上海
- 微信后台服务器能查撤回的消息吗,微信撤回的消息还能看到吗?查看方法介绍...
- 用pandas新建excel并设置表头
- Science fiction list