2021年电大Oracle数据库编程形考任务4答案_第1页
2021年电大Oracle数据库编程形考任务4答案_第2页
2021年电大Oracle数据库编程形考任务4答案_第3页
2021年电大Oracle数据库编程形考任务4答案_第4页
2021年电大Oracle数据库编程形考任务4答案_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2021年国家开放大学电大Oracle数据库编程形考任务4答案

形考任务4教学实践3

创建一个存储过程,实现在user.tables查询参数给出的表名是否存在,并从存储过程中返

回结果。

创建一个名称为sch的数据表,表结构如表1所示,将表2中的数据插入sch表中。

字段名数据类型主键外键非空唯一自增

idint(10)是否是是否

namevarchar(50)否否是否否

glassvarchar(50)否否是否否

表2:

idnameglass

1xiaomingglassl

2xiaojunglass2

第一步:创建一个sch表,并向sch表中插入表2中的数据,代码如下:

mysql>createtablesch

->(

->idint(lO),

->namevarchar(50),

->glassvarchar(SO)

->);

QueryOK,0rowsaffected(0.11sec)

mysql>insertintoschvaluefl/xiaoming'/glass1'),

->(Z/xiaojun'Jglass2');

QueryOK,2rowsaffected(0.05sec)

Records:2Duplicates:0Warnings:0

mysql>descsch;

+------+-------------+------+-----+---------+-------+

|Field|Type|Null|Key|Default|Extra|

+------+-------------+------+-----+---------+-------+

|id|int(10)|YES||NULL|

|name|varchar(50)|YES||NULL|

|glass|varchar(50)|YES||NULL|

3rowsinset(0.00sec)

•1

•2

•3

•4

5

6

•7

•8

•9

・10

•11

・12

•13

・14

•15

・16

•17

・18

•19

•20

•21

•22

通过select*fromsch来查看插入表格的内容,SQL语句如下:

idnameglass

1xiaomingglass1

2xiaojunglass2

第二步:创建一个存储函数用来统计表sch中的记录数。

mysql>createfunctioncount_sch()

->returnsint

->return(selectcount(*)fromsch);

QueryOK,0rowsaffected(0.05sec)

mysql>selectcount_sch();

|count_sch()|

2I

+

1rowinset(0.00sec)

•1

•2

•3

・4

•5

・6

•7

・8

•9

・10

11

•12

创建的存储函数名称为count_sch,通过selectcount_sch()查看函数执行的情况,这个表中只

有两条记录,得到的结果也是两条记录,说明函数成功执行。

第三步:创建一个存储过程,通过调用存储函数的方法来获取表sch中的记录数和sch表中

id的和。

创建一个存储过程add_id,同时使用前面创建的存储函数返回表sch中的记录数,计算出表

中所有的id之和。代码如下:

mysql>delimiter//

mysql>createprocedureaddjd(outcountint)

->begin

->declareitmpint;

->declarecurjdcursorforselectidfromsch;

->declareexithandlerfornotfoundclosecurjd;

->selectcount_sch()intocount;

->set@sum=0;

->opencurjd;

->repeat

->fetchcurjdintoitmp;

->ifitmp<10

->thenset@sum=@sum+itmp;

->endif;

->until0endrepeat;

->closecurjd;

->end//

QueryOK,0rowsaffected(0.06sec)

mysql>select@a,@sum//

|@a|@sum|

|NULL|NULL|

1rowinset(0.00sec)

mysql>delimiter;

•1

•2

•3

•4

•5

•6

•7

•8

•9

•10

・11

•12

•13

・14

•15

•16

•17

•18

•19

•20

・21

•22

•23

•24

•25

•26

•27

•28

表sch中只有两条记录,所有id的和为3,和预想的执行结果完全相同。这个存储过程创建

了一个curjd的光标,使用这个光标来获取每条记录的id,使用repeat循环语句来实现所

有id号相加。

几个小问题:

1、MySQL存储过程和存储函数有什么区别?

・本质上都是存储程序。函数只能通过return语句返回单个值或表对象;存储过程不

允许执行return,但可以通过out参数返回多个值。

・函数限制比较多,不能用临时表,只能用表变量,还有一些函数都不可用。存储过

程的限制相对就比较少。

・函数可以嵌入sql语句中使用,可以在select语句中作为查询语句中的一个部分调用,

而存储过程一般是作为一个独立的部分来执行。

2.存储过程中的代码可以改变吗?

・MySQL还不提供对已存在的存储过程代码的修改。如果必须修改存储过程,就必须

使用drop语句删除之后再重新编写,或者创建一个新的存储过程。

3.存储过程中可以调用其他存储过程吗?

存储过程包含用户定义的sql语句集合,可以使用call语句调用存储过程,当然在存储过程

中也可以使用call语句调用其他存储程序,但是不能使用drop语句删除其他存储过程。

4.存储过程的参数不能与数据表中的字段名相同。

在定义存储过程参数列表时,应注意把参数名与数据库表中的字段名区别开,否则将出现无

法预期的结果。

5.存储过程的参数可以使用中文吗?

一般情况下,可能会出现存储过程中传入中文参数的情况,例如,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论