导出所有DB2存储过程的四种方法

摘要:
答案是肯定的,下面就为您介绍四种导出所有DB2存储过程的方法,希望对您学习DB2存储过程方面能有所帮助。1)从DB2的目录表SYSCAT.ROUTINES中选取:在SYSCAT.ROUTINES系统目录表中,有一个名为TEXT的字段,其数据类型定义为CLOB,长度为2M,用于存放存储过程的创建语句。为得到全部存储过程的定义,可使用类似如下SELECT语句,并将定义输出到一个文件中。DB2SELECTCHAR,CHAR,TEXTFROMSYSCAT.ROUTINES˃此方法的缺陷是当text˃32767时,导出的该条存储过程是不完整的。

DB2存储过程如果要全部导出的话,是否可行呢?答案是肯定的,下面就为您介绍四种导出所有DB2存储过程的方法,希望对您学习DB2存储过程方面能有所帮助。

1)

从 DB2 的目录表 SYSCAT.ROUTINES 中选取:

在 SYSCAT.ROUTINES 系统目录表中,有一个名为 TEXT 的字段,其数据类型定义为 CLOB,长度为 2M(2097152 个字节),用于存放存储过程的创建语句。为得到全部存储过程的定义,可使用类似如下 SELECT 语句,并将定义输出到一个文件中。

DB2 SELECT CHAR(ROUTINESCHEMA,20), CHAR(ROUTINENAME,20), TEXT FROM SYSCAT.ROUTINES ><输出文件名>

此方法的缺陷是当text>32767时,导出的该条存储过程是不完整的。

2)

对于 v8.2 之后的 DB2,DB2LOOK 命令的 -e 选项中增加了对存储过程的创建语句的提取,用户通过执行:

db2look -d <数据库名> -e -o <输出文件名>

在命输出文件中找到“存储过程的 DDL 语句”段,从而获得创建所有存储过程的语句。

据说,db2 v8中 的db2look导出的存储过程是不完整的

3)

通过 GET ROUTINE 命令来完成:

由于 GET ROUTINE 只能在已知存储过程名称后,对单个存储过程进行,因此需要分成两个步骤来完成:

1. 获取所有存储过程的名称:

DB2 SELECT CHAR(ROUTINESCHEMA,20) AS SCHEMA, CHAR(ROUTINENAME,20) AS NAME FROM SYSCAT.ROUTINES WHERE SUBSTR(VARCHAR(TEXT),1,16) = 'CREATE PROCEDURE' ><输出文件名>

2. 根据输出文件中存储过程的名称,分别对每个存储过程执行如下操作,以便将完整的创建语句输出到指定文件中:

DB2 GET ROUTINE INTO <输出文件名> FROM PROCEDURE <存储过程模式名>.<存储过程名>

这个有点繁琐

4)

使用export:

db2 "EXPORT TO procudure.del OF del MODIFIED BY LOBSINFILE SELECT 'SET CURRENT SCHEMA '||rtrim(procschema)||'@'||chr(10)||'SET CURRENT PATH = SYSIBM,SYSFUN,SYSPROC,'||rtrim(procschema)||' @'||chr(10)||text||chr(10)||'@'||chr(10) FROM syscat.procedures ORDER BY create_time ;"

推荐这个。

免责声明:文章转载自《导出所有DB2存储过程的四种方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇(八)冰点还原安装及使用JS控制div跳转到指定的位置的解决方案总结下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

DB2中Lob is closed. ERRORCODE=4470的解决

使用DB2的Blob类型是,出现一下错误: Lob is closed. ERRORCODE=-4470, SQLSTATE=null;?C:com.ibm.db2.jcc.b.SqlException: [jcc][10120][11936][3.50.152] 操纵无效:已封闭 Lob。 ERRORCODE=-4470, SQLSTATE=null。...

mysql 按天创建分区存储过程

CREATE PROCEDURE `create_partition_by_day`(IN_SCHEMANAME VARCHAR(64), IN_TABLENAME VARCHAR(64)) BEGIN#当前日期存在的分区的个数 DECLARE ROWS_CNT INTUNSIGNED; #目前日期,为当前日期的后一天 DECLAR...

在Entity Framework中使用存储过程(一):实现存储过程的自动映射

之前给自己放了一个比较长的假期,在这期间基本上没怎么来园子逛。很多朋友的留言也没有一一回复,在这里先向大家道个歉。最近一段时间的工作任务是如何将ADO.NET Entity Framework 4.0(以下简称EF)引入到我们的开发框架,进行相应的封装、扩展,使之成为一个符合在特定场景下进行企业级快速开发的ORM。在此过程中遇到了一些挑战,也有一些心得。为...

SQL数据库设计的命名规范

< DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd> 1 相关的设计规范:1.1 采用有意义的字段名尽可能地把字段描述的清楚些。当然,也别做过头了,比如CustomerShippingAddressStreetLine1 虽然很富有说...

MySQL-快速入门(8)存储过程、存储函数

1、存储过程 1》创建存储过程:create procedure create procedure sp_name ([in | out | inout]param_name type) [characteristics ...] routine_body characteristics指定存储过程的特性: 1>language sql:说明rou...

oracle sqlplus 命令行中创建存储过程

while 循环插入测试数据 1.创建存储过程 create or replace procedure proc_test_while is i number; begin i := 0; while i < 40 loop i := i + 1; insert...