存储过程练习

存储过程练习
存储过程练习

客户定制业务ICD平台有数据表结构如下:

录音文件信息表

字段名类型中文名缺省值描述SerialNo VARCHAR2(20)流水号业务流水号

FilePath VARCHAR2(200)录音文件路

径录音文件路径和文件名

Partid Varchar2(4)分区字段格式为MMDD

StaffNo VARCHAR2(10)业务代表工

号录音的业务代表工号

RecordTimeDATE录音时间记录录音时

说明:记录录音文件的文件信息。每个业务可产生一个或多个录音文件。

索引:

Ix_RecordFile_SerialNo (SerialNo)

数据量:约800万

按每天2万个业务需要记录录音文件,每个业务需要记录4个录

音文件估算,保存三个月数据约800万数据量,由于此表数据

量不断累计,数据库任务定时删除3个月以前数据。

1、写一个存储过程,向表中随机插入1000条记录

SerialNo:使用序列方式,自增长。

Filepath:使用随机插入6个字母

Partid:使用随机4位数字

StaffNo:从YTCZ060001……. YTCZ060020 中随机抽取

RecordTime:从2006年8月4日之前的6个月中随机抽取。

2、写一个程序块,循环调用500次此存储过程,保证数据表中存储

50万条记录。

3、查找FilePath相同的行,并删除FilePath相同的重复记录(保存一

条时间最近记录)

4、写一个存储过程,删除3个月前的数据。

5、写一个触发器,每月末最后一天中午12点整,系统提示执行“删

除3个月前数据”的存储过程。

答:

CREATE TABLE RecordFile (

SerialNo VARCHAR2(20),

FilePath VARCHAR2(200),

Partid VARCHAR2(4),

StaffNo VARCHAR2(10),

RecordTime DATE)

CREATE INDEX Ix_RecordFile_SerialNo ON recordfile(SerialNo) PCTFREE 30 TABLESPACE mytbs

create sequence seq_RecordFile

start with 0

minvalue 0;

create or replace procedure add_RecordFile is

begin

for i in 1..1000 loop

insert into RecordFile values

(seq_RecordFile.nextval,

dbms_random.string('u',6),

trunc(dbms_random.value(1000,9999)),

'YTCZ0'||trunc(dbms_random.value(60001,60020)),

to_date('2006-08-04','yyyy-mm-dd')-dbms_random.value(0,181));

end loop;

commit;

end add_RecordFile;

begin

for i in 1..500 loop

add_RecordFile;

end loop;

end;

--------------3、查找FilePath相同的行,并删除FilePath相同的重复记录(保存一条时间最近记录)-----------

delete from t_voice_records maint where

maint.filepath in (select filepath from t_voice_records group by filepath having count(filepath)>1)

--------exists (select filepath from t_voice_records where maint.filepath=filepath group by filepath having ----count(filepath)>1)

and

maint.RecordTime<(select max(RecordTime) from t_voice_records where filepath= maint.filepath);

commit;

--------------------------4、写一个存储过程,删除3个月前的数据----------------------------------

create or replace procedure p_delete_3mothbf

as

begin

execute immediate 'create table temp as select * from t_voice_records where RecordTime>add_months(sysdate,-3)';

execute immediate 'truncate table t_voice_records';

execute immediate 'insert into t_voice_records select * from temp';

execute immediate 'drop table temp';

end;

存储过程的典型例子

可能有不少朋友使用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,

存储过程

