http://yibingmei.blog.51cto.com/764708/171817
的SYSPROC.ADMIN_CMD() procedure的简单学习
使用db2的人都知道,db2过程的使用有很大的局限,比起oracle差了很多,因为过程中只能操作简单的DDL和DML!对于很多操作(比如runstatus,load等)都不能在sql过程中做!个人觉得DB2似乎不很重视这方面的研发,比如说DB2之前连sql过程都不支持,再比如,DB2在oracle之前提出来了分析函数,但自从提出来以后一直就那么几个,直到V9.5做了相对oracle的完善(Lag,lead等)!呵呵!
言归正传,db2 V9以后出了一个系统的过程ADMIN_CMD,这个过程基本上解决了上述(过程中只能使用简单DDL和DML)问题,但个人觉得还是有一定局限性(IBM的东东就是补补贴贴,不能做到一次到位),呵呵!
首先来看ADMIN_CMD都能做什么?我查询了一下db2的官网,V9.5中能做的事大致如下:
ü ADD CONTACT
ü ADD CONTACTGROUP
ü AUTOCONFIGURE
ü BACKUP - online only
ü DESCRIBE
ü DROP CONTACT
ü DROP CONTACTGROUP
ü EXPORT
ü FORCE APPLICATION
ü IMPORT
ü INITIALIZE TAPE
ü LOAD
ü PRUNE HISTORY/LOGFILE
ü QUIESCE DATABASE
ü QUIESCE TABLESPACES FOR TABLE
ü REDISTRIBUTE
ü REORG INDEXES/TABLE
ü RESET ALERT CONFIGURATION
ü RESET DATABASE CONFIGURATION
ü RESET DATABASE MANAGER CONFIGURATION
ü REWIND TAPE
ü RUNSTATS
ü SET TAPE POSITION
ü UNQUIESCE DATABASE
ü UPDATE ALERT CONFIGURATION
ü UPDATE CONTACT
ü UPDATE CONTACTGROUP
ü UPDATE DATABASE CONFIGURATION
ü UPDATE DATABASE MANAGER CONFIGURATION
ü UPDATE HEALTH NOTIFICATION CONTACT LIST
ü UPDATE HISTORY
再说执行ADMIN_CMD需要的权限!
ADMIN_CMD采用返回结果集的方式,返回执行过程中的系统的信息!这个结果集包括sqlcode,MSG等,并且根据所执行操作的不同,有时候会返回2个结果集,但有的操作就下部需要会返回结果集(比如RUNSTATS),用户可以对结果集进行操作,来对执行结果进行其他的处理。
这边具体讨论下,SQL过程中ADMIN_CMD关于EXPORT的操作!对于其他类型的操作可以通过如下连接访问IBM官网,查询相关信息!
EXPORT操作返回一个结果集,包括3部分内容:
l ROWS_EXPORTED----记录export多少行!类型为BIGINT
l MSG_RETRIEVAL--记录export执行后的信息(sqlcode等)类型为VARCHAR(512),
这里返回的是一段字符串代码,然后可以通过如下操作查询到对应的信息SELECT SQLCODE, MSG FROM TABLE (SYSPROC.ADMIN_GET_MSGS('3203498_txu')) AS MSGl MSG_REMOVAL--记录清除export的信息的代码!类型为VARCHAR(512)
这里返回的也同样是一段字符串代码,然后可以通过如下操作查询到对应的信息SELECT CALL SYSPROC.ADMIN_REMOVE_MSGS ('3203498_txu')那么怎么在存储过程中操作返回的结果集呢,PUB上有人问,其实这就属于基础知识了,但是这边还是做了一个补充
--首先建立一个结果集数组
--这里定义一个就够了,因为ADMIN_CMD的EXPORT操作返回值为1个result set,但是要注意别的操作有可能返回2个result set的,这时就需要定义2个了
declare loc1 result_set_locator varying;
--然后执行存储过程ADMIN_CMD
CALL SYSPROC.ADMIN_CMD ('EXPORT to /home/user1/data/myfile.ixf OF ixf MESSAGES ON SERVER select * from staff');
--然后调用该ADMIN_CMD返回结果集。
associate result set locator(loc1) with procedure ADMIN_CMD;
--将返回结果集和结果集数组关联
--再然后将结果集数组分配给cursor
allocate cursor1 cursor for result set loc1;
--下来就是操作游标的东东了J
fetch cursor1 into ....--这里就不详细说了。。
--最后需要关闭游标
close cursor1;
添加新评论0 条评论