存储过程详解

存储过程详解
存储过程详解

.

存储过程详解

一、存储过程简介

存储过程可以说是一个记录集吧,它是由一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个方法一样实现一些功能(对单表或多表的增删改查),然后再给这个代码块取一个名字,在用到这个功能的时候调用他就行了。

存储过程的好处:

1、由于数据库执行动作时,是先编译后执行的。然而存储过程是一个编译过的代码块,所以执行效率要比T-SQL语句高。

2、一个存储过程在程序在网络中交互时可以替代大堆的T-SQL语句,所以也能降低网络的通信量,提高通信速率。

3、通过存储过程能够使没有权限的用户在控制之下间接地存取数据库,从而确保数据的安全。小结:总之存储过程是好东西,在做项目时属于必备利器,下面介绍存储过程的基本语法。

二、存储过程的语法和参数讲解

存储过程的一些基本语法:

--------------创建存储过程-----------------

CREATE PROC [ EDURE ] procedure_name [ ; number ]

[ { @parameter data_type }

[ VARYING ] [ = default ] [ OUTPUT ]

] [ ,...n ]

[ WITH

{ RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]

[ FOR REPLICATION ]

AS sql_statement [ ...n ]

--------------调用存储过程-----------------

EXECUTE Procedure_name '' --存储过程如果有参数,后面加参数格式为:@参数名=value,也可直接为参数值value

--------------删除存储过程-----------------

drop procedure procedure_name --在存储过程中能调用另外一个存储过程,而不能删除另外一个存储过程

创建存储过程的参数:

1、procedure_name :

存储过程的名称,在前面加#为局部临时存储过程,加##为全局临时存储过程。

2、;number:

.

.

是可选的整数,用来对同名的过程分组,以便用一条DROP PROCEDURE 语句即可将同组的过程

一起除去。例如,名为orders 的应用程序使用的过程可以命名为orderproc;1、orderproc;2 等。DROP PROCEDURE orderproc 语句将除去整个组。如果名称中包含定界标识符,则数字不应包含在标识符中,只应在procedure_name 前后使用适当的定界符。

3、@parameter:

存储过程的参数。可以有一个或多个。用户必须在执行过程时提供每个所声明参数的值(除非定义了该参数的默认值)。存储过程最多可以有 2.100 个参数。使用@ 符号作为第一个字符来指定参数名称。参数名称必须符合标识符的规则。每个过程的参数仅用于该过程本身;相同的参数名称可以用在其它过程中。默认情况下,参数只能代替常量,而不能用于代替表名、列名或其它数据库对象的名称。有关更多信息,请参见EXECUTE。

4、data_type:

参数的数据类型。所有数据类型(包括text、ntext 和image)均可以用作存储过程的参数。不过,cursor 数据类型只能用于OUTPUT 参数。如果指定的数据类型为cursor,也必须同时指定VARYING 和OUTPUT 关键字。有关SQL Server 提供的数据类型及其语法的更多信息,请参见数据类型。说明对于可以是cursor 数据类型的输出参数,没有最大数目的限制。

5、VARYING:

指定作为输出参数支持的结果集(由存储过程动态构造,内容可以变化)。仅适用于游标参数。

6、default:

参数的默认值。如果定义了默认值,不必指定该参数的值即可执行过程。默认值必须是常量或NULL。如果过程将对该参数使用LIKE 关键字,那么默认值中可以包含通配符(%、_、[] 和[^])。

7、OUTPUT :

表明参数是返回参数。该选项的值可以返回给EXEC[UTE]。使用OUTPUT 参数可将信息返回给调用过程。Text、ntext 和image 参数可用作OUTPUT 参数。使用OUTPUT 关键字的输出参数可以是游标占位符。

8、RECOMPILE:

表明SQL Server 不会缓存该过程的计划,该过程将在运行时重新编译。在使用非典型值或临时值而不希望覆盖缓存在内存中的执行计划时,请使用RECOMPILE 选项。

9、ENCRYPTION:

表示SQL Server 加密syscomments 表中包含CREATE PROCEDURE 语句文本的条目。使用ENCRYPTION 可防止将过程作为SQL Server 复制的一部分发布。说明在升级过程中,SQL Server 利用存储在syscomments 中的加密注释来重新创建加密过程。

10、FOR REPLICATION :

指定不能在订阅服务器上执行为复制创建的存储过程。.使用FOR REPLICATION 选项创.

.

WITH 建的存储过程可用作存储过程筛选,且只能在复制过程中执行。本选项不能和

选项一起使用。RECOMPILE

、AS :11 指定过程要执行的操作。、sql_statement :12 语句。但有一些限制。SQL Transact-过程中要包含的任意数目和类型的看过这些基本语法后,下面我就根据语法创建各式的存储过程。小结:

三、创建存储过UserAccount

UserID

UserName

PassWord

RegisterTime

RegisterIP

62012-12-311266

52013-01-015185

1 2013-01-01 1 1 19

2 2 2 2013-01-01 20

3 3 21 3 2013-01-01

4 2013-01-01 22 4 4

5 23 5 5 2013-01-01

7 25 7 7 2013-01-01

8 8 26 2013-01-01 8

NULL

NULL

NULL

NULL

NULL

针对上面的表,我使用存储过程对它做一些操作:

1. 只返回单一记录集的存储过程

-------------创建名为GetUserAccount的存储过程----------------

create Procedure GetUserAccount

as

select * from UserAccount

go

-------------执行上面的存储过程----------------

exec GetUserAccount

结果:相当于运行select * from UserAccount 这行代码,结果为整个表的数据。

.

.

2.没有输入输出的存储过程

-------------创建名为GetUserAccount的存储过程----------------

create Procedure inUserAccount

as

insert into UserAccount (UserName,[PassWord],RegisterTime,RegisterIP)

values(9,9,'2013-01-02',9)

go

-------------执行上面的存储过程----------------

exec inUserAccount

结果:相当于运行insert into UserAccount (UserName,[PassWord],RegisterTime,RegisterIP) values(9,9,'2013-01-02',9) 这行代码。

3.有返回值的存储过程

-------------创建名为GetUserAccount的存储过程----------------

create Procedure inUserAccountRe

as

insert into UserAccount (UserName,[PassWord],RegisterTime,RegisterIP)

values(10,10,'2013-01-02',10)

return @@rowcount

go

-------------执行上面的存储过程----------------

exec inUserAccountRe

解释:这里的@@rowcount为执行存储过程影响的行数,执行的结果是不仅插入了一条数据,还返回了一个值即return value =1 ,这个可以在程序中获取,稍后在c#调用存储过程中会有说到。

4.有输入参数和输出参数的存储过程

-------------创建名为GetUserAccount的存储过程----------------

create Procedure GetUserAccountRe

@UserName nchar(20),

@UserID int output

as

if(@UserName>5)

select @UserID=COUNT(*) from UserAccount where UserID>25

else

set @UserID=1000

go

-------------执行上面的存储过程----------------

.

.

exec GetUserAccountRe '7',null

解释:@UserName为输入参数,@UserID为输出参数。运行结果为@userID为COOUT(*)即=1。

5. 同时具有返回值、输入参数、输出参数的存储过程

-------------创建名为GetUserAccount的存储过程----------------

create Procedure GetUserAccountRe1

@UserName nchar(20),

@UserID int output

as

if(@UserName>5)

select @UserID=COUNT(*) from UserAccount where UserID>25

else

set @UserID=1000

return @@rowcount

go

-------------执行上面的存储过程----------------

exec GetUserAccountRe1 '7',null

结果:@userID为COOUT(*)即=1,Retun Value=1。

6.同时返回参数和记录集的存储过程

-------------创建名为GetUserAccount的存储过程----------------

create Procedure GetUserAccountRe2

@UserName nchar(20),

@UserID int output

as

if(@UserName>5)

select @UserID=COUNT(*) from UserAccount where UserID>25

else

set @UserID=1000

select * from UserAccount

return @@rowcount

go

-------------执行上面的存储过程----------------

exec GetUserAccountRe2 '7',null

结果:返回执行select * from UserAccount 这句代码的结果集,同时@userID为COOUT(*)即=1,Retun Value=9。

7.返回多个记录集的存储过程

.

.

-------------创建名为GetUserAccount的存储过程----------------

create Procedure GetUserAccountRe3

as

select * from UserAccount

select * from UserAccount where UserID>5

go

-------------执行上面的存储过程----------------

exec GetUserAccountRe3

结果:返回两个结果集,一个为select * from UserAccount,另一个为select * from UserAccount where UserID>5 。

小结:上面我们创建了各式的存储过程,下面看我们在c#中怎样调用这些存储过程。

c#调用存储过程以及附带SQLServer数据库的一些全局变量(见程序)

.

存储过程的典型例子

可能有不少朋友使用SQL SERVER做开发也已经有段日子,但还没有或者很少在项目中使用存储过程,或许有些朋友认为根本没有必要使用存储过程等等。其实当你一个项目做完到了维护阶段时,就会发现存储过程给我们带来了好处了,修改方便,不能去改我们的应用程序,只需要改存储过程的内容,而且还可以使我们的程序速度得到提高。 QUOTE: SQL SERVER 联机丛书中的定义: 存储过程是保存起来的可以接受和返回用户提供的参数的 Transact-SQL 语句的集合。 可以创建一个过程供永久使用,或在一个会话中临时使用(局部临时过程),或在所有会话中临时使用(全局临时过程)。 也可以创建在 Microsoft SQL Server 启动时自动运行的存储过程。 要使用存储过程,首先我们必需熟悉一些基本的T-SQL语句,因为存储过程是由于一组T-SQL语句构成的,并且,我们需要了解一些关于函数、过程的概念,因为我们需要在应用程序中调用存储过程,就像我们调用应用程序的函数一样,不过调用的方法有些不同。 下面我们来看一下存储过程的建立和使用方法。 一、创建存储过程 和数据表一样,在使用之前我们需要创建存储过程,它的简明语法是: QUOTE: CREATE PROC 存储过程名称 [参数列表(多个以“,”分隔)] AS SQL 语句 例: QUOTE: CREATE PROC upGetUserName @intUserId INT, @ostrUserName NVARCHAR(20) OUTPUT -- 要输出的参数 AS BEGIN -- 将uName的值赋给 @ostrUserName 变量,即要输出的参数 SELECT @ostrUserName=uName FROM uUser WHERE uId=@intUserId END 其中 CREATE PROC 语句(完整语句为CREATE PROCEDURE)的意思就是告诉SQL SERVER,

游标与存储过程

实验5 游标与存储过程 1、实验目的 1. 学习实践游标与存储过程 2. 学习实践PL/SQL编程 2、实验原理 1. PL/SQL编程 2. 游标与存储过程 3、实验器材 1. 安装了Oracle,或者MySQL的计算机 4、实验内容 3. 创建表 Code Name Amt 01服装900 0101男装300 010101西装100 010102休闲装200 0102女装390 010201套装120 010202职业装130 010203休闲装140 0103童装210 02电器290 0201进口140 0202国产150 03日用品300 2.编写Oracle的存储过程,实现层次结构的逐级求和。

3.应用sql*plus,编写PL/SQL调用步骤2编写的存储过程。 五、实验报告要求 请将相应SQL语句写在实验报告上 1、 create table example(code number(10),name varchar2(20),amt number(10)); 2、 insert into example values(01,'服装',900); 3、 insert into example values(0101,'男装',300); 4、 insert into example values(010101,'西装',100); 5、 insert into example values(010102,'休闲装',200); 6、 insert into example values(0102,'女装',390); 7、 insert into example values(010201,'套装',120); 8、 insert into example values(010202,'职业装',130); 9、 insert into example values(010203,'休闲装',140); 10、 insert into example values(0103,'童装',210); 11、 insert into example values(02,'电器',290);、 12、 insert into example values(0201,'进口',140); select * from example; CODE NAME AMT --------- -------------------- ---------- 1 服装 900 101 男装 300 10101 西装 100 10102 休闲装 200 102 女装 390 10201 套装 120 10202 职业装 130 10203 休闲装 140

oracle统计分析信息拷贝介绍

数据库统计分析信息拷贝介绍 1.数据库统计分析简介 统计分析主要包括产生表及索引的统计信息。表的统计信息主要包括表的行数,每行的平均长度(字节),空闲块,统计时间等信息;索引的统计信息主要包括行数、层数、叶块数、统计时间等信息。另外ORACLE还可以统计列及数据不对称信息。 ORACLE执行成本分析时首先取出所应用表及索引的统计数据进行分析,其中数据行数是一个重要的参数,因为ORACLE在分析表大小时行数为主要参数,如果进行两个表联合时,ORACLE会通过分析表的大小,决定应用小表进行全表查询,而大表执行联合查询,这种性能明显高于先大表进行全表扫描。索引的统计信息对分析也产生比较大的影响,如ORACLE 通过统计可以分析产生多个索引的优先级及索引的实用性来确定最优的索引策略。ORACLE 还可以统计列及数据对称信息以产生更精确的分析。 dbms_stats能良好地估计统计数据(尤其是针对较大的分区表),并能获得更好的统计结果,最终制定出速度更快的SQL执行计划。 2.存储过程解析 2.1DBMS_STATS.GATHER_TABLE_STATS介绍 DBMS_STATS.GATHER_TABLE_STATS功能为:统计表、列、索引的统计信息。DBMS_STATS.GATHER_TABLE_STATS的语法如下: DBMS_STATS.GATHER_TABLE_STATS ( ownname VARCHAR2, tabname VARCHAR2, partname VARCHAR2, estimate_percent NUMBER, block_sample BOOLEAN, method_opt VARCHAR2,

sap存储过程

SBO中的一个极具震撼力的的流程控制功能详细分析 在我开发的项目过程中,许多客户和顾问向我提出了许许多多的功能需求。但我在分析研究了这些需求后发现许多的需求我们顾问均可以解决。尤其是流程控制方面的需求。我把这方面的一些粗浅看法整理出来,供大家分享。 一、各种顾问在项目实施过程中出现过的看是需要研发解决的需求 1、如何控制不同的销售人员只能修改自己管理的客户的数据? 2、如何控制不同的销售人员只能录入修改自己的销售订单? 3、如何给sbo的任何单据(我这里强调任何单据,包括销售订单,销售发货单、发票、采购订单、采购收货单、采购发票、财务凭证、库存转储等等)加上自己的逻辑验证控制(例如不填某一个字段不用许sbo添加到数据库) 4、如何在各种单据或主数据添加修改过程中加上自己想要的功能? 以前这些需求一般都是顾问要求研发人员来参与协同工作来解决。我们现在要讨论的就是这些问题统统不再研发,顾问可轻松搞定。当然这要求顾问要具备一些基础知识。 二、顾问要解决这些问题要具备的基础知识 1、sql的知识。我一直认为,一个ERP软件顾问高手对SQL必须的基本素质。他可以让你随心所欲从这个充满金矿的ERP数据海洋里找到你想要的金子。我认为有志于成为ERP软件顾问高手的朋友在此付出一点时间和金钱是绝对值得的!它是打开我们理解ERP软件内核的金钥匙,也是会让我们终生受益的一种技能。无论我们从事的是哪一个ERP系统的顾问工作! 2、SBO对象的概念与规则。 当然,我觉得您在读这篇杂论前要有坚持读下去的意志。尽管这好像是有点枯燥乏味。但这点乏味的知识会给您带来无穷的想象力! SBO的DI对象,针对顾问通俗点简单点说就像物料主数据、客户主数据、销售订单、采购订单等等这些SBO里的东东。他们在SBO系统里都有一个编号,就像我们都有一个名字一样用于唯一识别。例如物料主数据的编号是:4。具体清单如下: Member Value oChartOfAccounts 1 oBusinessPartners 2 oBanks 3 oItems 4 oVatGroups 5 oPriceLists 6 oSpecialPrices 7 oItemProperties 8 oUsers 12 oInvoices 13 oCreditNotes 14 oDeliveryNotes 15 oReturns 16 oOrders 17 oPurchaseInvoices 18 oPurchaseCreditNotes 19 oPurchaseDeliveryNotes 20

C#调用存储过程简单完整例子讲解

C#调用存储过程简单完整例子https://www.360docs.net/doc/6211463268.html,/itblog/article/details/752869 创建存储过程 Create Proc dbo.存储过程名 存储过程参数 AS 执行语句 RETURN 执行存储过程 GO DECLARE @iRet INT, @PKDisp VARCHAR(20) SET @iRet = '1' Select @iRet = CASE WHEN @PKDisp = '一' THEN 1 WHEN @PKDisp = '二' THEN 2 WHEN @PKDisp = '三' THEN 3 WHEN @PKDisp = '四' THEN 4 WHEN @PKDisp = '五' THEN 5 ELSE 100 END DECLARE @i INT SET @i = 1 WHILE @i<10 BEGIN set @i=@i+1 PRINT @i END DECLARE @d INT set @d = 1 IF @d = 1 BEGIN -- 打印 PRINT '正确' END ELSE BEGIN PRINT '错误' END

CREATE PROC P_TEST @Name VARCHAR(20), @Rowcount INT OUTPUT AS BEGIN SELECT * FROM T_Customer WHERE NAME=@Name SET @Rowcount=@@ROWCOUNT END GO ---------------------------------------------------------------------------------------- --存储过程调用如下: ---------------------------------------------------------------------------------------- DECLARE @i INT EXEC P_TEST 'A',@i OUTPUT SELECT @i --结果 /* Name Address Tel ---------- ---------- -------------------- A Address Telphone (所影响的行数为 1 行) ----------- 1 (所影响的行数为 1 行) */ ---------------------------------------------------------------------------------------- --DotNet 部分(C#) --WebConfig 文件: ---------------------------------------------------------------------------------------- ......

ex11游标与存储过程答案

实验十一游标与存储过程 (1)创建游标,逐行显示表Customer.的记录,并用WHILE结构来测试@@Fetch_Status的返回值。输出格式如下: '客户编号'+'-----'+'客户名称'+'----'+'客户地址'+'-----'+'客户电话 '+'------'+'客户邮编'+'------' DECLARE cur_cust SCROLL cursor FOR SELECT* FROM customer DECLARE @p_CustId char(5) DECLARE @p_CustName char(20) DECLARE @p_address char(40) DECLARE @p_Tel char(10) DECLARE @p_Zip char(6) DECLARE @p_All char(100) SELECT @p_All='客户编号'+'------'+'客户名称'+'------'+'客户地址 '+'-------------------------------------'+'客户电话'+'-------'+'客户邮 编'+'------' PRINT @p_All OPEN cur_cust FETCH cur_cust into @p_CustId,@p_CustName,@p_address,@p_Tel,@p_Zip WHILE(@@fetch_status<>-1) BEGIN SELECT @p_All=@p_CustId+' '+@p_CustName+@p_address+@p_Tel+' '+@p_Zip print @p_All FETCH cur_cust into @p_CustId,@p_CustName,@p_address,@p_Tel,@p_Zip END PRINT'客户数目: '+CONVERT(char(5),@@CURSOR_ROWS) CLOSE cur_cust DEALLOCATE cur_cust

实验16 游标、存储过程和函数参考答案

实验十六游标、存储过程和函数 一、目的与要求 1.了解游标的概念和工作原理; 2.了解存储过程的分类和使用方法; 3.了解触发器的概念; 4.学习编写和执行自定义过程; 5.学习编写和执行自定义函数; 6.学习创建和使用触发器。 二、实验准备 1.首先要了解游标是映射在结果集中一行数据上的位置实体,有了游标,用户就可以访问结果集中的任意一行数据了。将游标放置到某行后,即可对该行数据进行操作,最常见的操作是提取当前行数据。 2.使用显式游标的步骤: (1)说明游标。 (2)打开游标。 (3)读取数据。 (4)关闭游标。 3.了解PL/SQL包括3种存储过程,即过程、函数和程序包。 4.了解触发器是一种特殊的存储过程,当指定表中的数据发生变化时自动运行。 三、实验内容 1.练习书上的例子10.1—10.24。 2.以上机实验经常用到的数据库LIB为例,编写过程P_ResetPrice,此过程的功能是将表图书中指定书号的单价更改为10.0,调用该过程将书号为’TP311.13/CM3’的单价更改为10.0,将程序写在实验报告中。 create or replace procedure P_ResetPrice (vBno in varchar2) as begin update 图书 set 单价=10.0 where 图书号=vBno; end; execute P_ResetPrice(‘TP311.13/CM3’); 3.编写一函数F_GetBName,该函数的功能是在图书中根据指定的书号,返回该书的书名,并在匿名块中调用函数F_GetBName找出编号为“TP311.132/ZG1”的书名,将程序写在实验报告中。 create function F_GetName (vtno IN 图书.图书号%Type) return 图书.书名%Type

《数据库与信息系统》实验4指导解析_9-10

实验四数据库操作语言SQL 一.实验目的 ?了解使用SQL中DDL语句创建数据库和表的方法 ?熟练掌握使用SQL中DML语句对数据库进行查询、插入、修改和删除等操作的方法?掌握可编程对象视图和存储过程的创建与使用方法,了解触发器的创建方法 二.实验环境及素材 ?MySQL和Navicat for MySQL ?bookstore数据库的脚本文件bookstore.sql 三.实验内容 首先创建一个bookstore数据库,执行bookstore.sql脚本文件实现表的创建及数据记录的添加。然后在bookstore数据库中完成以下题目(bookstore数据库设计说明参见10.1节)。 ①在Navicat for MySQL中,创建数据库bookstore。 ②右击数据库bookstore,选择“运行SQL文件…”,在对话框中浏览选择“bookstore.sql”文件,点击“开始”即可完成数据表定义及添加数据记录。 ③在左栏连接窗口展开数据库“bookstore”/表,右击“表”选“刷新”菜单,即可看到恢复的各数据表。 9.创建和使用存储过程。 解析:存储过程是经过编译的SQL语句的集合。用户首先创建存储过程,然后在程序中调用该存储过程执行。创建存储过程可以在Navicat for MySQL中使用向导建立,也可以使用SQL的CREATE PROCDURE语句。存储过程可以接受参数、也可将查询信息通过输出参数返回调用者。 常用存储过程的语法格式: CREATE PROCDURE 存储过程名( [形式参数列表]) SQL语句段 “形式参数列表”中多个参数之间用逗号分隔,如果没有参数,则()中为空。每个参数由输入输出类型、参数名和参数类型三部分组成,定义规则如下: [IN|OUT|INOUT 参数名类型 输入输出类型中:IN是输入参数,即把数据传递给存储过程;OUT是输出参数,即从存储过程返回值;INOUT表示输入输出,即传入也能返回值。默认为IN类型;参数名必须符合标识符规则;参数类型可以是MySQL支持的任意数据类型。 存储过程创建后,可以通过CALL语句调用执行存储过程。语法格式如下:

oracle存储过程讲解及实例

存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR REPLACE PROCEDURE 是一个SQL语句通知Oracle数据库去创建一个叫做skeleton存储过程, 如果存在就覆盖它; 行2: IS关键词表明后面将跟随一个PL/SQL体。 行3: BEGIN关键词表明PL/SQL体的开始。 行4: NULL PL/SQL语句表明什么事都不做,这句不能删去,因为PL/SQL体中至少需要有一句; 行5: END关键词表明PL/SQL体的结束

存储过程创建语法: create or replace procedure 存储过程名(param1 in type,param2 out type) as 变量1 类型(值范围); --vs_msg VARCHAR2(4000); 变量2 类型(值范围); Begin Select count(*) into 变量1 from 表A where列名 =param1; If (判断条件) then Select 列名into 变量2 from 表A where列名 =param1; Dbms_output。Put_line(‘打印信息’); Elsif (判断条件) then Dbms_output。Put_line(‘打印信息’); Else Raise 异常名(NO_DATA_FOUND); End if; Exception When others then Rollback;

End; 注意事项: 1,存储过程参数不带取值范围,in表示传入,out表示输出 类型可以使用任意Oracle中的合法类型。 2,变量带取值范围,后面接分号 3,在判断语句前最好先用count(*)函数判断是否存在该条操作记录 4,用select 。。。into。。。给变量赋值 5,在代码中抛异常用 raise+异常名 CREATE OR REPLACE PROCEDURE存储过程名 ( --定义参数 is_ym IN CHAR(6) ,

2016年10月全国自考《数据库系统原理》真题及详解

2016年10月全国自考《数据库系统原理》真题 (总分100, 考试时间90分钟) 1. 单项选择题 1. 造成数据库中的数据不一致的原因是( ) A 数据冗余 B 数据存储数量太大 C 数据相互关系复杂 D 数据库安全性差 答案:A 2. 逻辑模式/内模式映像,保证了数据库的( ) A 完整性 B 全性 C 逻辑独立性 D 物理独立性 答案:D 解析:如果数据库的内模式要修改,即数据库的物理结构有所变化,那么只要对逻辑模式/内模式映像(即"对应性")作相应的修改,可以使逻辑模式尽可能保持不变。也就是对内模式的修改尽量不影响逻辑模式,当然对于外模式和应用程序的影响更小,这样,我们称数据库达到了物理数据独立性(简称物理独立性)。 3. 数据库系统生存期中,下面不是需求分析阶段工作的是( ) A 分析用户活动,产生业务流程图 B 确定系统范围,产生系统关联图 C 可行性分析 D 分析系统数据,产生数据字典 答案:C 解析:需求分析阶段的工作主要有:(1)分析用户活动,产生业务流程图。(2)确定系统范围,产生系统关联图。 (3)分析用户活动涉及的数据,产生数据流图。(4)分析系统数据,产生数据字典。 4. 关系数据库的数据与更新必须遵循三类完整性规则,下列不是其中一项的是( ) A 实体完整性规则 B 逻辑完整性规则 C 参照完整性规则 D 用户定义的完整性规则 答案:B 5. 设关系模式R(ABCDE),F是R上成立的FD集,F={AB→C,CD→E,DE→B},则关系R的候选键是( ) A A B AB C ABD D ABE 答案:C 6. 关于模式分解,下面叙述不正确的是( ) A 模式分解能消除数据冗余和操作异常现象 B 在分解以后,所有的检索操作可以节省时间 C 在分解了的数据库中可以存储悬挂元组,存储泛关系中无法存储的信息 D 在有泛关系假设时,对数据库中关系进行自然连接时,可能产生寄生元组,即损失了信息 答案:B 解析:模式分解以后,检索操作需要做笛卡儿积或连接操作,这将付出时间代价。 7. 假设有学生表(学号,姓名;性别,班级,专业),查找英语专业的学生学号、姓名和班级,正确的关系代数表达式是( ) i.π学号,姓名,班级(σ专业='英语' (学生表))ii.σ专业='英语' (π学号,姓名,班级(学

SQL存储过程实例

题目1 1、学校图书馆借书信息管理系统建立三个表: 学生信息表:student 图书表:book 借书信息表:borrow 请编写SQL语句完成以下的功能: 1)查询“计算机”专业学生在“2007-12-15”至“2008-1-8”时间段内借书的学生编号、 学生名称、图书编号、图书名称、借出日期;参考查询结果如下图所示: 2)查询所有借过图书的学生编号、学生名称、专业;参考查询结果如下图所示:

3)查询借过作者为“安意如”的图书的学生姓名、图书名称、借出日期、归还日期; 参考查询结果如下图所示: 4)查询目前借书但未归还图书的学生名称及未还图书数量;参考查询结果如下图所 示: 附加:建表语句:

标准答案:

题目2 程序员工资表:ProWage 创建一个存储过程,对程序员的工资进行分析,月薪1500到10000不等,如果有百分之五十的人薪水不到2000元,给所有人加薪,每次加100,再进行分析,直到有一半以上的人大于2000元为止,存储过程执行完后,最终加了多少钱? 例如:如果有百分之五十的人薪水不到2000,给所有人加薪,每次加100元,直到有一半以上的人工资大于2000元,调用存储过程后的结果如图:

请编写T-SQL来实现如下功能: 1)创建存储过程,查询是否有一半程序员的工资在2200、3000、3500、4000、5000或6000 元之上,如果不到分别每次给每个程序员加薪100元,至之一半程序员的工资达到2200,3000,3500,4000,5000或6000元。 2)创建存储过程,查询程序员平均工资在4500元,如果不到则每个程序员每次加200元, 至到所有程序员平均工资达到4500元。 建表语句

实验九 游标与存储过程

实验九游标与存储过程 1 实验目的与要求 (1) 掌握游标的定义和使用方法。 (2) 掌握存储过程的定义、执行和调用方法。 (3) 掌握游标和存储过程的综合应用方法。 2 实验内容 请完成以下实验内容: (1)创建游标,逐行显示Customer表的记录,并用WHILE结构来测试 @@Fetch_Status的返回值。输出格式如下: declare @C_no char(9),@C_name char(18),@C_phone char(10), @C_addchar(8),@C_zip char(6) declare @text char(100) declarecus_cur scroll cursor for select* from Customer select @text='=========================Customer 表的记录 =========================' print @text select @text='客户编号'+'-----'+'客户名称'+'----'+'客户住址'+'-----'+'客户电话'+'------'+'邮政编码' print @text select @text='============================================================ ============================' print @text opencus_cur fetchcus_cur into @C_no,@C_name,@C_phone,@C_add,@C_zip while(@@fetch_status=0) begin select @text=@cust_No+' '+@cust_name+' '+@addr+' '+@tel_no+' '+@zip print @text fetchcus_cur into @C_no,@C_name,@C_phone,@C_add,@C_zip end closecus_cur deallocatecus_cur '客户编号'+'-----'+'客户名称'+'----'+'客户住址'+'-----'+'客户电话'+'------'+'邮政编码'

SQL编程及存储过程实验

集美大学计算机工程学院实验报告 一、实验目的 1.了解T-SQL的基本数据类型、函数; 2.掌握局部变量的定义和赋值; 3.掌握存储过程的定义及调用 二、实验内容与设计思想 ●主要内容: 1.基本结构编程; 2.存储过程的建立; 3.存储过程的调用。 ●知识准备: 1.SQL中的基本数据类型: VARCHAR:字符数据。 DATETIME:(常量使用特定格式的字符日期值来表示,并使用单引号括起来。例如:'1976-05-28','MAY 28, 1976','28 MAY, 1976','760528','05/28/76'。 INTEGER:用一串数字来表示,不含小数点,不使用引号。例如,123,1896。 DECIMAL:用一串数字来表示,可以包含小数点,不使用引号。例如,1893.1209,2.0。 FLOAT和REAL:使用科学记数法表示。例如,101.5E5,0.5E-2。 MONEY:用一串数字,可以包含或不包含小数点,以一个货币符号($)作为前缀,不使用等等2.SQL中的变量:SQL中变量用来存放临时数据,变量使用前一定要先进行定义,变量名必须 以@开头。另外,SQL SERVER中还提供一些系统变量,系统变量是以@@开头的。 变量的定义:DECLARE 变量名数据类型 如 GO DECLARE @NAME VARCHAR(20) SET @NAME='王雨' PRINT @NAME GO 3.SQL中的基本函数 (1) 字符串函数:LEN()、UPPER()、LOWER()、RIGHT()、LEFT()、SUBSTRING()、CHARINDEX()、STR()、REPLACE()等 (2) 数学函数:常用的数学函数通常对作为参数提供的输入值执行计算,并返回一个数字值。

SQL游标嵌套存储过程

--测试数据 create table tmp1 ( ID int not null, val varchar(10), constraint PK_tmp1 primary key (ID) ); create table tmp2 ( ID int not null, vals varchar(100), constraint PK_tmp2 primary key (ID) ); insert into tmp1(id, val) values (1, 'test'); insert into tmp1(id, val) values (2, 'test2'); insert into tmp1(id, val) values (3, 'test3'); insert into tmp1(id, val) values (4, 'test4'); insert into tmp1(id, val) values (5, 'test5'); insert into tmp2(id, vals) values (1, '1,2'); insert into tmp2(id, vals) values (2, '1,3'); insert into tmp2(id, vals) values (3, '2,5'); insert into tmp2(id, vals) values (4, '1,2,3,4,5'); --存储过程 drop procedure proc_tmp_1 go CREATE PROCEDURE proc_tmp_1 AS begin declare @vals varchar(500) declare @id int declare @vals2 varchar(1000) declare @command varchar(1000) declare @vals3 varchar(1000) declare @cmd varchar(1000) declare cursor_tmp_1 cursor for SELECT id, vals FROM tmp2 open cursor_tmp_1 fetch next from cursor_tmp_1 into @id, @vals while @@fetch_status = 0 begin set @vals3 = '' set@cmd = 'declare cursor_tmp_2 cursor for select val from tmp1 where id in (' + @vals + ')' EXEC (@cmd) open cursor_tmp_2 fetch next from cursor_tmp_2 into @vals2 while @@fetch_status = 0 begin if (@vals3 <> '') begin set @vals3 = @vals3 + ',' end SET @vals3 = @vals3 + @vals2

DB2存储过程简单例子

DB2存储过程简单例子 客户在进行短信服务这个业务申请时,需要填写一些基本信息,然后根据这些信息判断这个用户是否已经存在于业务系统中。因为网上服务和业务系统两个项目物理隔离,而且网上数据库保存的客户信息不全,所以判断需要把数据交换到业务系统,在业务系统中判断。 解决方式是通过存储过程,以前也了解过存储过程,但没使用到项目中。不过经过一番努力最后还是完成了,期间遇到了一些困难,特写此文让对DB2存储过程还不熟悉的童鞋避免一些无谓的错误。 DROP PROCEDURE "PLName" @ CREATE PROCEDURE "PLName"(--存储过程名字 IN IN_ID BIGINT , --以下全是输入参数 IN IN_ENTNAME VARCHAR(200) , IN IN_REGNO VARCHAR(50), IN IN_PASSWORD VARCHAR(20), IN IN_LEREP VARCHAR(300), IN IN_CERTYPE CHARACTER(1), IN IN_CERNO VARCHAR(50), IN IN_LINKMAN VARCHAR(50), IN IN_SEX CHARACTER(1), IN IN_MOBTEL VARCHAR(30), IN IN_REQDATE TIMESTAMP, IN IN_REMITEM VARCHAR(300), IN IN_STATE CHARACTER(1), IN IN_TIMESTAMP TIMESTAMP ) BEGIN declare V_RESULT BIGINT; --声明变量 DELETE FROM TableNameA WHERE ID = IN_ID;

oracle实验--存储过程

实验八存储过程的使用 一、实验目的 1、熟练掌握存储过程的定义及使用 二、实验要求 1、实验前做好上机实验的准备,针对实验内容,认真复习与本次实验有关的知识,完成 实验内容的预习准备工作; 2、能认真独立完成实验内容; 3、实验后做好实验总结,根据实验情况完成实验报告。 三、实验内容 创建图书管理库的图书、读者和借阅三个基本表的表结构: 图书表: BOOK ( BOOK_ID NUMBER(10), SORT V ARCHAR2(10), BOOK_NAME V ARCHAR2(50), WRITER V ARCHAR2(10), OUTPUT V ARCHAR2(50), PRICE NUMBER(3)); 读者表 READER ( READER_ID NUMBER(3), COMPANY V ARCHAR2(10), NAME V ARCHAR2(10), SEX V ARCHAR2(2), GRADE V ARCHAR2(10), ADDR V ARCHAR2(50)); 借阅表 BORROW ( READER_ID NUMBER(3),

BOOK_ID NUMBER(10), BORROW_DA TE DA TE); 插入数据: BOOK表: insert into book values(445501,'TP3/12','数据库导论','王强','科学出版社',17.90); insert into book values(445502,'TP3/12','数据库导论','王强','科学出版社',17.90); insert into book values(445503,'TP3/12','数据库导论','王强','科学出版社',17.90); insert into book values(332211,'TP5/10','计算机基础','李伟','高等教育出版社',18.00); insert into book values(112266,'TP3/12','FoxBASE','张三','电子工业出版社',23.60); insert into book values(665544,'TS7/21','高等数学','刘明','高等教育出版社',20.00); insert into book values(114455,'TR9/12','线性代数','孙业','北京大学出版社',20.80); insert into book values(113388,'TR7/90','大学英语','胡玲','清华大学出版社',12.50); insert into book values(446601,'TP4/13','数据库基础','马凌云','人民邮电出版社',22.50); insert into book values(446602,'TP4/13','数据库基础','马凌云','人民邮电出版社',22.50); insert into book values(446603,'TP4/13','数据库基础','马凌云','人民邮电出版社',22.50); insert into book values(449901,'TP4/14','FoxPro大全','周虹','科学出版社',32.70); insert into book values(449902,'TP4/14','FoxPro大全','周虹','科学出版社',32.70); insert into book values(118801,'TP4/15','计算机网络','黄力钧','高等教育出版社',21.80); insert into book values(118802,'TP4/15','计算机网络','黄力钧','高等教育出版社',21.80); READER表: insert into reader values(111,'信息系','王维利','女','教授','1号楼424'); insert into reader values(112,'财会系','李立','男','副教授','2号楼316'); insert into reader values(113,'经济系','张三','男','讲师','3号楼105'); insert into reader values(114,'信息系','周华发','男','讲师','1号楼316'); insert into reader values(115,'信息系','赵正义','男','工程师','1号楼224'); insert into reader values(116,'信息系','李明','男','副教授','1号楼318'); insert into reader values(117,'计算机系','李小峰','男','助教','1号楼214'); insert into reader values(118,'计算机系','许鹏飞','男','助工','1号楼216'); insert into reader values(119,'计算机系','刘大龙','男','教授','1号楼318'); insert into reader values(120,'国际贸易','李雪','男','副教授','4号楼506'); insert into reader values(121,'国际贸易','李爽','女','讲师','4号楼510'); insert into reader values(122,'国际贸易','王纯','女','讲师','4号楼512'); insert into reader values(123,'财会系','沈小霞','女','助教','2号楼202'); insert into reader values(124,'财会系','朱海','男','讲师','2号楼210'); insert into reader values(125,'财会系','马英明','男','副教授','2号楼212'); BORROW表:

MySQL存储过程实例教程2

MySQL存储过程详解 1.存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。 一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式。 存储过程通常有以下优点: (1).存储过程增强了SQL语言的功能和灵活性。存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。 (2).存储过程允许标准组件是编程。存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。 (3).存储过程能实现较快的执行速度。如果某一操作包含大量的Transaction-SQL代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的。在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些。 (4).存储过程能过减少网络流量。针对同一个数据库对象的操作(如查询、修改),如果这一操作所涉及的Transaction-SQL语句被组织程存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而大大增加了网络流量并降低了网络负载。 (5).存储过程可被作为一种安全机制来充分利用。系统管理员通过执行某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全。 2.关于MySQL的存储过程 存储过程是数据库存储的一个重要的功能,但是MySQL在5.0以前并不支持存储过程,这使得MySQL在应用上大打折扣。好在MySQL 5.0终于开始已经支持存储过程,这样即可以大大提高数据库的处理速度,同时也可以提高数据库编程的灵活性。 3.MySQL存储过程的创建 (1). 格式

51CTO学院-Oracle 11g从零开始系列视频教学课程

51cto学院-Oracle 11g从零开始系列视频教学课程 课程目标 掌握Oracle 11g的应用和开发操作技能知识。 适用人群 想学习Oracle基础知识的学员。 课程简介 【从零开始系列-Oracle11g视频教学课程】本课程基于最新Oracle 11g第2版,从Oracle数据库的概述、安装与卸载开始,逐步讲述了Oracle数据库的框架结构、PL/SQL语言及SQL*Pl us运行环境、Oracle数据库的基本操作和进阶操作、Oracle数据库的管理等相关知识,最后以三个完整的案例讲述了Oracle数据库在实际中的综合应用。本着“在开发中学习,在开发中进步” 的理念,讲解中提供了大量的应用和开发操作。51CTO-Oracle视频教学群301240833 学习条件: 本视频不需要Oracle的基础就可以进行学习,但后面的章节涉及Java Web开发案例需要学员 们掌握基本的Java Web开发知识。 课程 第一章Oracle数据库概述 3课时35分钟 1 1.1 Oracle数据库简介 [免费观看] 11分钟 详细讲解Oracle 简介、Oracle产品结构及组成、Oracle各个产品功能介绍、Oracle 11g 新特性和获取与帮助。(购买可免费用优惠劵,联系我索取,QQ:317505205) 2

1.2 Oracle在Windows平台上的安装与配置 [免费观看] 16分钟 讲解Oracle 安装通用器、Oracle 安装系统需求,重点安装Oracle 11g的步骤和方法。 3 1.3 Oracle数据库软件的卸载 [免费观看] 7分钟 讲解卸载Oracle的三个步骤:停止所有的Oracle服务,用OUI卸载所有的Oracle组件,手动删除Oracle遗留的成分。 第二章Oracle数据库的框架结构 11课时1小时35分钟 4 2.1 Oracle数据库的实例结构 [免费观看] 11分钟 主要讲解Oracle 实例简介,Oracle 内存结构(SGA和PGA讲解),Oracle 后台进程(PMO N、SMON...) 5 2.2 Oracle数据库的物理存储结构 [免费观看] 9分钟 详细讲解实例相关文件(参数、跟踪等)、构成数据库文件(数据、临时等)、备份恢复文件(闪回等)、其他文件(DMP等)

相关文档
最新文档