数据库教程DB2产品家族_第1页
数据库教程DB2产品家族_第2页
数据库教程DB2产品家族_第3页
数据库教程DB2产品家族_第4页
数据库教程DB2产品家族_第5页
免费预览已结束,剩余131页可下载查看

下载本文档

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

文档简介

现有的数据库类Parallelqueryplanningand

DB2产DB2:DB2DB2DB2DB2 DB2DataWareHouseDB2AIX、Windows、Linux90%是相同的,另有10%的代码,用于使数DB2体系结 结 DB2数据库中,数据和索引的是在四个不同级别上定义和控制的。为了支持分区数据库,其中有一个名为分区组n的抽象层。分区组SMS和SMS:系统管理的空间(System-ManagedDB29SMSDMS:数据库管理的空间(Database-Managed) 在这里,由数据库管理程序控制空间。这种表空间•DMS的自 StorageWith•FromDB2DMS、SMS特 自是否

默认类 对象管 操作系 空间按需增长/收 预先分配;大小可以空间

管理的简优,管理的简性 非常

好,但是需要一些调优(EXTENTSIZE最好;可通过利用原始容器多获得5%

优,甚至不需不使用原始表空间最大大小64GB(4K页面 2TB(4K页面) IBMDB2InformationManagementSoftware| ©2007IBMDMS整

(AUTORESIZENO)INITIALSIZE子句指定表空间的初始大ALTERTABLESPACE语句(ADDDROP、BEGINNEWSTRIPESET等等)

不能在创建表空间时提供容器;它们将由的(AUTORESIZEYES)INITIALSIZE子句指定表空间的初始大DB2控制空间管相关联的容器,因为由DB2在DB29中,数据库在创建时将启用自 IBMDB2InformationManagementSoftware| ©2007IBM通过界面创建数据 1DB2ControlCenterStartAllProgramsIBMDB2>GeneralOK选择默认视图(Advanced)。 YourOwnDatabase向导打开。通过界面创建数据 3、在CreateYourOwnDatabase向导中,指定数据库名和数据库 oWld作为数据库名。指定C:\作为默认路径。输入hwld作为数据库别名。在Comment字段中输入任何描述性的注释。 Command来查看创建这个数据库所用的DB2命令。7、在CreateNewDatabaseFinish通过界面创建数据 通过命令创建数据createdatabaseAUTOMATICSTORAGEONALIASUSINGCODESETUTF-8TERRITORYCOLLATEUSINGPAGESIZEWITH‘BI测试数据库

默认的数据createdatabase创建DB2内置数据类数字整数(Integer):SMALLINT、INTEGER和BIGINT用 整型数字SMALLINT可以用2个字 从-32768到32767的整数INTEGER可以用4个字 从 的整数BIGINT可以用8个字 从 8 7的整数小数(Decimal):DECIMAL用 带小数部分的数字。要定义这种数据类型,必须指定精度精)(指明数字的总位数)和(s)(指明小数点右边的数字位数)数据库中所需 10/216浮点数(Floatingpoint):REAL和DOUBLE用 数的近似值定义REAL时可将长度定义在1到24之间,而且需要4个字节 可将DOUBLE的位数长度定义在25到53之间,而且需要8个字节 REALDOUBLE字符串单字节字符CHAR:CHAR或CHARACTER用 定长字符串(最多254个字节)VARCHAR:VARCHAR用 变长字符串VARCHAR列的最大长度为32672个字节。在数据库中,VARCHAR数据双字节字符GRAPHIC:GRAPHIC用于 定长双字节字符串。GRAPHIC列的最大长度是127个字符。VARGRAPHIC:VARGRAPHIC用于 变长双字节字符串。VARGRAPHIC列的最大长度是16336个字符。日期时间

TIMESTAMP数据类型只有一种格式YYYY-MM-DD-HH.MM.SS.NNNNNNDB2数据组织方 (载)分布键(distributionCREATEtable…DISTRIBUTEBYHASH(distribution CREATEtable…ORGANIZEBYDIMENSION(distribution用于对同一个数据分区中具有类似单维值的行进行分分区键(partitionCREATEtable…PARTITIONBYRANGE(partition(PART,PART数据库分区:Databasepartitioning 射分布到多个数据库分区中。给定表的数据根据CREATETABLE语句的DISTRIBUTEBYHASH子句中指定的内容进 每个数据库分区有它自己的一组计算资源,包括CPU 。在DPF环境中,根据CREATETABLE语句中指定数据库分区各自处理其负责的那些行。实际上,DPF是一种可伸缩特性。DPF可以通过增加数据库分区来提高处理能。这种能力常常被称作使用DB2的无共享架构提供线性集群:Multidimensional 一个表,其数据ORGANIZEBYDIMENSIONS句 MDCDB2Version8过它可以在物。这种聚合能为常见分析性查询提供高效的I/O。例如,对于Product=car,Region=East,并且SaleMonthYear=Jan09的所有行,可以将它们 所谓的块(block)。在CREATEtable语句中定义维的时 空间。实际上,MDC是的查询。例如,DATEisbetween"Jan-01-2004"and"Feb-01-2005"ANDCountryISNOT"UnitedStates"ANDProduct="CellPhones"。表分区:Table 布到多个数据分区中。根据CREATETABLE语句的PARTITIONBYRANGE子句中指定的内容,给定表的数据被划分到多个 对象中。这 对象可以在不同的表空间中。TP TP,用户可以手动地定义每个数据分区,包括将被包括到那个分区的值的范围。 TP分区是一个单独的数据库对象(不同于其他作为单个数据库对象的表)。因此,TPTP表附加和卸除数据分区。卸除的分区o实际上,TP方面,即转入和转出。DB2特性简要对特性如何优将行均匀地分布在个数据可伸缩性——随着数据库的增查询性能——组织数据的方式数据移动——通过添加和删除 特适合的表事实表的特大型表——大到无法仅依靠单独一组CPUI/O通道来处理具有近似值的行的表设计的经验法分区特性设计经验法DPF——用作分布键的首选是具有很多不同值的 MDC——用作MDC的的列,再加上0到3个其他列,例如region和product_typeTP——用作表分区键的列区的 经 ;练创建一个数据库按照图所示创建如下的表,使用DPF和SUBS_ID:SUBS_ID:VARCHAR(16)STATIS_DATE:INTEGERPHONE_NO:VARCHAR(20)CUST_ID:VARCHAR(16)BRAND:VARCHAR(16)CHECKIN_DATE:DATE:INTEGEROFF_NET_DATE:DATESTART_DATE:VARCHAR(8)GENDER:VARCHAR(2)AGE::VARCHAR(32)CERT_NUMBER:VARCHAR(32)CUST_MAGR:VARCHAR(10)IS_ON_NET_USER:VARCHAR(1)IS_NEW_USER:VARCHAR(1)MOBILE_TYPE:VARCHAR(16)CUST_ADDR:VARCHAR(200)CREAT_CHNL:VARCHAR(32)::::::::::::::::::::::::::::::::::::::::::::::::CUST_ID:VARCHAR(16)REGION_CODE:VARCHAR(5)GENDER:VARCHAR(2)BIRTHDAY:TIMESTAMPPERSN_HOBBY:VARCHAR(512)IS_MAIN:VARCHAR(1)E:T:INTEGERBELNG_TRADE:VARCHAR(16)PRD_FEE:DECIMAL(18,0)SERV_FEE:DECIMAL(18,0)MEMBER_VALID:TIMESTAMPCARD_TYPE:VARCHAR(32)TITLE:VARCHAR(32)UNIT_ZIP_CODE:VARCHAR(40)FAX:VARCHAR(32)BIRTH_AREA:VARCHAR(80)CONSM_HABIT:VARCHAR(200)MAIL_ADDR:VARCHAR(256)PRD_MAGR:VARCHAR(15)HOBBY_HOBBY_ID:VARCHAR(16)(FK)E_RANGE_ID:VARCHAR(16)(FK)EDU_LVL_ID:VARCHAR(16)(FK)DEAL_DATE:INTEGERSTATIS_DATE:INTEGERSUBS_ID:VARCHAR(16)PHONE_NO:VARCHAR(20)CALL_PERIOD_ID:VARCHAR(2)REGION_CODE:STATIS_DATE:INTEGERSUBS_ID:VARCHAR(16)PHONE_NO:VARCHAR(20)CALL_PERIOD_ID:VARCHAR(2)REGION_CODE:VARCHAR(5)CDR_TYPE:VARCHAR(3)CALL_TYPE:VARCHAR(10)ROAM_TYPE:VARCHAR(10)OPP_CARR:VARCHAR(33)OPP_AREA_CD:VARCHAR(12)::::::STATIS_DATE:INTEGERSUBS_ID:VARCHAR(16)PHONE_NO:VARCHAR(20)REGION_CODE:VARCHAR(5)CALL_PERIOD_ID:VARCHAR(2)CDR_TYPE:VARCHAR(3)CALL_TYPE:VARCHAR(10)OPP_TYPE:VARCHAR(33)TOLL_TYPE:VARCHAR(2)ROAM_TYPE:VARCHAR(10)IP_TYPE_ID:VARCHAR(4) ::VARCHAR(10)OPP_CARR:VARCHAR(10)::ROAM_AREA_ID::::::::::::::::INTEGER:::::::::::::::::::::::::::::V:::::::::::::::::::::::DB2权 SYSCTRL 。这些权限不 'SELECT*FROMmytable或'DELETEFROMmytable这样的语句 DB2权限功SELECT子[INTO子句FROM子[WHERE子句

SELECT语句结--仅在函数 过程等中使[GROUPBY子句][ORDERBY子句][FETCHFIRST子句]SELECT子SELECTCUST_IDFROM一般情况 使用SELECT*,第一性 ,第二时使用GROUPSelectdistinctsubs_idfromSelectcust_typefromagroupbyWHERE子FROMaINNERJOINbONa.stat_date=b.stat_dateWHEREa.stat_date=‘2010-3-1’andb.stat_date=‘2010-IN、NOTIN、EXIST、NOTGROUPBY子GROUPBY地区,GROUPBY地区,WITHGROUPBY地区,WITHSELECTCOUNT(SUBS_ID) (地区)asC1, asFROMGROUPBY地区,WITH在数据汇总过程中经常需要用到ROLLUP和CUBE来进行逐级汇总是效率最高的 函数可以帮ORDERBY子ORDERBY地区,HAVING子GROUPBY地区,HAVING用于对GROUPBY在GROUPBYFETCHFIRST子SELECTFROMTM_SC_USER_BASE_DFETCHFIRST20ROWONLY等同于其他数据库的TOP20和UNION子UNIONUNIONALL一般情况下使用UNIONALL,通过SQLCASE子句的使CASEWHEN条件WHEN条件ELSE值

THENTHENCASEWHEN加上GROUPBY表连INNERLEFTOUTERRIGHTOUTERFULLOUTERCROSS表连接的优化策如果WEEJOIL会使SQL解析器忽略SELECTt1.COL2,t2.COL2FROMat1LEFTOUTERJOINbONWHERESELECTFROM(SELECTCOL1,COL2FROMaWHERE LEFTOUTERJOINbON表连接的优化策某些情况下使用中间表进行GROUPBY来代替JOINSELECTt1.SUBS_ID,t1.通话费,t2. FROMaLEFTOUTERJOINbONINSERTINTOcSELECTt1.SUBS_ID,t1.通话费,0fromINSERTINTOcSELECTt2. fromSELECTSUBS_ID,SUM(通话费 费)FROMGROUPBY表连接的优化策CREATEINDEXidx_a_SUBS_IDONa(SUBS_ID);CREATEINDEXidx_b_SUBS_IDONb(SUBS_ID);SELECTt1.SUBS_ID,t1.通话费,t2. FROMaLEFTOUTERJOINbONINSERT语INSERTa(COL1,COL2)INSERT()FROM单表

UPDATE语句结UPDATESETWHERE子多表的关联UPDATE方db2的update语法不支持updatetable1sett1.col1=t2.value1fromt1,table2t2where的写法,但是可以通过如下方法解updatetable1t1sett1.col1=(selectt2.col1fromtable2t2例updateat1sett1.col2=(selectt2.col2frombt2where使用SELECT代替使用临时表、SELECT和INSERT语句代替UPDATEUPDATEaSETCOL2=100WHERECREATETABLEb(COL1DECIMAL(10),COL2INSERTINTOb(COL1,COL2)SELECTCOL1,COL2FROM清空表ALTERTABLEaACTIVATENOTLOGGEDINITIALLYWITHEMPTYIMPORTFROM/DEV/NULLOFDELREPLACEINTO插入表INSERTINTOa(COL1,COL2) CASEWHEN THENELSEENDASFROMDELETE语DELETEFROMWHERE使用SELECT/INSERT语句代替大表的大批数据DELETE,单个表据删除等特殊方式删除数据CREATETABLEb(COL1DECIMAL(10),COL2DECIMAL(10));INSERTINTOb(COL1,COL2)SELECTCOL1,COL2FROMaWHERE 清空表ALTERTABLEaACTIVATENOTLOGGEDINITIALLYWITHIMPORTFROM /空文件OFDELREPLACEINTO插入表INSERTINTOa(COL1,COL2)SELECTCOL1,COL2FROM练数据移动实用程支持的文件格ASCII顾名思义,这种文件类型包含固定长度的ASCII据,这些数据与列数据相对ASC文件定界的ASCII这种文件格式常被各种数据库管理器用于数据交换。它包含ASCII数据,并使用特殊的字符分界来分隔列值。数据流中的行则以作为行PCIntegratedExchangeFormat这是数据库表的结构化描述。这种文件格式不仅可以用于导入数据,还可以用于创建目标数据库之前工作表格式在这种格式中的数据可以在工作表中解释。这种格式只能用于导出和导入游标:游标是在查询 的。它只能用作一个装载操作的输入EXPORTTOmyfile.delOFMODIFIEDBYchardel!coldel@codepage=1208timestampformat="yyyy.mm.ddhh:mmtt" MESSAGESmsg.outSELECT*FROM前面令按照以下方式将SCHEDULE表中的数DEL字符串以感叹号(!)@1208(UTF-8)SCHEDULEyyyy.mm.ddhh:mmttIMPORTFROMOFfile_typeMODIFIEDBYWARNINGCOUNTRESTARTCOUNTROWCOUNTCOMMITCOUNT10000METHODL/P/N()MESSAGESINTOtarget_table_nameINSERT:选项将导入的数据插入表中。目标表必须已INSERT_UPDATE:将数据插入表中,或者更新表中具有须已经存在,并且定义了一个主键REPLACE:选项删除所有已有的数据,并将导入的数使用REPLACE_CREATE选项时,如果目标表已经存在,则导入实用程序删除已有的数据,并插入新的数据,就像REPLACE选项那样。如果目标表还没有想像的那样,输入文件必须是PC/IXF格式的文件,因为那种格式包含对导出表的结构化描述。如果目标表是被一个外键的一个父表,那么就不能使用REPLACE_CREATE。CET:选项首先创建目标表和它的索引,然后将数据导入到新表中。该选项惟一支持的文格式是PC/IXF。还可以指定新表所在表空间的名称。METHOD参METHOD适用于ASCMETHODL(13,4METHOD适用于DEL和IXFMETHODMETHODN适用于IXFMETHOD LOADFROMOFMESSAGESme[|REPLACE|TERMINATE|RESTART]INTOINSERT模式将输入数据添加到一个表中,而不更改REPLACETERMINATE模式终止装载操作,并回滚到它开始时所在的时间点。一个例外,如果指定了REPLACE模式,那么表将被RSAT 模式用于重新开始前被中断的装载命令。它将自从最近的一致继续。要使用个模式,可以与前一个LOAD命令相同的选项,但是一上 RSA临时表。因此,千万不要手动删除装载命令所生成的任何临时文件,除非您确信不再需要这些临时文件。一旦装成功完成,这些临时文件将自被删除。默认些时文件在当工作 创建。可以用 TEPILSPATH选项指定存放临时文件的 。IMPORT可由IXF文件创建表&表&INTEGRITY中断时表处于LOADPENDING状态,重启或导入后RUNSTATDB2事务日DB2数据库的日志原 事务日志记录数据库中所有对象和数据的改变,在早前版本中最(riy+scd)*fsy+scd的值小于或等于6,fsi的最大为4,在9.5版本中,日志最大已经可以达到512G,其中fs的6。 DB2数据库的日志分为志和辅助日志,其中志在第一个连接到达数据库或者数据库被激活后立即分配,而辅助日志在志的大小必须大于志文件与辅助日志文件的大小之和。DB2数据库有2种日志配置方式,循环日志与归 循环日志:这是数据库默认的日志使用方式,志用来记录所有的更改,当事务提交后,日志文件会被重用。当志文件达到限制时,辅助日志文件将被使用。这种日志方式可以进行恢复和版本恢复,不能进行前滚恢复,不支持备份。 当活动事务的使用空间超过志和辅助日志的限制或者日志空DB2事务日 措施一:避免超大型事务,分拆成多个较小的事务来措施二:采用不记日志的方措施三:使用x_log 限制单个事务占用日志空间的最大百分比,用B_ORE_APP_ON_AX_LOG设置单个事务日志超出范围后略措施四:增加日志空getdatabaseconfigurationforbitestupdatedatabaseconfigurationforbitestusingmax_logupdatedatabaseconfigurationforbitestusingLOGFILSIZupdatedatabaseconfigurationforbitestusingLOGPRIMARYupdatedatabaseconfigurationforbitestusingLOGSECOND 练DB2视CREATEVIEWviewname[col1name,……][WITHview_attr]ASSELECT子句WITHCHECKOPTIONDB2基本函字符串操作))7、

DB2基本函GETHINT(hint-string-expression)获取提示语所代表 8、将源个字符串中的某个部分用另外一个字符串9、LOWER(expression)将字符串全部转换为小写字10、11、LOCATE(search-在字符串中从左边指定位置查找目标字符串出现的第一12、LTRIM(expression)13、14、 REPLACE(source-string,search-string,replace-string)用replace-string替换source-string中的search-string15、16、RTRIM(expression)17、18、 STRIP(expression)19、SUBSTR(string,start,length)截取string从start20、SUBSTRING(expressionFROMstartFOR21、TRIM(expression)22、UPPER(expression)日期函

DB2基本函1、day(date_expression)返回date_expression中的日期2、dayname(date_expression)返回date_expression中的日期3、dayofweek(date_expression)返回date_expression中的日期周第几4、dayofyear(date_expression)返回date_expression中的日第几5、days(date_expression)返回date_expression的数值6、hourtime_expression)返回time_expression的小7、minutetime_expression)返回time_expression的分钟8、midnight_seconds(time_expression)返回time_expression从零开始的秒DB2基本函9、month(date_expression)返回date_expression10、monthname(date_expression)返回date_expression11、quarter(date_expression)返回date_expression12、secondtime_expression)返回time_expression13、timestamp_format(’1999-12-3123:59:59’,’YYYY-MM-DD 311Fractionsofa24816326412825615、to_char(date_expression,formatstring)根据指定的format返date_expression的字符表现形16、to_date(string,formatstring)根据指定的format将字符串转换日期时 17、year(date_expression)返回date_expression中的年18、week(date_expression)返回date_expression是一年的第几19、要计算两个日期之间的天数,您可以对日期作减days(date(‘2010-3-1’))-days(date(‘2009-10-20、获取当前系统日期SELECTcurrentdateFROMsysibm.sysdummy1SELECTcurrenttimeFROMsysibm.sysdummy1SELECTcurrenttimestampFROMsysibm.sysdummy121、可以使用英语来执行日期和时间计currentdate+1currentdate+3YEARS+2MONTHS+15DAYScurrenttime+5HOURS-3MINUTES+10SECONDSDB2基本函数据类型转换CAST(<expression>AS<data_type>[length1、转换为字符串类CHAR函语法CHAR函数返回日期时间型、字符串、整数、十进制或双点数的字符串表Sql代SELECTCHAR(SALARY)FROMCHR函语法CHR函数返回由参数指定的ASCII码的字符,参数可INTEGER或SMALLINTSqlSELECTCHR(167)FROM VARCHAR函数返回字符串、日期型、图形串的可变 SqlSELECTVARCHAR(NAME,50)FROM 返回“SQL0445W值已被截断。SQLSTATE=01004”。SELECTDIGITS(ID)FROM SMALLINT函语法SMALLINT函数返回整型常量中的数字、字符串短整Sql代 SELECTSMALLINT('111')FROM REAL函语法REAL函数返回一个数值的单精度浮点Sql代SELECTREAL(10)FROMDEC[IMAL]函语法 DEC[IMAL]函数返回一个数值、DECIMAL的字符串、INTEGER SqlSELECTDEC(10)FROM语法SqlSELECTHEX(10)FROMFLOOR语法SqlSELECTFLOOR(10.50)FROM其他常用函VALUE函语法该参数的值,如果第一个参数为空,则返回第二个参数的值。 SELECTVALUE(ID,'')FROMT1COALESCE函语法COALESCE返回参数集中第一个非null参数。用法类似于VALUEoRAND()产生一个0到1之间的随机ROW_NUMBER()OVER() SELECT*(SELECTROW_NUMBER()OVER(ORDERCOL1,COL2)ASSORTNUM,COL1,FROMORDERBYCOL1,WHERESORTNUMBETWEEN20ANDDB2序列使DB2IDENTITY属性的列SEQUENCE对象IDENTITYIDENTITYSEQUENCEDB2SEQUENCE对象。可以使用序列表达式 来序列对象。序列表达式可以出现在表达式能IDENTITY属性列的创CREATETABLE(test_idINTNOTGENERATEDALWAYSASIDENTITYSTARTWITHINCREMENTBYMINVALUE1NOMAXVALUENOCYCLENO)序列的创CREATESEQUENCEeASINTEGER/ASSTARTWITHINCREMENTBY1/INCREMENTBYNOMINVALUE/MINVALUEtNOMAXVALUE/MAXVALUEtNOCYCLE/CYCLECACHE20/CACHEONO序列的使selectNEXTVALUEFORseq_testfromselectNEXTVALFORseq_testselectPREVIOUSVALUEFORseq_testfromselectPREVVALFORseq_test练在数据库上演练各个DB2DB2索快速存取保证数据记录唯实现表与表之间的完整性索引大幅提 数据的速度,但同时降低写入数据的度创建索CREATE[UNIQUE]INDEXONtable_name[NOT[IN查看索SELECT*FROMsysibm.sysindexesWHERENAME=index_name重命名索RENAMEINDEXold_index_nameTO删除索DROPINDEX

时间、字符、数字、用户自定义数据类型,基于系统数据类型创建,单个数由一组系统数据类型或单值数据类型组合,用于描述一一组数据类型的值构成的创建单值数据类CREATEDISTINCTTYPEdistinct_type_nameASsource_data_typeWITHCOMPARISONS;COMMENTONDISTINCTTYPEdistinct_type_nameIS数据类型名CREATEDISTINCTTYPEinc_typeASWITHCOMMENTONDISTINCTTYPEinc_typeIS入创建结构数据类- 父类AS(attribute- --(col_nameINSTANTIABLE/NOT --是否可以创建实INLINELENGTH --结构数据类 的最大字节WITHOUT --申明没有运算NOTMODEWITHFUNCTIONREFUSINGrep-

--申明是否可以作为父类型--CAST(SOURCEASREF) CAST(REFASSOURCE) method-OVERRIDINGMETHODmethod-([parameter-namedata-type2AS data-type3ASLOCATOR/data-type4CASTFROMtype5ASSPECIFICspecific-SELFASSQL-routine-external-routine-

创建结构数据类型示createtypeas(user_iddecimal(12),incinc_type)notfinalMODE创建数组数据类CREATETYPEarray_type_nameASdata_typeCREATETYPEnumbersASINTEGERCREATETYPEnamesASVARCHAR(30)查询和删除自定义数据类SELECT*FROMDROPTYPESQLPL变DECLAREvariable_namedata_typeDEFAULTDECLAREv_incDECIMAL(14,2)DEFAULTDECLAREv_usernameDECLAREv_incDECLAREv_user_infoDECLAREv_numbersSET语 SETvariable_name Val可以是常量、select setpay=10000,bonus=1500;set(pay,bonus)=(10000,1500);set(pay,bonus)=select(pay,bonus)fromemployeewhereempno5VALUES VALUESvalINTOSELECT SELECTCOUNT(*)INTOvariable_nameFROMFETCH IFTHENSQL语句/程序模块ELSEIFTHENSQL语句/程序模块ELSESQL语句/程序模块END可以在if/then/else语句中使用sqlif(salarybetween10000and90000)then...if(deptnoin('a00','b01'))then..if(exist(select*fromemployee))if(selectcount(*)fromemployee)>0)CASEWHENWHENTHENSQL语句/程序模块LEAVEENDLOOPWHILEWHILE布尔表ENDWHILE;SQL语句/程序模块UNTIL布尔表ENDFORloop_nameASSELECT…ENDFOR;LEAVE退出本层循环 多层循环,则回到上层循ITERATEforempasselect*fromemployeedoif(emp.bonus>10000)thensettotal_bonus=total_bonusiterateendif;endforRETURN SQLPL游标的使游打开数关闭游DECLAREcusor_nameCURSORFOR[WITHOUTHOLD][WITH-- 选项使游标在任 mit/rollback操 [WITHOUTRETURN|WITH--是否将游标作 过程的结果返[FORREADONLY|FORUPDATE[OF游 forloopcs1ascousor1cursorselectforend不能使用WITHHOLDOPENFETCH[FROM][INTOvariable_name1,CLOSEdeclaresqlcodeintegerdefaultdeclareapp_code declarecursor1cursorforselectapp_code kf_app_classopencursor1;fecthcursor1intoapp_codeifsqlcode=100thenleaveendend DB2临时表的使我们在过程开发中经常使用临时表。合理的使用临时表可以简化程序的编写,提供执行效率,然而临时表同样也会使得程序运行临时表一般在如下情况下使 序把非关系型数据库中的数据插入到一个全局临时表中,那么我们就DB2临时表的使 临时表,必须存在USER临时表空间,以便 时表的定义和内容。(USER临时表空间与SYSTEM临时表空间不同;后者只在DB2内部用于执行排序等操作。)USERCREATEUSERTEMPORARYMANAGEDBYSYSTEMUSINGDB2的临时表是基于会话的,且在会话之间是的。当DB2临时表的使DECLAREGLOBALTEMPORARYTABLE(deptidCHAR(6),deptnameCHAR(20)ONCOMMITPRESERVENOTLOGGEDONROLLBACKDELETEIN在例子中,临时表t_dept的 用了两列。ONCOMMITPRESERVEROWS子句说明执行COMMIT操作时,将保留临时表该例子指定对表的更改是NOTLOGGED。就是说在表上进行的插入、更新或删除操作都不会留下日志记录。但记录表的创建无需使用IN子句指定临时表将要使用的用户临时表空间。如果不指定此信息,则DB2将搜索最合适的表空间。如果无法找到用户临时表空间,DB2将一个错误DB2临时表的使DECLAREGLOBALTEMPORARYTABLELIKEONCOMMITPRESERVEROWSWITHREPLACEIN 使用关键字LIE 临时表t_proj,因此它拥有与名为project的永久表或视图相同的列定NCOITPRESERVEROWS子句表明在COIT时将保留临时表中的所有行。因此,它们可以在后面的事务中进一步进行处理。 WITHREPLACE选项,如 4所示。通过WITHREPLACE选项,DB2隐式地删除所有数据和临时表并使 过(IN/OUT/INOUTparameter-namedata-[SPECIFIC--specific-[DYNAMICRESULTSETS[MODIFIESSQLDATA|CONTAINSSQL|READSSQL[NOT[CALLEDONNULL[INHERITSPECIAL[OLDSAVEPOINT[NEWSAVEPOINT[LANGUAGE[EXTERNALACTION|NOEXTERNAL[PARAMETERCCSID[SQL-procedure-1、procedure-name:过程的名字,在同一个数据库的同一模式,不能存在过程名相同参数数目相同的过程,即使参数的型不同也不行2、(IN|OUT|INOUTparameter-namedata-type,...):传入参 IN:输入参OUT:输出INOUT:作为输入输出参parameter-name:参数名字,在此过程中唯一的标识符data-type:参数类型,可以接收SQL类型和创LONGVARCHAR,LONGVARGRAPHIC,REFERENCE和用户自定义3、SPECIFICspecific-name:唯一的特定名称(别名),可以用存 4、DYNAMICRESULTSETSinteger:指定过程返回结果的最 5、CONTAINSSQLREADSSQLDATA,MODIFIESSQLDATA指定过程中的SQL级也不可修改SQL数据READSSQLDATA:表示过程执行中,可SQL,但不修改SQL数据 6、DETERMINISTICorNOTDETERMINISTIC:表 过程是态或者非动态的。动态的返回的值是不确定的。非动态 过程次执行返回的值是相同、ALLEDONNULLINPUT:表示可以调用过程而不管任何的输入参数是否为NULL,并且,任何的OUT或者INOUT参数可以返回一个NULL或者非空值。检验参数是否为NULL是在过程中进行的。8、INHERITSPECIALREGISTERS:表示继承寄存器9、OLDSAVEPOINTLEVELorNEWSAVEPOINTLEVEL:建立储点。OLDSAVEPOINTLEVEL是默认的点10、LANGUAGESQL:指定程序的主体用的是SQL语言11、EXTERNALACTIONorNOEXTERNALACTION:表示程是否执行一些改变理数据库状态的活动,而不通过数据库管。默认是EXTERNALACTION。如果指定为NOACTION则数据库会确定最最佳优化方12、PARAMETERCCSID:指定所有输出字符串数据的编码,默认为UNICODE编码数据库为PARAMETERCCSIDUNICODE,其他的数据库默认为PARAMETERCCSID3ASCII。13、SQL-procedure-body:过程的主异常和条件处sqlpl不能执行的sql:table,index,view的create和打开cmd,运行连接数据库db2connectto[dbname]user[using查询SQLCODE信息:db2查询SQLSTATE信息:db2NOTATOMIC和NOTATOMIC复合SQL语有两种类型的复合语句:NOTATOMIC(默认)NOTATOMIC:SQLATOMIC:ATOMIC复合语句的执行期间,如果其有语句都被回滚。ATOMIC语句不能被嵌套在其他ATOMIC复合语句中。BEGIN[NOTATOMIC|复合SQL语句与变量的作用在SQL过程中可以有一个或多个复合语句。那些复合语句可以是嵌套的,也可以是一个接一个的。每个复合语句引入一个新的本地变量的作用域,那些变量只能在此作用域中使用。正是由于这个原因,当一个 过程中有不止一个复合语句时,我们建议使用 。嵌套的复合CREATEPROCEDUREVAR_SCOPE()L1:BEGINv_outer1INT;DECLAREv_outer2INT;L2:BEGINDECLAREv_inner1INT;DECLAREv_inner2INT;SETv_outer1=100;--(1)--successSETv_inner1=200;ENDL2;SETv_outer2=300;SETv_inner2=400;--(2)--failENDL1构建这个SQL过程时,会收到以下错误消息:DB2ADMIN.VAR_SCOPE:12:"V_INNER2"isnotvalidinthecontextwhereitisused..SQLCODE=-206,SQLSTATE=42703,注意,语句(1)成功地通过,因为v_outer1是在复合语句 的 的过程中的错误处异常处理器类型(handler-type)CONTINUEEXIT在处理器操作完成之后 UNDO在处理器操作执行之前,DB2会回滚 过程中的错误处异常处理器可以处理基于特定SQLSTATE值的定制异常,或理预定义异常的类。预定义的3种异常如下所NOTFOUND标识导致SQLCODE值为+100或者SQLSATE值SQLEXCEPTIOIN标识导致SQLCODE值为负的异常。SQLWARNING标识导致警告异常或者导致+100以外的SQLCODE正值的异 如果产生了OTOUND或者SQWAIG异常,并且没为这个异常定义异常处理器,那么就会忽略这个异常,并且将控制流转向下个语句如果产了SQEXEPTION并且没为这个异常定义异常处理器,那么 过程就会失败,并且会将控制流返回调用者。过程示CREATEPROCEDURE(INI_STARTTIMEINI_ENDTIMEOUTO_RETURNCODEOUTO_RETURNMSG)P1:DECLARESQLCODEINTEGERDEFAULTDECLARERETCODEINTEGERDEFAULTDECLARERETURNMSGCHARACTER(200)DEFAULTDECLARECONTINUEHANDLERFORSQLEXCEPTIONBEGINSETreturnCode=SQLCODE;RETURNMSG=errorLabel;DECLARECONTINUEHANDLERFORSQLWARNINGSETDECLARECONTINUEHANDLERFORNOTFOUNDSETSETO_RETURNCODE=SETO_RETURNMSG=' --IFRETCODE<0SETO_RETURNCODE=SETO_RETURNMSG=RETURNSETRETCODE=0END--SETSETEND

过程执行成功!调 过查 过程信SELECT*FROMcedures调用和调 过CALLproc_name(pram1,pram2,……);Out参数可以用,也可用?占用符进行调CALLproc_test(currenttimestamp,currentbegindeclarev_intinteger;declarev_charCHARACTER(200);CALLproc_test(currenttimestamp,current 创建 过在命令行中可以这样执行包 过程DLL db2-td@-v-f在调用包含SQL语句 时,有以下几种不同的选项t:表明使用;表示一行的结束。这样一来,在 中,一个SQL语v:打开verbose模式。在该模式下, 开verbose模式,那么调试起来非常花时间。f:指定输入文件td:指定使用跟在这个标志后面的字符(而不是一个分号)来界定命练通 过程练习各种SQLPL语法,临时表使用,错误理编写一 过程,从用户表生成统计数据插入下统计月地品用户上月用使用TOAD工具调 过 数据库连在客户端建立服务器端数据库的在客户端命令行Db2catalogtcpipnodetestremote02server注:test为在客户端定义的节点,名字可以任02为客户端的ip,50000为DB2使用的端使用TOAD的connections面板创建数据库连接数Toad提供强大易用的PL/SQL调试功能,可以节省开发人员在大型项目中用于开发和测试的宝贵时间,提高应用开发的质量。在过程开发的过程中,Toad可以逐行编辑相关参数的变化来检查过程的正确性。在调式过程,Toad可以通过窗口显示所有的断点、参数,调用堆栈和输出参数。使用Toad,非常容易检测到过程的错误,DB2用户自定义函CREATEFUNCTIONfunction-name(parameter-TABLE(column-ROW(column-[SPECIFIC--specific-[LANGUAGE[PARAMETERCCSID[NOT[EXTERNALACTION|NOEXTERNAL[READSSQLDATA|CONTAINSSQL|MODIFIESSQL[STATIC[CALLEDONNULL[INHERITSPECIAL[PREDICATES(predicate-[INHERITISOLATIONLEVEL<WITHOUT|WITH>CREATEFUNCTIONtan(xDOUBLE)RETURNSDOUBLELANGUAGESQLCONTAINSSQLNOEXTERNALACTIONDETERMINISTICRETURNCREATEFUNCTIONfrom )RETURNSROW(nameVARCHAR(10),firstnameVARCHAR(10))LANGUAGESQLCONTAINSSQLNOEXTERNALACTIONDETERMINISTICRETURNVALUES(,0SQLCREATEFUNCTIONdeptempl

温馨提示

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

评论

0/150

提交评论