- 浏览: 138022 次
- 性别:
- 来自: 杭州
最新评论
-
ziyuetian1943:
刚开始接触DB2 存储过程,在楼主这儿学习了
DB2存储过程总结 -
liubey:
我想问这个存储过程需要编译一下吗,也就是先执行一下,还是直接放 ...
在JAVA中调用DB2存储过程 -
新入职:
咦?竟然在2个月前留过言!
jQuery:基本教程 -
incredible:
good !
java中final与static关键字 -
jiangnan9399:
我现在正在学习JQery看了你的教程帮助很大,谢谢啦,
jQuery:基本教程
存储过程是一个能够封装SQL语句和业务逻辑的数据库应用对象。应用程序和数据库的大量交互会产生网络堵塞,而将应用逻辑的一部分保存在数据库中会使这一情况得到相当程度的改善。另外,存储过程提供一个集中的位置存储您的代码,因此其他的应用可以重用相同的程序。
在数据库范围内采用存储过程对于其安全性也很有帮助。例如,您可以限制用户只能通过存储过程访问表和视图;这样可以锁定数据库而防止用户存取无权操作的那部分数据。用户通过存储过程存取数据表或者视图时不需要显式赋予权限,而只需要得到运行存储过程的权限。
语法说明:
1、procedure-name: 存储过程的名字,在同一个数据库的同一模式下,不能存在存储过程名相同参数数目相同的存储过程,即使参数的类型不同也不行。
2、(IN | OUT | INOUT parameter-name data-type,...) :传入参数
IN:输入参数
OUT:输出参数
INOUT:作为输入输出参数
parameter-name:参数名字,在此存储过程中唯一的标识符。
data-type:参数类型,可以接收SQL类型和创建的表。不支持LONG VARCHAR, LONG VARGRAPHIC, DATALINK, REFERENCE和用户自定义类型。
3、SPECIFIC specific-name:唯一的特定名称(别名),可以用存储过程名代替,这个特定名称用于dorp存储过程,或者给存储过程添加注视用,但不能调用存储过程。如果不指定,则数据库会自动生成一个yymmddhhmmsshhn时间戳的名字。推荐给出别名。
4、DYNAMIC RESULT SETS integer:指定存储过程返回结果的最大数量。存储过程中虽然没有return语句,但是却能返回结果集。
5、CONTAINS SQL, READS SQL DATA, MODIFIES SQL DATA: 指定存储过程中的SQL访问级别
CONTAINS SQL: 表示存储过程可以执行中,既不可读取 SQL 数据,也不可修改 SQL 数据。
READS SQL DATA: 表示存储过程可以执行中,可读取SQL,但不可修改 SQL 数据。
MODIFIES SQL DATA: 表示存储过程可以执行任何 SQL 语句。可以对数据库中的数据进行增加、删除和修改。
6、DETERMINISTIC or NOT DETERMINISTIC:表示存储过程是动态或者非动态的。动态的返回的值是不确定的。非动态的存储过程每次执行返回的值是相同的。
7、CALLED ON NULL INPUT:表示可以调用存储过程而不管任何的输入参数是否为NULL,并且,任何的OUT或者INOUT参数可以返回一个NULL或者非空值。检验参数是否为NULL是在过程中进行的。
8、INHERIT SPECIAL REGISTERS:表示继承专用寄存器。
9、OLD SAVEPOINT LEVEL or NEW SAVEPOINT LEVEL:建立存储点。OLD SAVEPOINT LEVEL是默认的存储点。
10、LANGUAGE SQL:指定程序的主体用的是SQL语言。
11、EXTERNAL ACTION or NO EXTERNAL ACTION:表示存储过程是否执行一些改变理数据库状态的活动,而不通过数据库管理器管。默认是 EXTERNAL ACTION。如果指定为NO EXTERNAL ACTION ,则数据库会确定最最佳优化方案。
12、PARAMETER CCSID:指定所有输出字符串数据的编码,默认为UNICODE编码数据库为PARAMETER CCSID UNICODE ,其他的数据库默认为PARAMETER CCSID 3 ASCII。
13、SQL-procedure-body:存储过程的主体
语法说明:
1.label:代表一个整体,同时也指定了一个变量可见范围
2.NOT ATOMIC,ATOMIC:是否把过程体当成一个整体,如果为整体(指定为ATOMIC),则表示当存储过程发生错误时会把所有执行的语句进行rollback,否则(指定为NOT ATOMIC,默认)不回滚
3.SQL-variable-declaration:变量声明
4.condition-declaration:条件声明
5.return-codes-declaration:返回码的声明,表示存储过程执行的状态
6.DECLARE-CURSOR-statement:游标的声明,用于访问所获取的结果集信息
7.handler-declaration:处理器的声明,用于指示当存储过程发生异常时而所执行的动作
1.variable assign statement:变量赋值语句
常见的变量赋值语句有:SET,VALUES INTO,SELECT INTO,FETCH语句
2.logic statement:逻辑语句
常见的逻辑语句有:IF,CASE,FOR,WHILE,ITERATE,LEAVE,LOOP,REPEAT,GOTO语句
其他语句:RETURN,OPEN,CLOSE,CALL
1.说明:RETURN是立即结果存储过程而返回一个值
1.说明:一般要使用游标之前,先declare,再open,这样游标才能fetch,最后close
1.说明:关闭游标
1.说明:调用其它的存储过程,一般IN类型的参数用户传值,OUT类型的参数用"?"代替,如
创建一个求两整数和的存储过程:
CAREATE PROCEDURE SUM(IN p_one INT, IN p_two INT, OUT p_result INT)
......
调用这个存储过程:
CALL SUM(2,4,?)或CALL <user-schema>.SUM(2,4,?)
删除一个已创建的存储过程,语法:
example:
DROP SPECIFIC PROCEDURE SUM_ab;(假设上面SUM存储过程的SPECIFIC为SUM_ab)
DROP PROCEDURE SUM(INT,INT,INT)
在数据库范围内采用存储过程对于其安全性也很有帮助。例如,您可以限制用户只能通过存储过程访问表和视图;这样可以锁定数据库而防止用户存取无权操作的那部分数据。用户通过存储过程存取数据表或者视图时不需要显式赋予权限,而只需要得到运行存储过程的权限。
>>-CREATE PROCEDURE--procedure-name-----------------------------> >--+----------------------------------------------------+--*----> '-(--+------------------------------------------+--)-' | .-,------------------------------------. | | V .-IN----. | | '---+-------+--parameter-name--data-type-+-' +-OUT---+ '-INOUT-' >--+--------------------------+--*-------------------------------> '-SPECIFIC--specific-name--' .-DYNAMIC RESULT SETS 0--------. .-MODIFIES SQL DATA-. >--+------------------------------+--*--+-------------------+---> '-DYNAMIC RESULT SETS--integer-' +-CONTAINS SQL------+ '-READS SQL DATA----' .-NOT DETERMINISTIC-. .-CALLED ON NULL INPUT-. >--*--+-------------------+--*--+----------------------+--*-----> '-DETERMINISTIC-----' .-INHERIT SPECIAL REGISTERS-. .-OLD SAVEPOINT LEVEL-. >--+---------------------------+--*--+---------------------+----> '-NEW SAVEPOINT LEVEL-' .-LANGUAGE SQL-. .-EXTERNAL ACTION----. >--*--+--------------+--*--+--------------------+--*------------> '-NO EXTERNAL ACTION-' >--+------------------------------+--*--------------------------> '-PARAMETER CCSID--+-ASCII---+-' '-UNICODE-' >--| SQL-procedure-body |-------------------------------------->< SQL-procedure-body: |---SQL-procedure-statement-------------------------------------|
语法说明:
1、procedure-name: 存储过程的名字,在同一个数据库的同一模式下,不能存在存储过程名相同参数数目相同的存储过程,即使参数的类型不同也不行。
2、(IN | OUT | INOUT parameter-name data-type,...) :传入参数
IN:输入参数
OUT:输出参数
INOUT:作为输入输出参数
parameter-name:参数名字,在此存储过程中唯一的标识符。
data-type:参数类型,可以接收SQL类型和创建的表。不支持LONG VARCHAR, LONG VARGRAPHIC, DATALINK, REFERENCE和用户自定义类型。
3、SPECIFIC specific-name:唯一的特定名称(别名),可以用存储过程名代替,这个特定名称用于dorp存储过程,或者给存储过程添加注视用,但不能调用存储过程。如果不指定,则数据库会自动生成一个yymmddhhmmsshhn时间戳的名字。推荐给出别名。
4、DYNAMIC RESULT SETS integer:指定存储过程返回结果的最大数量。存储过程中虽然没有return语句,但是却能返回结果集。
5、CONTAINS SQL, READS SQL DATA, MODIFIES SQL DATA: 指定存储过程中的SQL访问级别
CONTAINS SQL: 表示存储过程可以执行中,既不可读取 SQL 数据,也不可修改 SQL 数据。
READS SQL DATA: 表示存储过程可以执行中,可读取SQL,但不可修改 SQL 数据。
MODIFIES SQL DATA: 表示存储过程可以执行任何 SQL 语句。可以对数据库中的数据进行增加、删除和修改。
6、DETERMINISTIC or NOT DETERMINISTIC:表示存储过程是动态或者非动态的。动态的返回的值是不确定的。非动态的存储过程每次执行返回的值是相同的。
7、CALLED ON NULL INPUT:表示可以调用存储过程而不管任何的输入参数是否为NULL,并且,任何的OUT或者INOUT参数可以返回一个NULL或者非空值。检验参数是否为NULL是在过程中进行的。
8、INHERIT SPECIAL REGISTERS:表示继承专用寄存器。
9、OLD SAVEPOINT LEVEL or NEW SAVEPOINT LEVEL:建立存储点。OLD SAVEPOINT LEVEL是默认的存储点。
10、LANGUAGE SQL:指定程序的主体用的是SQL语言。
11、EXTERNAL ACTION or NO EXTERNAL ACTION:表示存储过程是否执行一些改变理数据库状态的活动,而不通过数据库管理器管。默认是 EXTERNAL ACTION。如果指定为NO EXTERNAL ACTION ,则数据库会确定最最佳优化方案。
12、PARAMETER CCSID:指定所有输出字符串数据的编码,默认为UNICODE编码数据库为PARAMETER CCSID UNICODE ,其他的数据库默认为PARAMETER CCSID 3 ASCII。
13、SQL-procedure-body:存储过程的主体
.-NOT ATOMIC--. >>-+---------+--BEGIN----+-------------+------------------------> '-label:--' '-ATOMIC------' >-----+-----------------------------------------------+---------> | .------------------------------------------. | | V | | '-----+-| SQL-variable-declaration |-+---;---+--' +-| condition-declaration |----+ '-| return-codes-declaration |-' >--+----------------------------------+-------------------------> | .------------------------------. | | V | | '---| statement-declaration |--;-+-' >-----+--------------------------------------+-------------------> | .--------------------------------. | | V | | '----DECLARE-CURSOR-statement--;----+--' >-----+-------------------------------------+--------------------> | .-------------------------------. | | V | | '----| handler-declaration |--;----+--' .-------------------------------. V | >--------SQL-procedure-statement--;---+---END--+--------+------>< '-label--'
语法说明:
1.label:代表一个整体,同时也指定了一个变量可见范围
2.NOT ATOMIC,ATOMIC:是否把过程体当成一个整体,如果为整体(指定为ATOMIC),则表示当存储过程发生错误时会把所有执行的语句进行rollback,否则(指定为NOT ATOMIC,默认)不回滚
3.SQL-variable-declaration:变量声明
DECLARE variable-name data-type [DEFAULT value]
4.condition-declaration:条件声明
|---DECLARE--condition-name--CONDITION--FOR---------------------> .-VALUE-. .-SQLSTATE--+-------+---. >----+-----------------------+---string-constant----------------|
5.return-codes-declaration:返回码的声明,表示存储过程执行的状态
DECLARE SQLSTATE CHAR(5) DEFAULT '00000'; DECLARE SQLCODE INT DEFAULT 0;
6.DECLARE-CURSOR-statement:游标的声明,用于访问所获取的结果集信息
>>-DECLARE--cursor-name--CURSOR----+------------+---------------> '-WITH HOLD--' >-----+------------------------------+--------------------------> | .-TO CALLER--. | '-WITH RETURN--+------------+--' '-TO CLIENT--' >----FOR--+-select-statement-+--------------------------------->< '-statement-name---'
7.handler-declaration:处理器的声明,用于指示当存储过程发生异常时而所执行的动作
>>---DECLARE----+-CONTINUE-+---HANDLER--FOR----------------------> +-EXIT-----+ '-UNDO-----' .-,-----------------------------------. V .-VALUE-. | >---------+-SQLSTATE--+-------+--string--+--+-------------------> +-condition-name---------------+ +-SQLEXCEPTION-----------------+ +-SQLWARNING-------------------+ '-NOT FOUND--------------------' >----SQL-procedure-statement------------------------------------|
[variable assgin statement] [other statement] [logic statement]
1.variable assign statement:变量赋值语句
常见的变量赋值语句有:SET,VALUES INTO,SELECT INTO,FETCH语句
SET variable-name = value SET variable-name = (SELECT statement)
VALUES value INTO variable-name
SELECT {table-row,...} INTO {variable-name,..} FROM <SELECT statement>
>>-FETCH--+-------+---cursor-name-------------------------------> '-FROM--' .-,----------------. V | >------INTO-----variable-name----+-----------------------------><
2.logic statement:逻辑语句
常见的逻辑语句有:IF,CASE,FOR,WHILE,ITERATE,LEAVE,LOOP,REPEAT,GOTO语句
>>-IF--search-condition-THEN-----------------------------------> .------------------------------. V | >--------SQL-procedure-statement-;---+-------------------------> .-------------------------------------------------------------. V | >----+------------------------------------------------------------+-+> | .-------------------------. | | V | | '-ELSEIF-search-condition-THEN--SQL-procedure-statement-;--+-' >-----+------------------------------------------+--END IF----->< | .------------------------------. | | V | | '-ELSE-----SQL-procedure-statement-;---+---'
>>-CASE----+-| searched-case-statement-when-clause |-+----------> '-| simple-case-statement-when-clause |---' >----END CASE-------------------------------------------------->< simple-case-statement-when-clause |---expression--------------------------------------------------> .-------------------------------------------------------------. | .-------------------------------. | V V | | >--------WHEN--expression--THEN-----SQL-procedure-statement--;---+--+> >-----+------------------------------------------+--------------| | .------------------------------. | | V | | '-ELSE-----SQL-procedure-statement--;---+--' searched-case-statement-when-clause .-------------------------------------------------------------. | .------------------------------. | V V | | >--WHEN--search-condition--THEN---SQL-procedure-statement--;---+--+-> >----+------------------------------------------+---------------| | .------------------------------. | | V | | '-ELSE-----SQL-procedure-statement--;---+--'
>>-+--------+--FOR--for-loop-name--AS---------------------------> '-label:-' >--+----------------------------------------------+-------------> | | '-cursor-name--CURSOR--+-----------+--FOR------' '-WITH HOLD-' .----------------------------. V | >--select-statement--DO----SQL-procedure-statement--;-+---------> >--END FOR--+-------+------------------------------------------>< '-label-'
>>-+---------+--WHILE--search-condition--DO---------------------> '-:label--' .-------------------------------. V | >--------SQL-procedure-statement--;---+--END WHILE--------------> >-----+--------+----------------------------------------------->< '-label--'
.-------------------------------. V | >>-+---------+--REPEAT-------SQL-procedure-statement--;---+-----> '-label:--' >----UNTIL--search-condition---END REPEAT----+--------+-------->< '-label--'
.-------------------------------. V | >>-+---------+--LOOP-------SQL-procedure-statement--;---+-------> '-label:--' >----END LOOP----+--------+------------------------------------>< '-label--'
>>-GOTO--label------------------------------------------------->< >>-ITERATE--label---------------------------------------------->< >>-LEAVE--label------------------------------------------------><
其他语句:RETURN,OPEN,CLOSE,CALL
>>-RETURN--+------------+-------------------------------------->< '-expression-'
1.说明:RETURN是立即结果存储过程而返回一个值
>>--OPEN--cursor-name------------------------------------------><
1.说明:一般要使用游标之前,先declare,再open,这样游标才能fetch,最后close
>>--CLOSE--cursor-name-----------------------------------------><
1.说明:关闭游标
>>--CALL--procedure-name(parameter list)-----------------------><
1.说明:调用其它的存储过程,一般IN类型的参数用户传值,OUT类型的参数用"?"代替,如
创建一个求两整数和的存储过程:
CAREATE PROCEDURE SUM(IN p_one INT, IN p_two INT, OUT p_result INT)
......
调用这个存储过程:
CALL SUM(2,4,?)或CALL <user-schema>.SUM(2,4,?)
删除一个已创建的存储过程,语法:
DROP SPECIFIC PROCEDURE specific-name DROP PROCEDURE procedure-name(parameter list)
example:
DROP SPECIFIC PROCEDURE SUM_ab;(假设上面SUM存储过程的SPECIFIC为SUM_ab)
DROP PROCEDURE SUM(INT,INT,INT)
发表评论
-
Struts2 namespace总结
2010-03-08 20:50 1735创建struts2的应用,首先 ... -
The Zen of Python
2009-12-26 23:46 877Abstract Long time Pythone ... -
权限控制
2009-10-28 09:23 814在系统权限控制中,要考虑资源功能是属于人,还是属于职位。观察这 ... -
javascript常用tools
2009-10-15 15:46 859//函数说明:求第y年第m月的天数 // ... -
javascript中 null 与 undefined的区别
2009-10-10 21:59 2619第一篇 解剖JavaScript中的null和undefine ... -
jQuery:基本教程
2009-09-30 15:24 1281jQuery:基本教程 这个教程是帮助初始学习jQuer ... -
javascript中获取浏览器的url
2009-09-03 18:47 1708document.location location.hre ... -
java中final与static关键字
2009-08-08 11:21 1464一.final总结 1.final修饰 ... -
linux下ssh安全配置
2009-07-09 13:25 3155linux下ssh安全配置 ssh配置文件目录: /etc ... -
python 学习笔记(一)
2009-05-17 10:40 925(一)软件的安装与配置 1.Python安装(Windows ... -
Mysql数据库导入导出
2009-05-15 16:25 15951. 概述MySQL数据库的导入,有两种方法:1) 先导出数据 ... -
Apache Commons Digester 的使用
2009-05-06 20:41 1255Learning and Using Jakarta Dige ... -
rpm软件管理
2009-04-30 20:26 1366RPM套件安裝 一、基本安裝 rpm -ivh 軟體套件 ... -
linux系统启动详解
2009-04-28 19:28 1265本文以RedHat9.0和i386平台 ... -
解读<c:out>源码
2009-04-23 17:43 3424<c:out>标签是用来在页面中输出属性值,在使用 ... -
使用 MERGE 语句更新表和视图内容
2009-04-20 12:37 1931DB2® 数据库管理器能够使用来自另一个源的数据(通常是表引用 ... -
高质量JAVA:错误模式
2009-04-08 11:43 796错误模式:介绍 诊断和纠正 Java 程序中反复出现 ... -
电器销售需求分析
2009-04-05 15:52 1032电器销售需求分析 doc 基本完成 基本 ... -
汇编编程推荐书目
2009-04-05 15:01 1400书名:《Windows环境 ... -
w3school帮助文档
2009-04-05 14:35 1283w3school帮助文档 中文版 chm
相关推荐
本文通过作者在DB2开发过程中总结出来的相关经验,并用于公司内部的培训文档,仅作参考。
这是一位有经验的前辈对于DB2 sql 语句总结,个人觉得很不错。
--DB2数据库系统查询语句 1、查询数据库中某个字段所在表: select tabname from syscat.columns where colname = 'COLNAME' ...+494 01614 由存储过程返回的结果集的个数超过了由ASSOCIATE LOCATORS语句指定的结果集
db2使用过程中基本问题的解决方案,包含了截串、时间、merge into的基本用法、存储过程、case when的基础用法
1.1. 创建一个返回结果集的存储过程\自定义函数 12 1.2. DB2 高级应用 14 1.3. 删除表数据时候出现日志已满的解决方法 24 1.4. DB2快照函数全解析 25 1.5. DB2中的22个命令小技巧 26 1.6. DB2实现类型ORACLE的一些...
此文档是在实际工作开发环境下总结,极其适用于初学者,db2 存储过程开发入门。
2.4 存储I/O设计总结 第3章 操作系统相关性能问题 3.1 HP-UX系统性能监控综述 3.2 AIX性能监控综述 3.3 操作系统性能优化 3.4 逻辑卷和lvmo优化 3.5 总结 第4章 数据库物理设计和逻辑设计 4.1 数据库物理设计 4.2 ...
由于系统底层使用的是ORM映射工具,由于没有使用存储过程,自定义函数,触发器,因此我以为系统改动不大,但发现的问题却不少。 1、我们的主键基本上都采用共的是Sequence,没有采用自动增长作为主键。 但获取...
2分法-通用存储过程分页(top max模式)版本(性能相对之前的not in版本极大提高) 分页存储过程:排序反转分页法 优化后的通用分页存储过程 sql语句 一些Select检索高级用法 SQL server 2005中新增的排序函数及应用 ...
SQL数据操作语句大全 oracle、sql server 、db2 个人总结很好很全面
2018年上半年通过各类招聘网,对 软件技术专业进行了市场调研,现将调研结果总结如下: 一、调研的目的 此次进行调研的主要目的是了解软件行业的人才需求目标,能力要求以及行业的工 作过程,以此来修改人才培养方案...
2018年上半年通过各类招聘网,对 软件技术专业进行了市场调研,现将调研结果总结如下: 一、调研的目的 此次进行调研的主要目的是了解软件行业的人才需求目标,能力要求以及行业的工 作过程,以此来修改人才培养方案...
2018年上半年通过各类招聘网,对 软件技术专业进行了市场调研,现将调研结果总结如下: 一、调研的目的 此次进行调研的主要目的是了解软件行业的人才需求目标,能力要求以及行业的工 作过程,以此来修改人才培养方案...
2018年上半年通过各类招聘网,对软件技术专业进行了市场调研,现将调研结果总结如下: 一、调研的目的 此次进行调研的主要目的是了解软件行业的人才需求目标,能力要求以及行业的工作过程,以此来修改人才培养方案和...
2018年上半年通过各类招聘网,对 软件技术专业进行了市场调研,现将调研结果总结如下: 一、 调研的目的 此次进行调研的主要目的是了解软件行业的人才需求目标,能力要求以及行业的工作 过程,以此来修改人才培养...
,编制测试计划、测试方案、测试用例、测试报告 软件技术专业调研报告 为了更好地制定2018年软件技术专业培养方案,2018年上半年通过各类招聘网,对软件技术专业进行了市场调研,现将调研结果总结如下: 一、调研的...