用了两年Oracle还没写过存储过程,真是十分惭愧,从今天开始学习Oracle存储过程,完全零起点,争取每日一篇学习笔记,可能开始认识的不全面甚至有错误,但坚持下来一定会有收获。 1. 建立一个存储过程 create or replace PROCEDURE firstPro IS BEGIN DBMS_OUTPUT.PUT_LINE('Hello World!'); END; 其中IS关键字替换为AS关键字结果不会出现任何变化,大多认为他们是等同的,但也有一种说法解释为:一般PACKAGE 或者单独的FUNCTION, PROCEDURE 都用AS,PACKAGE 中的FUNCTION, PROCEDURE 用IS。 DBMS_OUTPUT.PUT_LINE('Hello World!'); 是一个输出语句。 2. 执行存储过程 Oracle返回结果需要使用包,那么存储过程似乎只能在数据库中执行或被其他调用,编程语言似乎并不能直接调用存储过程返回数据,是否能执行他有待研究。那么首先在数库中执行上面的存储过程。 BEGIN FirstPro();//注意有括号 END; 运行后输出Hello World。 3. 下面写一个稍复杂的存储过程,他定义了变量,进行了运算,输出一个count操作所用的时间。 CREATE OR REPLACE procedure testtime is n_start number; n_end number; samplenum number; use_time number; begin n_start:=dbms_utility.get_time; select count(*) into samplenum from emp; n_end:=dbms_utility.get_time; use_time:= n_end - n_start; dbms_output.put_line('This statement cost '|| use_time ||' miliseconds'); end; 4. 下面试验下怎么能给存储过程赋值 CREATE OR REPLACE procedure test(num in number) is begin dbms_output.put_line('The input numer is:' || num); end ; 今天的就到这,明天将调用这个存储过程,并试验一写对表的操作。 1. 首先把昨天带参的存储过程执行一下 declare

Oracle存储过程及块编程基础经典案例

Oracle存储过程及块编程基础案例 pl/sql(procedure language/sql:过程语言)编程是oracle的精髓之所在。跑得慢: 提高应用程序的运行性能,提高效率。 1.作为存储过程处理:模块化的设计思想(分页过程,订单的过程,转账的过程。) 2.优化sql做的最简。 3.减少网络传输量:java(sql)--》oracle,调用的这个数据库不在同一个机器上,就需要网络传输,每个sql语句都要传到数据库所在的机器上去,所以执行效率就会变得慢下来。 案例1: 编写一个存储过程该过程可以向某张表添加记录。 1.建表:create table mytest(name varchar2(30),passwd varchar2(30)); 2.建过程: create or replace procedure sp_p1 is begin insert into mytest values('xxx','m123'); end; 3.调用该过程:exec 过程名 注:在一局中添加replace:表示如果有sp_prol,就替换。如何查看错误信息:show error; 调用该过程:exec 过程名;或者call 过程名。 2.编写一个存储过程该过程可以删除某表记录。 create or replace procedure sp_pro1 is begin delete from mytest where name='xxx'; end; 这里需要引入一个快的概念,块(编程):块中可以包含过程,函数,触发器,包等。 块结构:定义部分,执行部分,例外处理部分;decrear:(可选),定义部分常量,变量,游标,例外,复杂数据类型。begin(必选)执行部分即要执行的pl/sql 语句;exception:(可选)例外处理部分即处理运行的各种错误。End结束; 案例2:输出hello begin dbms_output.put_line('hello'); end;

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/674300948.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 文件: ---------------------------------------------------------------------------------------- ......

实验一 Power Designer 入门

