DB2存储过程数据类型及定义
DB2数据库中数据存储解析
、
一
一
一Leabharlann 建 立 表 格 的 D t Idx a a与 n e。
 ̄Tmprr T bep c : e oay alsae 临时表格 空间, 用来 存放在执行 S L指令 Q 时, 因排序 、 链接等操作所产生的暂 时数据 。 ●L r al p c: ag T be ae 大型表格空 间 , e s 用来存放 L NGV RC A O A H R与 L B类 型 的 数 据 。 O 2 按管 理 方 式 来 区 分 , 以分 为 : 、 可
科技信息
计 算机 与 网络
DB 2数 据 库 由数 据 存 储触 析
山 东省农 村信 用社联合 社 烟 台办事 处 修树 娟 烟 台机 场 边 防检 查站 张永 茂
[ 摘 要 】 2是 一 个 用 来存 储 与 管 理 数 据 的 系统 软 件 , 文 主 要 从 原 理 层 面对 DB DB 本 2数 据 库 中数 据 的 组 织 与 存 储 , 盘 空 间的 运 用 磁
一
●D tbs n gdsae数据库管理空 间 , 由 D 2直接格式化 aaaeMaae p c: 是 B 与 管 理 的 表格 空 间 , 称 D 。 简 MS  ̄Ss m n gdSae 由操作系统管理的表格空间, yt Maae p c: e 是 简称 S 。 MS 四 、 MS与 S D MS的 较 t 1D 、 MS的每个 数据容器是 预先分 配的 固定 大小 的文件或是裸 设 备, 其空间使用情况不受操作系统影响 。而 S MS的数 据容器是操作系 统管理 下的文件系统上的一个 目录 ,其容量直接受到所在文件系统可 用 空 间 变动 情 况 的 影 响 。 2 DM 、 S的数 据 容器 个 数 可 以增 / , 据 容 器 的 大 小 也 可 以更 改 , 减 数 通 过 这 种 方 法 , MS可 以更 改 自己 的容 量 。 MS因 其 空 间 管理 权 由操 作 D S 系统 控制 , 则不允许这 种操 作 , 你可 以通 过扩充文件系统 的大小 , 改 来
DB2存储过程基本语法
3、SPECIFIC specific-name:唯一的特定名称(别名),可以用存储过程名代替,这个特定名称用于dorp存储过程,或者给存储过程添加注视
用,但不能调用存储过程。如果不指定,则数据库会自动生成一个yymmddhhmmsshhn时间戳的名字。推荐给出别名。
4、DYNAMIC RESULT SETS integer:指定存储过程返回结果的最大数量。存储过程中虽然没有return语句,但是却能返回结果集。
7、CALLED ON NULL INPUT:表示可以调用存储过程而不管任何的输入参数是否为NULL,并且,任何的OUT或者INOUT参数可以返回一个NULL或者
非空值。检验参数是否为NULL是在过程中进行的。
8、INHERIT SPECIAL REGISTERS:表示继承专用寄存器。
RESULT SETS 1
LANGUAGE SQL
BEGIN
DECLARE v_numRecords INT DEFAULT 1;
DECLARE v_counter INT DEFAULT 0;
DECLARE c1 CURSOR FOR
IN:输入参数
OUT:输出参数
INOUT:作为输入输出参数
parameter-name:参数名字,在此存储过程中唯一的标识符。
data-type:参数类型,可以接收SQL类型和创建的表。不支持LONG VARCHAR, LONG VARGRAPHIC, DATALINK, REFERENCE和用户自定义类型。
EXTERNAL ACTION。如果指定为NO EXTERNAL ACTION ,则数据库会确定最最佳优化方案。
12、PARAMETER CCSID:指定所有输出字符串数据的编码,默认为UNICODE编码数据库为PARAMETER CCSID UNICODE
Db2基本数据类型
DB2的基本数据类型我们今天主要向大家讲述的是DB2数据类型,我们大家都知道DB2内置数据类型其一共可以分成数值型(numeric)、字符串型(character string)、图形字符串(graphic string)、二进制字符串型(binary string)或日期时间型(datetime)。
还有一种叫做 DATALINK 的特殊数据类型。
DATALINK 值包含了对存储在数据库以外的文件的逻辑引用。
数值型DB2数据类型包括 SMALLINT、INTEGER、BIGINT、DECIMAL(p,s)、REAL 和 DOUBLE。
所有数值都有符号和精度。
精度是指除符号以外的二进制或十进制的位数。
如果数字的值大于等于零,就认为符号为正。
小整型,SMALLINT:小整型是两个字节的整数,精度为 5 位。
小整型的范围从 -32,768 到 32,767。
大整型,INTEGER 或 INT:大整型是四个字节的整数,精度为 10 位。
大整型的范围从 -2,147,483,648 到2,147,483,647。
巨整型,BIGINT:巨整型是八个字节的整数,精度为 19 位。
巨整型的范围从 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。
小数型,DECIMAL(p,s)、DEC(p,s)、NUMERIC(p,s) 或 NUM(p,s):小数型的值是一种压缩十进制数,它有一个隐含的小数点。
压缩十进制数将以二-十进制编码(binary-coded decimal,BCD)记数法的变体来存储。
小数点的位置取决于数字的精度(p)和小数位(s)。
小数位是指数字的小数部分的位数,它不可以是负数,也不能大于精度。
最大精度是 31 位。
小数型的范围从 -1031+1 到 1031-1。
单精度浮点数(Single-precision floating-point),REAL:单精度浮点数是实数的 32 位近似值。
db2存储过程动态游标及函数返回值总结
db2存储过程动态游标及函数返回值总结DB2存储过程是一种在数据库服务器上执行的事务处理程序,它可以包含SQL语句、控制结构和变量。
在存储过程中,我们经常会使用动态游标和函数返回值来实现一些特定的功能。
下面是关于DB2存储过程中动态游标和函数返回值的总结。
一、动态游标1.动态游标是在存储过程中动态定义的一种游标,它可以根据不同的条件进行查询,并返回满足条件的结果集。
动态游标的定义和使用步骤如下:1.1定义游标:使用DECLARECURSOR语句定义游标,并指定游标的名称和返回结果集的查询语句。
1.2打开游标:使用OPEN语句打开游标,并执行查询语句,将结果集保存在游标中。
1.3获取数据:使用FETCH语句获取游标中的数据,并进行相应的处理。
1.4关闭游标:使用CLOSE语句关闭游标,释放资源。
2.动态游标的优势:2.1灵活性:动态游标可以根据不同的条件查询不同的结果集,满足特定的业务需求。
2.2可读性:通过使用动态游标,可以使存储过程的代码更加清晰和易于理解。
2.3性能优化:动态游标可以根据实际情况进行优化,提高查询性能。
3.动态游标的注意事项:3.1游标的生命周期:动态游标的生命周期是在存储过程执行期间,一旦存储过程结束,游标也会自动关闭。
3.2游标的维护成本:动态游标的使用需要消耗一定的系统资源,所以在使用动态游标时需要注意资源的管理。
二、函数返回值1.函数返回值是存储过程中的一个重要特性,它可以将计算结果返回给调用者。
DB2支持返回多个值的函数,可以通过函数返回表、游标或者多个标量值来实现。
2.函数返回值的定义和使用步骤如下:2.1定义函数返回值:在存储过程中使用RETURNS子句定义函数返回的数据类型。
2.2设置函数返回值:在存储过程中使用SET语句设置函数返回的值。
2.3使用函数返回值:在调用存储过程时,可以使用SELECT语句或者VALUES语句获取函数返回的值。
3.函数返回值的优势:3.1灵活性:函数返回值可以根据实际需求返回不同的结果,满足不同的业务场景。
DB2数据库对象基础知识
DB2数据库对象基本数据库对象数据库对象是一个数据库的构造块(building block)。
DB2 提供了不同类型的数据库对象来存储和表示不同信息。
通过使用数据定义语言(DDL),可以创建、修改和删除数据库对象。
要操纵数据库对象,可以使用数据操纵语言(DML),例如SELECT、UPDATE、INSERT 和SELECT 语句。
常用的数据库对象有:表用户定义数据类型约束视图索引除了Family Fundamentals 教程里介绍的一些数据库对象外,还有一些其他的对象,很多开发人员在开发DB2 应用程序时会发现这些对象比较有用。
本节我们将介绍这些对象。
在继续之前,有一点要注意:在下面看到的一些例子中,对象名称是以小写形式指定的。
无论DB2 在哪个平台上运行,它总是以大写形式存储名称,除非标识符的名称以双引号("")括起来了。
例如,下面的语句创建一个名为employee(小写)的表,该表的列定义与表EMPLOYEE (大写)是一样的。
CREATE TABLE "employee" LIKE employee别名别名(alias)是指一个已有的表、视图的另一个名称,也叫昵称(nickname)。
别名也可以作为另一个别名的昵称。
与这些对象一样,别名也可以被创建或删除,可以有与之相关的注释。
下面是CREATE ALIAS 语句的一些例子:CREATE ALIAS aliastab1 FOR tab1;CREATE ALIAS bob.aliastab1 FOR tom.tab1;CREATE SYNONYM bob.aliastab2 FOR bob.aliastab1;可以看到,CREATE ALIAS 语句比较简单。
可以在源对象所在的同一模式中创建别名(如第1 行),或者也可以全限定别名(如第2 行)。
为了与DB2 for zSeries 兼容,使用关键字SYNONYM 代替ALIAS 也是合法的(如第3 行)。
DB2存储过程语法
DB2存储过程语法语法:CREATE PROCEDURE <schema-name>.<procedure-name> (参数) [属性] <语句>--参数:SQL PL 存储过程中有三种类型的参数:IN:输入参数(默认值,也可以不指定)OUT:输出参数INOUT:输入和输出参数--属性1、LANGUAGE SQL指定存储过程使用的语言。
LANGUAGE SQL 是其默认值。
还有其它的语言供选择,比如Java 或者C,可以将这一属性值分别设置为LANGUAGE JAVA 或者LANGUAGE C。
2、DYNAMIC RESULT SETS <n>如果您的存储过程将返回n 个结果集,那么需要填写这一选项。
3、SPECIFIC my_unique_name赋给存储过程一个唯一名称,如果不指定,系统将生成一个惟一的名称。
一个存储过程是可以被重载的,也就是说许多个不同的存储过程可以使用同一个名字,但这些存储过程所包含的参数数量不同。
通过使用SPECIFIC 关键字,您可以给每一个存储过程起一个唯一的名字,这可以使得我们对于存储过程的管理更加容易。
例如,要使用SPECIFIC 关键字来删除一个存储过程,您可以运行这样的命令:DROP SPECIFIC PROCEDURE。
如果没有使用SPECIFIC 这个关键字,您将不得不使用DROP PROCEDURE 命令,并且指明存储过程的名字及其参数,这样DB2 才能知道哪个被重载的存储过程是您想删除的。
4、SQL 访问级别NO SQL:存储过程中不能有SQL 语句CONTAINS SQL:存储过程中不能有可以修改或读数据的SQL 语句READS SQL:存储过程中不能有可以修改数据的SQL 语句MODIFIES SQL:存储过程中的SQL 语句既可以修改数据,也可以读数据默认值是MODIFIES SQL,一个存储过程不能调用具有更高SQL 数据访问级别的其他存储过程。
DB2存储进程基础详解
DB2存储过程-基础详解2010-12-20 来源:网络简介DB2 SQL Procedural Language(SQL PL)是SQL Persistent Stored Module 语言标准的一个子集。
该标准结合了SQL 访问数据的方便性和编程语言的流控制。
通过SQL PL 当前的语句集合和语言特性,可以用SQL 开发综合的、高级的程序,例如函数、存储过程和触发器。
这样便可以将业务逻辑封装到易于维护的数据库对象中,从而提高数据库应用程序的性能。
SQL PL 支持本地和全局变量,包括声明和赋值,还支持条件语句和迭代语句、控制语句的转移、错误管理语句以及返回结果集的方法。
这些话题将在本教程中讨论。
变量声明SQL 过程允许使用本地变量赋予和获取SQL 值,以支持所有SQL 逻辑。
在SQL 过程中,在代码中使用本地变量之前要先进行声明。
清单1 中的图演示了变量声明的语法:清单1. 变量声明的语法.-,-----------------.V ||--DECLARE----SQL-variable-name-+------------------------------->.-DEFAULT NULL------.>--+-data-type--+-------------------+-+-------------------------|| '-DEFAULT--constant-' |SQL-variable-name 定义本地变量的名称。
该名称不能与其他变量或参数名称相同,也不能与列名相同。
图1 显示了受支持的DB2 数据类型:DEFAULT值–如果没有指定,在声明时将赋值为NULL。
下面是变量声明的一些例子:DECLARE v_salary DEC(9,2) DEFAULT ;DECLARE v_status char(3) DEFAULT ‘YES’;DECLARE v_descrition VARCHAR(80);DECLARE v1, v2 INT DEFAULT 0;请注意,从DB2 version 开始才支持在一个DECLARE 语句中声明多个相同数据类型的变量。
db2常用数据类型
DB2常用数据类型DB2的常用数据类型包括以下几个:一.数字型的。
1. SMALLINT --- 短整型,范围为-32768~+32767,一遍用的较少2. INT/INTEGER --- 整型,4个字节,范围为-2147483648~+2147483647,一遍多用于做自动生成的序列,或者用作表记录的id使用。
3. BIGINT----大整型,8个字节,精度为19位,够大了,一般较少使用。
4. DECIMAL(P,S)---小数型,其中P为精度,S为小数位数,隐含小数点(小数点不计入位数)。
比如M DECIMAL(5,2),那么就是指定M的精度为5位(除小数点外所有数字的位数不能超过5),否则插入时会发生数据位溢出;而小数的位数不能超过2,否则插入时会截断小数位。
比如:M: 123.45(成功)M:12.345(成功,但是截断为12.34)M:1234.5(失败,整数位超标,溢出报错)5. REAL---单精度浮点型,不常用6. DOUBLE----双精度浮点型,不常用二.字符型char(n) ----定长字符串,长度范围1~254,常用varchar(n)----变长字符串,长度范围1~32672,常用CLOB-----字符大对象字符串,很大,没用过,要用再研究。
三.时间型date ----占4个字节插入格式为 'YYYY-MM-DD'time----占3个字节插入格式为 'HH:MM:SS'timestamp----占10个字节插入格式为 'YYYY-MM-DD HH:MM:SS'当然,这都是采用内部格式压缩过的。
四.空值空值使用NULL表示,NULL可以表示任何数据类型的空值,但是NULL不能参加任何算数运算和逻辑运算,如果勉强运算得到的也是NULL。
DB2存储过程
--CURSOR---------->
>--FOR--+-select-statement
-+-------------><
.-WITHOUT HOLD-.
|--+--------------+---------------------------------------------|
DB2 支持以下创建数组数据类型的语法:
清单 2. 创建数组数据类型的语法
Sql代码
>>-CREATE TYPE—array-type-name--AS--| data-type |--ARRAY--[---------->
.-2147483647-------.
若要更改默认函数路径,则需要更新专用寄存器 CURRENT PATH。
游标
声明
SQL PL 提供 DECLARE cursor 语句来定义一个游标,并提供其他语句来支持返回其他结果集和游标处理。
下面是游标声明的语法: Leabharlann 清单 7. 游标声明的语法
>>-DECLARE--cursor-name
现在可以在 SQL 过程中使用这个数据类型:
清单 3. 在过程中使用数组数据类型
Sql代码
CREATE PROCEDURE PROC_VARRAY_test (out mynames names)
BEGIN
DECLARE v_pnumb numbers;
'-WITH HOLD----'
.-WITHOUT RETURN-------------.
|--+----------------------------+-------------------------------|
DB2学习整理
一、DB2数据类型:字符串:定长字符串:CHAR(X),长度属性X必须在1到254之间且包括两者变长字符串:V ARCHAR、LONG V ARCHAR 、CLOB图形字符串:是一个双字节字符数据序列定长图形字符串:GRAPHIC(X),长度属性X必须在1到127之间,包括1和127变长图形字符串:V ARGRAPHIC、LONG V ARGRAPHIC、DBCLOB二进制字符串:是一个字节序列,用于保存非传统数据,如图像,BCLOB是二进制字符串数字:所有的数字有字符和精度,精度是除符号位以外的位数或数字数。
SMALLINT:小型整数,是精度为5位的两字节整数INTEGER:大型整数,是精度为10位的四字节整数BIGINT:大整数,是一个精度为19位的8字节整数REAL:单精度浮点数,是实数的32位近似值DOUBLE:双精度浮点数,是实数64位近似值,DOUBLE也称FLOAT。
DECIMAL(p,s):是一个十进制数,小数点的位置由数字的精度(p)和小数位(s)确定,精度是数字的总位数,必须小于32日期时间值:是日期、时间、以及时间戳记的表示法。
日期时间值可以用于某些算术运算和字符串运算并且与某些字符串是相容的,但是它们既非字符串也非数字。
日期:分为三个部分年、月、日时间:时间是用24小时制来指定一天内时间的值,分为小时、分钟、秒三个部分时间戳记:是指定日期和时间的值,分为年、月、日、时、分、秒以及微秒七个部分空值:是区别于所有非空值的特殊值,它意味着行中的那一列无任何其他值,所有的数据类型都存在空值。
二、DB2函数:1、聚合函数2、类型转换函数3、数学函数4、字符串函数5、XML函数6、分区函数7、安全函数8、日期时间函数9、其他聚合函数:1、A VG 返回某一组中的值得平均值2、COUNT 返回一组行或值中行或值得个数3、MAX 返回一组值中的最大值4、MIN 返回一组值中的最小值类型转换函数:1. 函数功能描述2. SMALLINT 返回SMALLINT 类型的值3. INTEGER 返回INTEGER 类型的值4. BIGINT 返回BIGINT 类型的值5. DECIMAL 返回DECIMAL 类型的值6. REAL 返回REAL 类型的值7. DOUBLE 返回DOUBLE 类型的值8. FLOAT 返回FLOAT 类型的值9. CHAR 返回CHARACTER 类型的值10. V ARCHAR 返回V ARCHAR 类型的值11. VARCHAR_FORMAT_BIT 将位字符序列格式化为V ARCHAR 类型返回12. V ARCHAR_BIT_FORMAT 将格式化后位字符序列返回到格式化前13. LONG_V ARCHAR 返回LONG V ARCHAR 类型的值14. CLOB 返回CLOB 类型的值15. GRAPHIC 返回GRAPHIC 类型的值16. V ARGRAPHIC 返回V ARGRAPHIC 类型的值17. LONG_V ARGRAPHIC 返回LONG V ARGRAPHIC 类型的值18. DBCLOB 返回DBCLOB 类型的值19. BLOB 返回BLOB 类型的值20. DA TE 返回DATE 类型的值21. TIME 返回TIME 类型的值22. TIMESTAMP 返回TIMESTAMP 类型的值数学函数:1. 函数功能描述2. ABS,ABSV AL 返回参数的绝对值3. SIGN 如果参数大于0 则返回1,小于0 返回-1,等于0 返回04. RAND 返回0 和1 之间的随机浮点数5. MOD 求余数6. ROUND 返回参数1 小数点右边的第参数2 位置处开始的四舍五入值7. TRUNCATE OR TRUNC 从表达式小数点右边的位置开始截断并返回该数值8. FLOOR 返回小于或等于参数的最大整数9. CEILING OR CEIL 返回大于或等于参数的最小的整数值10. POWER 返回参数1 的参数2 次幂11. SQRT 返回该参数的平方根12. DIGITS 返回参数绝对值的字符串表示13. MULTIPL Y_ALT 返回参数的乘积14. DEGREES 求角度15. RADIANS 将度转换为弧度16. SIN 正弦函数17. SINH 双曲线正弦函数18. ASIN 反正弦函数19. COS 余弦函数20. COSH 双曲线余弦函数21. ACOS 反余弦函数22. TAN 正切函数23. TANH 双曲线正切函数24. A TAN 反正切函数25. A TANH 双曲线反正切函数26. A TAN2 反正切函数27. COT 余切函数28. LN 返回参数的自然对数29. LOG 返回参数的自然对数30. LOG10 返回基于10 的自然对数31. EXP 返回参数的指数函数日期时间函数:1. 函数功能描述2. YEAR 返回日期的年部分3. MONTH 返回日期的月部分4. DAY 返回日期的日部分5. HOUR 返回日期的小时部分6. MINUTE 返回日期的分钟部分7. SECOND 返回日期的秒部分8. MICROSECOND 返回日期的微秒部分9. MONTHNAME 返回日期的月份名称10. DAYNAME 返回日期的星期名称11. QUARTER 返回指定日期是第几季度12. WEEK 返回当前日期是一年的第几周,每周从星期日开始13. WEEK_ISO 返回当前日期是一年的第几周,每周从星期一开始14. DAYOFWEEK 返回当前日期是一周的第几天,星期日是115. DAYOFWEEK_ISO 返回当前日期是一周的第几天,星期一是116. DAYOFYEAR 返回当前日期是一年的第几天17. DAYS 返回用整数表示的时间,用来求时间间隔18. JULIAN_DAY 返回从January 1, 4712 B.C(Julian date calendar)到指定日期的天数19. MIDNIGHT_SECONDS 返回午夜到指定时间的秒数20. TIMESTAMPDIFF 返回两个timestamp 型日期的时间间隔21. TIMESTAMP_ISO 返回timestamp 类型的日期22. TO_CHAR 返回日期的字符串表示23. V ARCHAR_FORMA T 将日期格式化为字符串24. TO_DATE 将字符串转化为日期25. TIMESTAMP_FORMA T 将字符串格式化为日期其他函数:1. 函数功能描述2. COALESCE 将null 转化为其他值3. V ALUE 将null 转化为其他值4. NULLIF 如果两个参数相等,则返回null,否则,返回第一个参数5. HEX 返回一个值的16 进制表示6. LENGTH 返回一个值的长度7. TABLE_NAME 返回table 名8. TABLE_SCHEMA 返回schema 名9. TYPE_ID 返回数据类型表示10. TYPE_NAME 返回数据类型名11. TYPE_SCHEMA 返回schema 名12. DEREF 返回参数类型的实例13. IDENTITY_V AL_LOCAL 返回最后分配给标识列的值14. REC2XML 返回XML 标记格式的字符串,包含列名和列数据15. EVENT_MON_STATE 返回某事件监视器的操作状态16. RAISE_ERROR 抛出错误,可以指定sqlstate 和error_message,有点像java 的抛出异常17.SQLCACHE_SNAPSHOT 是DB2通用数据库中当前唯一支持的表函数,将DB2动态SQL语句高速缓存的瞬象的结果作为表返回。
DB2的基础学习
DB2的基础学习1、DB2数据库的逻辑结构分别为:实例-->数据库-->表空间-->表。
表是⼆维结构,由⾏和列组成,表数据存放在表空间⾥,表空间是数据库的逻辑存储层,每个数据库可以包含多个表空间,每个表空间只能归属于⼀个数据库,所以数据库和表空间的关系是⼀对多。
2、DB2的存储模型为:表空间---->容器---->extent------>page。
每个表空间由⼀个或多个容器组成,容器是映射到物理存储,容器可以是⽬录、⽂件、裸设备。
每个容器只能属于⼀个表空间。
DB2将表和索引存储在PAGE页⾥,page是db2中最⼩的物理分配单元,表中的每⾏数据只能包含在⼀页中,不能跨页。
DB2⽀持的页⼤⼩分为:4K、8K、16K、32K四种。
当DB2在读取数据的时候,不是按页读取,⽽是按照extent(块)读取,⼀个extent是由⼀组连续的页组成。
如果⼀个表空间有多个容器,为了数据均衡的分布,所以在写数据的时候,按照循环的⽅式在各个容器⾥写数据,当⼀个容器中写满⼀个extent的时候,将开始在第⼆个容器继续写extent,周⽽复始,可以提⾼读写的效率。
每个表空间由⼀个或多个容器组成,表空间为逻辑层次中,⽽真正的数据是存放在容器中的,容器是由多个extent组成。
3、主键的数据类型设置为不变长的,如char和varchar则建议选择⽤char.注意字段的默认长度:smallint——占⽤2个字节,表⽰的数值范围:-32768⾄+32767integer——占⽤4个字节,表⽰的数值范围:-2147483648⾄+2147483647bigint——占⽤8个字节,表⽰的数值范围:-9223372036854775808⾄+9223372036854775807decimal——占⽤的字节数与数据类型的精度相关,最⼤精度为31number,real,float这三种类型不常⽤。
varchar——占⽤N个字节,N的最⼤值为32672char——N的最⼤值为254long varchar不常⽤date——占⽤4个字节,表⽰的⽇期范围:0001-01-01⾄9999-12-31time——占⽤3个字节,表⽰的时间范围:00:00:00⾄23:59:59timestamp(N)[with time zone]——占⽤7-13个字节,N的取值范围为0-12,默认为6表⽰的数值范围:0001-01-01 00:00:00.000000 ⾄9999-12-31 23:59:59.9999994、随机抽样查询select * from table_name fetch first 10 rows only;5、如果有五张表关联,数据库⾥⾯同时参与关联的只能是两张表。
DB2存储过程学习笔记资料
创建:db2-td@-vf createSQLproc.db2--end@ (此处的@可替换成其他符号)调用:db2call过程名(参数)1 基础--声明变量:DECLARE<variable-name><data-type><DEFAULT constant>--赋值:SET x=10;SET y=(SELECT SUM(c1)from T1);VALUES10INTO x;SELECT SUM(c1)INTO y from T1;--会话全局变量:CREATE VARIABLE var_name DATATYPE[DEAFULT value];2 、数组2.1定义CREATE TYPE mynames as VARCHAR(30)ARRAY[];--定义数组2.2声明DECLARE nameArr mynames;--声明数组2.3赋值SET TESTARR=ARRAY[1,2,3,4,5,6,7,8,9,10];SET TESTARR=ARRAY[VALU ES(1),(2)];--方法1,使用SET语句SELECT SUM(NUM)INTO TESTARR[1]FROM(VALUES(1),(2))AS TEMP(NU M);--方法2,使用VALUES INTO语句VALUES1INTO TESTARR[1];--方法3,使用SELECT INTO语句SET TESTARR[1]=1;--方法4,使用ARRAY构造函数2.4操作数组的函数ARRAY_DELETE:删除数组元素TRIM_ARRAY:从右开始删除指定数目个元素ARRAY_FIRST:返回数组中第一个元素ARRAY_LAST:返回数组中最后一个元素ARRAY_NEXT:返回数组下一个元素ARRAY_PRIOR:返回数组前一个元素ARRAY_VARIABLE:返回参数指定的元素ARRAY_EXISTS:判断数组是否有元素CARDINALITY:返回数组中元素的个数MAX_CARDINALITY:返回数组中元素的个数UNNEST:将数组转换为表3 复合语句语法:label:BEGIN[ATOMIC|NOT ATOMIC]--ATOMIC关键字封装的复合语句被当作一个处理单元--变量声明、过程逻辑等END label4流程控制--条件判断IFIF<condition>THEN<SQL procedure statement>;ELSEIF<condition>THEN<SQL procedure statement>;ELSE<SQL procedure statement>;END IF;IF FRIEND='张三'THENSET MSG='你好,张三';ELSEIF FRIEND='李四'THENSET MSG='你好,李四';ELSESET MSG='对不起,我不认识你';END IF;--循环WhileWHILE<condition>DO<sql statements>;END WHILE;WHILE I<=10DOSET NUM=NUM+I;SET I=I+1;END WHILE;--循环forFOR<loop_name>AS<sql statements>DO<sql statements>;END FOR;FOR TEST AS SELECT I FROM(VALUES(1),(2),(3))AS TEMP(I)DOSET NUM=NUM+I;END FOR;--循环LOOPLABEL:LOOP<sql statements>;LEAVE LABEL;END LOOP LABEL;TEST_LOOP:LOOPSET NUM=NUM+I;SET I=I+1;IF I>10THENLEAVE TEST_LOOP;END IF;END LOOP TEST_LOOP;--循环RepeatREPEAT<sql statements>;UNTIL<condition>END REPEAT;REPEATSET NUM=NUM+I;SET I=I+1;UNTIL I>10END REPEAT;--其他关键字ITERATE label--。
db2数据库存储过程
-17-
模块 - 其他语句
删除整个模块
− DROP MODULE myMod;
保留规格说明内容,删除实现
− ALTER MODULE myMod DROP BODY;
删除模块中的存储过程(SP)
− ALTER MODULE myMod DROP PROCEDURE myProc;
将模块的执行权限赋给joe
ITERATE FETCH_LOOP1;
END IF; INSERT INTO department(deptno, deptname, admdept) VALUES(‘NEW’, v_deptname, v_admdept); END LOOP FETCH_LOOP1;
-27-
GOTO语句
GOTO语句用于直接跳转到指定标签处。例如: IF v_DEPT = ‘D11’ GOTO bye; ……
DECLARE my_var INTEGER DEFAULT 6;
条件声明
DECLARE not_found CONDITION FOR SQLSTATE ‘02000’;
游标声明
DECLARE c1 CURSOR FOR select * from staff;
异常处理器声明
DECLARE EXIT HANDLER FOR SQLEXCEPTION …;
(DECLARE关键字,cl游标名称, CURSOR是必须有的,;指通过c1的游标来操作staff里所有的数据)最常用的最普 通的。
2.DECLARE c1 CURSOR WITH HOLD FOR select * form staff; 3.DECLARE c1 CURSOR WITH RETURN TO CALLER FOR select * form staff; 4.DECLARE c1 CURSOR WITH RETURN TO CLIENT FOR select * form staff;
DB2存储过程语法规则
DB2存储过程语法规则如何声明⼀个存储过程CREATE PROCEDURE 存储过程名(IN 输⼊变量名输⼊变量类型,OUT 输出变量名输出变量类型)紧跟其后的是存储过程属性列表常⽤的有:LANGUAGE SQL、MODIFIES SQL DATA、RESULT SETS 1(返回结果集个数) l 存储过程体以begin开始l 存储过程体以end结束存储过程约束规则存储过程中调⽤存储过程CALL 存储过程名(参数1,参数2,参数n)例:call spco_init_custom(bankcode,errno,errmsg);GET DIAGNOSTICS retval=RETURN_STATUS;if(retval<>0) thenset errno=errno;set errmsg=errmsg;return errno;end if;变量的定义变量使⽤前必须先定义,⽅法为DECLARE 变量名变量类型(default 默认值)例:DECLARE SQLCODE INTEGER DEFAULT 0;DECLARE inum INTEGER DEFAULT 0;DECLARE curtime char(8);DECLARE bcode char(6);DECLARE sqlstate char(5);if 表达式if 条件1 then逻辑体;elseif 条件2 then逻辑体;else逻辑体;end if;例:IF rating = 1 THENUPDATE employeeSET salary = salary * 1.10, bonus = 1000WHERE empno = employee_number;ELSEIF rating = 2 THENUPDATE employeeSET salary = salary * 1.05, bonus = 500WHERE empno = employee_number;ELSEUPDATE employeeSET salary = salary * 1.03, bonus = 0WHERE empno = employee_number;END IF;case表达式case 变量名 when变量值1 then. . .when变量值2 then- - -else. . .end case;或case when变量名=变量值1 then. . .when变量名=变量值2 then- - -else. . .end case;例⼀:CASE v_workdeptWHEN 'A00'THEN UPDATE departmentSET deptname = 'DATA ACCESS 1';WHEN 'B01'THEN UPDATE departmentSET deptname = 'DATA ACCESS 2';ELSE UPDATE departmentSET deptname = 'DATA ACCESS 3';END CASE;例⼆:CASEWHEN v_workdept = 'A00'THEN UPDATE departmentSET deptname = 'DATA ACCESS 1';WHEN v_workdept = 'B01'THEN UPDATE departmentSET deptname = 'DATA ACCESS 2';ELSE UPDATE departmentSET deptname = 'DATA ACCESS 3';END CASE;for 表达式for 循环名 as游标名或select 表达式dosql表达式;end for;例:1)DECLARE fullname CHAR(40);FOR vl ASSELECT firstnme, midinit, lastname FROM employee DOSET fullname = lastname || ',' || firstnme ||' ' || midinit; INSERT INTO tnames VALUE (fullname);END FOR2)for loopcs1 as cousor1 cursor asselect market_code as market_codefrom tb_market_codefor updatedoend for;goto表达式goto 标⽰名;标⽰名:逻辑体;例:GOTO FAIL;...SUCCESS: RETURN 0FAIL: RETURN -200while表达式while 条件表达式 do逻辑体;end while;LOOP表达式LOOP... END LOOP;例:OPEN c1;ins_loop:LOOPFETCH c1 INTO v_dept, v_deptname, v_admdept;IF at_end = 1 THENLEAVEins_loop; --中断循环ELSEIF v_dept = 'D11' THENITERATEins_loop; --下⼀个循环END IF;INSERT INTO department (deptno, deptname, admrdept)VALUES ('NEW', v_deptname, v_admdept);END LOOP;CLOSE c1;关于游标定义游标:DECLARE 游标名 CURSOR FORSelect 语句;打开游标:OPEN 游标名;取值: FETCH 游标名 INTO 变量列表例:DECLARE c1 CURSOR FORSELECT CAST(salary AS DOUBLE)FROM staffWHERE DEPT = deptNumberORDER BY salary;DECLARE EXIT HANDLER FOR NOT FOUNDSET medianSalary = 6666;SET medianSalary = 0;SELECT COUNT(*) INTO v_numRecordsFROM staffWHERE DEPT = deptNumber;OPEN c1;WHILE v_counter < (v_numRecords / 2 + 1) DOFETCH c1 INTO medianSalary;SET v_counter = v_counter + 1;END WHILE;CLOSE c1;注:游标的申明如果放在中间段,要⽤”begin。
Db2基本数据类型
DB2的基本数据类型我们今天主要向大家讲述的是DB2数据类型,我们大家都知道DB2内置数据类型其一共可以分成数值型(numeric)、字符串型(character string)、图形字符串(graphic string)、二进制字符串型(binary string)或日期时间型(datetime)。
还有一种叫做 DATALINK 的特殊数据类型。
DATALINK 值包含了对存储在数据库以外的文件的逻辑引用。
数值型DB2数据类型包括 SMALLINT、INTEGER、BIGINT、DECIMAL(p,s)、REAL 和 DOUBLE。
所有数值都有符号和精度。
精度是指除符号以外的二进制或十进制的位数。
如果数字的值大于等于零,就认为符号为正。
小整型,SMALLINT:小整型是两个字节的整数,精度为 5 位。
小整型的范围从 -32,768 到 32,767。
大整型,INTEGER 或 INT:大整型是四个字节的整数,精度为 10 位。
大整型的范围从 -2,147,483,648 到2,147,483,647。
巨整型,BIGINT:巨整型是八个字节的整数,精度为 19 位。
巨整型的范围从 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。
小数型,DECIMAL(p,s)、DEC(p,s)、NUMERIC(p,s) 或 NUM(p,s):小数型的值是一种压缩十进制数,它有一个隐含的小数点。
压缩十进制数将以二-十进制编码(binary-coded decimal,BCD)记数法的变体来存储。
小数点的位置取决于数字的精度(p)和小数位(s)。
小数位是指数字的小数部分的位数,它不可以是负数,也不能大于精度。
最大精度是 31 位。
小数型的范围从 -1031+1 到 1031-1。
单精度浮点数(Single-precision floating-point),REAL:单精度浮点数是实数的 32 位近似值。
DB2内存概念
DB2内存概念DB2 在4 种不同的内存集(memory set)内拆分和管理内存。
这 4 种内存集分别是:实例共享内存(instance shared memory)数据库共享内存(database shared memory)应用程序组共享内存(application group shared memory)代理私有内存(agent private memory)1、实例共享内存(instance shared memory)每个 DB2 实例都有一个实例共享内存。
实例共享内存是在数据库管理器启动(db2start)时分配的,并随着数据库管理器的停止(db2stop)而释放。
这种内存集用于实例级的任务,例如监控、审计和节点间通信。
实例内存( instance_memory):指定为实例管理预留的内存数量。
默认值是 AUTOMATIC。
监视器堆( mon_heap_sz):用于监控。
Audit Buffer( audit_buf_sz):用于 db2audit 实用程序。
Fast Communication buffers ( fcm_num_buffers):用于分区之间的节点间通信。
仅适用于分区的实例。
如果instance_memory被设置为某一个数字,则采用instance_memory与mon_heap_sz、audit_buf_sz和fcm_num_buffers的和之间的较大者。
这时,对实例内存就施加了一个硬性的限制,而不是软限制。
当达到这个限制时,就会收到内存分配错误。
出于这个原因,建议将instance_memory的设置保留为AUTOMATIC,为软限制。
$ db2mtrk -i -vTracking Memory on: 2007/03/08 at 09:44:08Memory for instanceDatabase Monitor Heap is of size 81920 bytesOther Memory is of size 2768896 bytesFCMBP Heap is of size 33652736 bytesTotal: 36503552 bytes2、数据库共享内存(database shared memory)每个数据库有一个数据库共享内存集。