db2存储过程更新(在DB2中怎样根据身份证号用存储过程计算出生日期)
一、oracle存储过程向DB2迁移
数据库迁移可以看作一个特殊的软件开发项目,与其他开发项目不同的是这个项目的需求是确定的,技术障碍较低,主要工作是代码编写和测试。对数据库管理人员来说,数据库数据迁移极具挑战性,一旦措施不当,珍贵的数据资源将面临丢失的危险,要成功地实现数据库数据平滑迁移,需要周密计划和充分准备,并按照一定的步骤来完成。另一方面,数据库迁移项目的成功也主要依赖于客户与开发商的积极配合和有序组织。当然,企业数据库通常数据量都比较大,结构也比较复杂,如果完全通过手工来完成,那是一个不可想象的大工程。所以正确的步骤加合适的迁移工具也能达到事半功倍的效果。
Oracle向DB2迁移的主要流程
Oracle向DB2迁移一般来说遵循3大流程:迁移评估、模拟迁移、正式迁移。
1、迁移评估
全面的评估是迁移成功的一个关键要素,评估的总体目标是发现可能影响迁移过程的问题以便分配足够的资源来保证迁移取得成功。首先,是评估应用环境和应用程序,识别潜在的障碍;第二,您的 Oracle数据库将在多大程度上适应 DB2的硬数据;后,分析 Oracle数据库对象和过程,识别使用 DB2中不支持的那些特性的对象和过程。
2、模拟迁移
1)在进行模拟迁移前,我们必须先设计数据迁移的方案,一般设计数据迁移方案主要包括以下几个方面工作:研究与数据迁移相关的资料,或在网站上查询相关内容、选择数据迁移的软硬件平台、选择数据迁移方法、选择数据备份和恢复策略、设计数据迁移和测试方案等。
2)根据设计的数据迁移方案,建立一个模拟的数据迁移环境,它既能仿真实际环境又不影响实际数据,然后在数据模拟迁移环境中测试数据迁移的效果。数据模拟迁移前也应按备份策略备份模拟数据,以便数据迁移后能按恢复策略进行恢复测试。
3)根据设计的数据迁移测试方案测试数据模拟迁移,也就是检查数据模拟迁移后数据和应用软件是否正常,主要包括:数据一致性测试、应用软件执行功能测试、性能测试、数据备份和恢复测试等。
3、正式迁移
数据模拟迁移测试成功后,可以正式实施数据的迁移了。在这里介绍一种简单的测试方法,首先利用 DB2兼容特性迁移 Oracle应用,创建兼容模式 DB2数据库。在 DB2 V9.7上启用 Oracle应用程序时,实例和数据库必须处于兼容模式。还建议调整舍入行为以匹配 Oracle。通过把重新验证语义(revalidation semantics)设置为 deferred_force,可以不按依赖次序部署对象。
在 UNIX系统上:
$ db2set DB2_COMPATIBILITY_VECTOR=ORA
$ db2set DB2_DEFERRED_PREPARE_SEMANTICS=YES$ db2stop force
$ db2start
$ db2 create db testdb automatic storage yes on/db2data1,/db2data2,/db2data3 DBPATH ON/db2system PAGESIZE 32 K$ db2 update db cfg for testdb using auto_reval deferred_enforce$ db2 update db cfg for testdb using decflt_rounding round_half_upC:\> db2 update db cfg for testdb using decflt_rounding round_half_up在Windows上:
C:\> db2set DB2_COMPATIBILITY_VECTOR=ORA
C:\> db2set DB2_DEFERRED_PREPARE_SEMANTICS=YESC:\> db2stop force
C:\> db2start
C:\> db2 create db testdb automatic storage yes on C:,D: DBPATH ON E: PAGESIZE 32 KC:\> db2 update db cfg for testdb using auto_reval deferred_enforceC:\> db2 update db cfg for testdb using decflt_rounding round_half_up然后是将 Oracle数据库对象和数据迁移到 DB2。DB2 9.7提供的原生 Oracle PL/SQL和 Oracle SQL支持极大地简化了这一过程。现在我们先来看一个简单的示例,这个例子选自 Oracle来演示 PL/SQL中 CASE语句的使用,例子如下:
set serveroutput on
Drop function Get_Grade3;
create or replace function Get_Grade3(score IN NUMBER) RETURN VARCHAR2 i**egin
use a Searched CASE Statement to find the Grade for thescore passed in as a parameter
CASE
WHEN score BETWEEN 80 AND 100 THEN return A;WHEN score BETWEEN 65 AND 79 THEN return B;WHEN score BETWEEN 50 AND 64 THEN return C;WHEN score BETWEEN 40 AND 49 THEN return D;WHEN score BETWEEN 0 AND 39 THEN return F;Comment the ELSE leg to generate the exceptionELSE return Invalid score;
END CASE;
exception
when CASE_NOT_FOUND then
return Exception- Case Not Found for score-|| score;end Get_Grade3;
select Get_Grade3(-1) from dual
C:\> db2 update db cfg for testdb using decflt_rounding round_half_up把这段代码保存在本地计算机的 D盘下面为 casetest.sql,在 DB2的 CLP plus中运行一下,居然一点都不需要修改就运行成功了,运行的结果如下:
Oracle向 DB2迁移:主要的流程与工具
这说明 DB2对 Oracle的兼容性的支持已经达到了一个很好的程度了。但是并不是所有程序都可以这么幸运的无需要修改就能正确的运行的。为了能够更好的完成迁移工作,还是需要了解两者之间特性的范围,以便我们能够更好的进行修改工作。在这里就不做说明了,大家可以去网上找找。
Oracle向 DB2迁移工具
1. IBM DB2 Migration Toolkit
利用免费的 IBM DB2 Universal Database(UDB)Migration Toolkit(MTK)简化和改进向 DB2 UDB的迁移工作。这个新的迁移实用程序提供了向导和易于使用的五步界面,这些有助于您快速地将现有的 Sybase、 Microsoft SQL Server和Oracle数据库对象转换到 DB2通用数据库。使用 MTK,可以将数据类型、表、列、视图、索引、存储过程和触发器自动地转换成等价的 DB2数据库对象。MTK向数据库管理员(DBA)和应用程序程序员提供了使迁移任务自动化所需要的工具,而以前这些任务不但效率低下而且开销巨大。通过使用 MTK中的以下特性,您可以减少停机时间、消除人为错误,以及降低人工和与传统数据库迁移相关联的其它资源消耗。MTK可运行于 AIX、Linux、Solaris和 Windows*作系统上。
2. IBM Data Movement Tool
利用 DB2兼容特性和 IBM提供的免费数据迁移工具 Data Movement Tool,快速地将现有的 Oracle数据库对象转换到 DB2通用数据库。同时对应用中使用到的数据库访问语言以及接口进行转换,终实现整个应用系统的完整迁移。
3. IBM Optim Development Studio
IBM Optim Development Studio,它为 Oracle、DB2和 Informix提供一个集成的数据库开发环境。Optim Development Studio在开发和测试 SQL和 XQuery查询、存储过程、Web服务和 Java数据访问层方面将生产力提高了 50%,而且允许在不同或者相同的数据服务器中的数据对象包、存储过程、表、用户自定义函数、用户自定义类型、视图、模式等的**粘贴。
这三款工具都是来自于IBM官方的,大家有需要可以进去官方**。
总结
以上只是简单的介绍了下迁移的流程和常用的工具,总的来说,迁移过程是一个复杂的过程,中间可能出现很多意想不到的情况,遇到问题,先查资料寻求解决方法,要有细心和耐心!我们在做迁移时,一定要做好备份,测试工作。而迁移工具只是一个辅助作用,如果单靠迁移工具是远远不够的。
二、db2创建存储过程在begin和end中间有东西就报错是什么情况
因为在 Unix平台下的 DB2存储过程对于实例用户和受防护用户之间的关系有一个约束,即 DB2实例用户必须同时是受防护用户的主组中的一个用户。
上述问题的发生就是由于在系统上,实例用户未加入至受防护用户的主组中,从而引发了存取权限不够的问题所导致的,而并非真的发生了如日志中所报的磁盘错误。解决这一问题的方法很简单,只要将实例用户加入该主组即可。
但有时用户会发现,即使已将用户加入到指定组,问题仍然存在,这时还应检查一下实例用户所加入的组是否是实例用户所对应的受防护用户的主组,即检查一下加入的组是否正确。
要找到实例用户所应的受防护用户以及受防护用户的主组,可用如下方法:
转入实例用户 Home路径下的 sqllib/adm路径。
执行命令:ls-l.fenced,会得到类似如下输出。
r--r--r-- 1 db2fencj db2fgrp2 0 Jul 30 09:57.fenced。
输出中表明,该文件所属的用户(db2fencj)即为受防护用户,所属的组(db2fgrp2)即为受防护用户的主组
继而,用户便可验证实例用户是否被加入到了正确的组中,如果结果正确,便可以解决上述问题。
三、在DB2中怎样根据身份证号用存储过程计算出生日期
1、存储过程编写
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;
SET V_RESULT= NULL;--为变量赋值
--检查用户输入的信息是否合法
select b.id INTO V_RESULT from TableNameB b,TableNameC c where正常的判断条件
if(V_RESULT IS NOT NULL) then---如果合法,执行下面的insert语句
INSERT INTO TableNameA(ID,ENTNAME,REGNO,PASSWORD,LEREP,CERTYPE,CERNO,LINKMAN,SEX,MOBTEL,REQDATE,REMITEM,STATE,TIMESTAMP)
VALUES(IN_ID,IN_ENTNAME,IN_REGNO,IN_PASSWORD,IN_LEREP,IN_CERTYPE,IN_CERNO,IN_LINKMAN,IN_SEX,IN_MOBTEL,IN_REQDATE,IN_REMITEM,IN_STATE,IN_TIMESTAMP);
end if;
commit;
END
@
2、调用存储过程
1.拷贝到DB2客户端工具中直接执行
2.将上面的语句保存为test.db2文件放到任意目录下(比如D盘根目录),然后在cmd输入db2cmd然后输入db2-td@-vf D:\test.db2即可
3.直接写sql:
call PLName(存储过程名字)(IN_ID,IN_ENTNAME,IN_REGNO,IN_PASSWORD,IN_LEREP,IN_CERTYPE,IN_CERNO,IN_LINKMAN,IN_SEX,IN_MOBTEL,IN_REQDATE,IN_REMITEM,IN_STATE,IN_TIMESTAMP对应的值)