实验一Power Designer 入门 (实验估计时间:90分钟) 一、背景知识 PowerDesigner(http://www.sybase.com/powerdesigner)最初由Powersoft 公司开发,后来为S y b a s e 公司并购。从1 9 8 9 年到2 0 0 3 年的十几年间,PowerDesigner 经历了巨大的变化,从一个单一数据库设计工具发展为一个全面的数据库设计和应用开发的建模软件。PowerDesigner 面向数据分析、设计和实现,集成了UML(统一建模语言)和数据建模的CASE 工具。它不仅可以用于系统设计和开发的不同阶段(即系统需求分析、对象分析、对象设计以及数据库设计和程序框架设计),绘制系统的数据流程图DFD 和E-R 图,以及生成物理的建表程序、存储过程与触发器框架等,也可以满足管理、系统设计、开发等相关人员的使用。 PowerDesigner 包含4 个模型,即业务处理模型(BPM)、概念数据模型( C D M )、物理数据模型( P D M )和面向对象模型( O O M )。这4 个模型覆盖了软件开发生命周期的各个阶段。在软件开发周期中,首先进行的是需求分析,并完成系统的概要设计:系统分析员可以利用B P M 画出业务流程图,利用O O M 和C D M 设计出系统的逻辑模型:然后进行系统的详细设计,利用OOM 完成系统的设计模型,并利用PDM完成数据库的详细设计,最后,根据O OM 生成的源代码框架进入编码阶段。 1.PowerDesigner 的特性 建模工具的重点曾经完全放在数据建模这一个方面,而随着需求的不断提高,商业流程建模和UML 已经成为软件开发不可缺少的部分。从PowerDesigner 的变化,可以看出它正在努力发展成为UML 建模工具,但同时又不放弃自己的特长,即提供更好、更方便的数据建模能力。PowerDesigner 支持UML,包括新的业务处理建模能力,改善了的基于UML 的对象模型,而且可以在一个丰富的图表环境中,支持传统的和新增的建模技术。因此,对于那些需要跨平台作业和使用多种类型编码的项目,可以大大地缩短开发时间,降低复杂度。PowerDesigner 还具备一个完整的版本资料库(repository),用来存储和管理所有建模和设计过程中的信息,并将最大限度地减少其中不一致的部分,从而极大地提高了开发者的效率。 市场上有很多工具提供数据建模,包括数据仓库建模、对象建模、业务流程建模以及U M L 建模等,但这些产品都无法与将所有的功能集于一体PowerDesigner 相媲美。在努力将商业需求和IT 技术需要结合时,建模工具之间的一致性显得尤为重要。通过PowerDesigner,有可能通过一套完整的工具来集合三种建模技术—业务流程建模、数据建模和UML 建模,从而使商业和IT 部门能够更容易进行项目合作,帮助客户实施更多连贯的、成功的项目。 Power Designer 主要特性包括: 1)、业务过程建模,允许非IT 专业用户用一个简单的图示模型,进行实际业务过程的设计或建模。 2)、数据建模,利用基于可靠方法、真正的两级(概念上和物理上)关系数据库建模,设计并生成数据库模型。同时还支持数据仓库建模技术。 3)、对象建模,使用标准的UML 技术(所有U ML 图)完成设计和分析,并且利用定制的生成器,自动地生成源代码,如Java、XML、Web Services、C++、PowerBuilder、V isual Basic 和Microsoft.Net 等。 4)、企业版本库,PowerDesigner 的企业版中加入了企业级版本库,可以查阅共享工作组里所有成员的模型和信息。版本库可升级支持角色安全设置、版本控制、并具备搜索及报告能力。

存储过程的概念

存储过程的概念 SQL Server提供了一种方法,它可以将一些固定的操作集中起来由SQLServer 数据库服务器来完成,以实现某个任务,这种方法就是存储过程。 存储过程是SQL语句和可选控制流语句的预编译集合,存储在数据库中,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其他强大的编程功能。 在SQL Server中存储过程分为两类:即系统提供的存储过程和用户自定义的存储过程。 可以出于任何使用SQL语句的目的来使用存储过程,它具有以下优点: 可以在单个存储过程中执行一系列SQL语句。 可以从自己的存储过程内引用其他存储过程,这可以简化一系列复杂语句。 存储过程在创建时即在服务器上进行编译,所以执行起来比单个SQL语句快,而且减少网络通信的负担。 安全性更高。 创建存储过程 在SQL Server中,可以使用三种方法创建存储过程: ①使用创建存储过程向导创建存储过程。 ②利用SQL Server 企业管理器创建存储过程。 ③使用Transact-SQL语句中的CREATE PROCEDURE命令创建存储过程。 下面介绍使用Transact-SQL语句中的CREATE PROCEDURE命令创建存储过程创建存储过程前,应该考虑下列几个事项: ①不能将CREATE PROCEDURE 语句与其它SQL 语句组合到单个批处理中。 ②存储过程可以嵌套使用,嵌套的最大深度不能超过32层。 ③创建存储过程的权限默认属于数据库所有者,该所有者可将此权限授予其他用户。 ④存储过程是数据库对象,其名称必须遵守标识符规则。 ⑤只能在当前数据库中创建存储过程。 ⑥一个存储过程的最大尺寸为128M。 使用CREATE PROCEDURE创建存储过程的语法形式如下: QUOTE: CREATE PROC[EDURE]procedure_name[;number][;number] [{@parameter data_type} [VARYING][=default][OUTPUT] ][,...n] WITH {RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}] [FOR REPLICATION] AS sql_statement [ ...n ] 用CREATE PROCEDURE创建存储过程的语法参数的意义如下:

DB2存储过程快速入门.

1.1 SQL过程的结构 命名规则: 1、清洗过程名称命名: PROC_业务主题_目标表(PROC_JY_KJYRLJB 交易主题的卡交易日类聚表) 2、函数名称命名: PROC_业务主题_函数名(PROC_JY_GETYWZL 交易主题取得卡业务种类函数) 3、变量命名: VAR_变量描述(VAR_YWZL 业务种类变量) 4、游标命名: CUR_游标描述(CUR_KJYB 对卡交易表进行游标处理) 语法: CREATE PROCEDURE 过程名称 (参数列表 DYNAMIC RESULT SETS 结果集数量 是否允许SQL LANGUAGE SQL BEGIN SQL 过程体

END 范例“资产负债.sql ”中 第1行:Create Procedure admin.BalanceSheetDayly定义了过程名称 参数列表为Out ProcState varchar(100 其定义SQL 过程从客户应用获取,或返回客户应用的0个或多个参数,参数列表使用逗号侵害各个参数 参数类型有三种: l IN 从客户应用检索值。其不能够在SQL 过程体中修改 l OUT 向客户应用返回值 l INOUT 从客户应用检索值,并返回值 省略了结果集数量的定义,default 为0。即表示不返回结果集。 省略了是否允许SQL 的说明。其值指出了存储过程是否会使用SQL 语句,如果使用,其类型如何: l NO SQL 不能够执行任何SQL 语句 l COTAINS SQL 可以执行不会读取SQL 数据,也不会修改SQL 数据的SQL 语句 l READS SQL DATA 可以包含不会修改SQL 数据的SQL 语句 l MODIFIES SQL DATA 可以执行任何SQL 语句,除了不能够在存储过程中支持的语句以外。

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) ,

存储过程

66:创建无参数无返回值的存储过程(存储过程的默认返回值都是int类型的,并且为0)create proc mya as select*from orders go exec mya 67:删除存储过程 Drop proc 存储过程名称,如果多个用,号进行分割。 68:创建有参数但无返回值的存储过程 create proc myb @param int= 1 as select*from orders where oid > @param go exec myb 3 69:调用以上俩个存储过程,并查看默认返回值 declare @number int set @number = 1; exec @number = mya exec @number = myb 3 print @number go 70:获取存储过程的返回值(存储过程默认的返回值都为0) declare @number int set @number = 1 exec @number = mya exec @number = myb print @number 71:创建有参数并且有返回值的存储过程,并调用存储过程,获取返回值 select*from person; go --create proc myc --@inparm int, --@outparm int output --as

--select @outparm=count(*) from person where pid>@inparm --go declare @flag int set @flag = 2 exec myc @outparm = @flag output,@inparm = 1 if(@flag>0) begin print @flag end else begin print'set is null' end go --1 调用方法: --1:不要返回值return,的俩种写法 --2:计算参数总共有多少个输出参数,有多少个输出参数,就需要有多少个变量,output不能少 --创建存储过程时,注意,sql中引用表必须在当前数据库中存在,否则调用不成功 --存储过程与use 间必须用批处理命令 go 去隔开 72:手工改变存储过程的返回值 create proc mya as select*from person return 888 go declare @flag int set @flag = 0 exec @flag = mya print @flag create proc mya as declare @flag int set @flag = 0 select @flag =count(*)from person return @flag go

MySQL存储过程简单入门

MySQL存储过程语法 1、概念 存储过程就是能完成一定操作的一组SQL语句。 2、作用 大大提高效率(存储过程本身执行速度非常快,而且,调用存储过程大大减少数据库交互次数);提高重用性。 3、使用方法 1、创建: create procedure sp_name() begin …… end 注意:可能有参数。 2、调用: call sp_name() 注意:括号不能省略。 3、删除: drop procedure sp_name 注意:没有括号,不能在一个存储过程中删除另一个存储过程,只能调用。 4、语句: 条件语句, if 条件then statement else statement end if while循环语句, [label:] while expression do statement end while [label]; loop循环语句, [label:] loop statement end loop [label];

repeat until循环语句, [label] repeat statement until expression end repeat [label]; 5、常用命令: show procedure status:显示数据库所有存储过程基本信息。 show create procedure sp_name:显示一个存储过程详细信息。 关于运算符和基本函数与Java有些区别,用时注意就行。 4、实例 1、创建: create procedure proc_name (in parameter integer) begin declare variable varchar(20); if parameter=1 then set variable='MySQL'; else set variable='PHP'; end if; insert into tb (name) values (variable); end; 注意:代码不区分大小写;存储过程之间以及存储过程与内建函数不能同名; 存储过程参数(in传入,out传出,inout可传入,修改后传出,缺省是in); 由于存储过程内部要以分号结束,需要delimiter进行更改。 2、实现: ⑴、mysql –u用户名–p用户密码 ⑵、delimiter //(将结束符号“;”改成“//”,避免与存储过程冲突) ⑶、use 数据库名 ⑷、……(创建存储过程) ⑸、call proc_name(5)//(调用存储过程) -------------------------------------------- call proc_name(@para)//(对应存储过程定义中out的输出) select @para// ⑹、show procedure status//与show create procedure proc_name// 3、程序代码调用:(out型的部分代码) try{ //调取out型的存储过程P(计算记录总数) stmt = conn.prepareCall("{call p(?)}"); //读取所有OUT型的存储过程的返回参数数据 stmt.registerOutParameter(1, Types.INTEGER); stmt.execute(); int i= stmt.getInt(1);

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元。 建表语句

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) 数学函数:常用的数学函数通常对作为参数提供的输入值执行计算,并返回一个数字值。

存储过程

MySQL 5.0 版本开始支持存储过程。 存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。 存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。 存储过程思想上很简单,就是数据库SQL 语言层面的代码封装与重用。 优点 ?存储过程可封装,并隐藏复杂的商业逻辑。 ?存储过程可以回传值,并可以接受参数。 ?存储过程无法使用SELECT 指令来运行,因为它是子程序,与查看表,数据表或用户定义函数不同。 ?存储过程可以用在数据检验,强制实行商业逻辑等。 缺点 ?存储过程,往往定制化于特定的数据库上,因为支持的编程语言不同。当切换到其他厂商的数据库系统时,需要重写原有的存储过程。 ?存储过程的性能调校与撰写,受限于各种数据库系统。 一、存储过程的创建和调用 ?存储过程就是具有名字的一段代码,用来完成一个特定的功能。 ?创建的存储过程保存在数据库的数据字典中。 创建存储过程 CREATE [DEFINER = { user | CURRENT_USER }] PROCEDURE sp_name([proc_par ameter[,...]]) [characteristic ...] routine_body proc_parameter: [ IN | OUT | INOUT ] param_name type characteristic: COMMENT'string' | LANGUAG E SQL | [NOT] DETERMINISTIC | { CONTAINS SQL | NO SQL | READS SQL DATA |

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;

(完整版)SQLSERVER存储过程大总结

SQLSERVER存储过程使用说明书 引言 首先介绍一下什么是存储过程:存储过程就是将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来,并且这样的语句是放在数据库中的,还可以根据条件执行不同SQL语句,那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。 请大家先看一个小例子: create proc query_book as select * from book go --调用存储过程 exec query_book 请大家来了解一下存储过程的语法。 Create PROC [ EDURE ] procedure_name [ ; number ] [ { @parameter data_type } [ VARYING ] [ = default ] [ OUTPUT ] ] [ ,...n ] [ WITH { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ] [ FOR REPLICATION ] AS sql_statement [ ...n ] 一、参数简介 1、procedure_name 新存储过程的名称。过程名必须符合标识符规则,且对于数据库及其所有者必须唯一。 要创建局部临时过程,可以在 procedure_name 前面加一个编号 符 (#procedure_name),要创建全局临时过程,可以在 procedure_name 前面加两

个编号符 (##procedure_name)。完整的名称(包括 # 或 ##)不能超过 128 个字符。指定过程所有者的名称是可选的。 2、;number 是可选的整数,用来对同名的过程分组,以便用一条 Drop PROCEDURE 语句即可将同组的过程一起除去。例如,名为 orders 的应用程序使用的过程可以命名为 orderproc;1、orderproc;2 等。Drop PROCEDURE orderproc 语句将除去整个组。如果名称中包含定界标识符,则数字不应包含在标识符中,只应 在 procedure_name 前后使用适当的定界符。 3、@parameter 过程中的参数。在 Create PROCEDURE 语句中可以声明一个或多个参数。用户必须在执行过程时提供每个所声明参数的值(除非定义了该参数的默认值)。存储过程最多可以有 2100 个参数。 使用@符号作为第一个字符来指定参数名称。参数名称必须符合标识符的规则。每个过程的参数仅用于该过程本身;相同的参数名称可以用在其它过程中。默认情况下,参数只能代替常量,而不能用于代替表名、列名或其它数据库对象的名称。 4、data_type 参数的数据类型。所有数据类型(包括 text、ntext 和 image)均可以用作存储过程的参数。不过,cursor 数据类型只能用于 OUTPUT 参数。如果指定的数据类型为 cursor,也必须同时指定 VARYING 和 OUTPUT 关键字。 说明:对于可以是cursor 数据类型的输出参数,没有最大数目的限制。 5、VARYING 指定作为输出参数支持的结果集(由存储过程动态构造,内容可以变化)。仅适用于游标参数。 6、default 参数的默认值。如果定义了默认值,不必指定该参数的值即可执行过程。默认值必须是常量或 NULL。如果过程将对该参数使用 LIKE 关键字,那么默认值中可以包含通配符(%、_、[] 和 [^])。 7、OUTPUT

ORACLE存储过程开发基础语法

ORACLE存储过程开发基础语法 create or replace procedure test(var_name_1 in type,var_name_2 out type) as --声明变量(变量名变量类型) begin --储备过程的执行体 end test; 打印出输入的时刻信息 E.g: create or replace procedure test(workDate in Date) is begin dbms_output.putline('The input date is:'||to_date(workDate,'yyyy-mm-dd')); end test; 2、变量赋值 变量名:= 值; E.g: create or replace procedure test(workDate in Date) is x number(4,2); begin x := 1; end test; 3、判定语句:

if 比较式then begin end; end if; E.g create or replace procedure test(x in number) is begin if x >0 then begin x := 0 - x; end; end if; if x = 0 then begin x: = 1; end; end if; end test; 4、For 循环 For ... in ... LOOP --执行语句 end LOOP; (1)循环遍历游标 create or replace procedure test() as Cursor cursor is select name from student; name varchar(20);

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表:

相关文档
最新文档