当前位置: 代码迷 >> DB2 >> db2如何删除存在的存储过程
  详细解决方案

db2如何删除存在的存储过程

热度:10286   发布时间:2013-02-26 00:00:00.0
db2怎么删除存在的存储过程啊
-- drop procedure.
IF Exists(select 1 from syscat.procedures where procname=upper('P_getdata') and procschema='TEMP')
  drop procedure TEMP.P_getdata
end if;
create procedure TEMP.P_getdata
....

------解决方案--------------------------------------------------------
你是说上面的语句无法执行 还是怎么的?
------解决方案--------------------------------------------------------
IF Exists(select 1 from syscat.procedures where procname=upper('P_getdata') and procschema='TEMP')
drop procedure TEMP.P_getdata
end if;

这种在plsql或者tsql里面才有的

直接drop procedure TEMP.P_getdata
就行了
------解决方案--------------------------------------------------------
可以借助工具嘛。比如 ibm data studio.方便管理。
------解决方案--------------------------------------------------------
直接drop procedure TEMP.P_getdata,在db2里没法通过这种方式判断
------解决方案--------------------------------------------------------
db2里存储过程是通过 模式名PROCSCHEMA,过程名PROCNAME,参数个数PARM_COUNT,参数类型PARM_SIGNATURE确定其唯一性的
其中PARM_SIGNATURE在SYSCAT.PROCEDURES以十六进制形式存储

删除存储过程的时候必须带各个参数的类型才能成功
例如:
创建以下两个存储过程
CREATE PROCEDURE PRIVATE.TEST_P (IN a VARCHAR(1)) BEGIN ...
CREATE PROCEDURE PRIVATE.TEST_P (IN a VARCHAR(1),IN b INTEGER) BEGIN ...
删除以上两个存储过程
DROP PROCEDURE PRIVATE.TEST_P (VARCHAR())
CREATE PROCEDURE PRIVATE.TEST_P (VARCHAR(),INTEGER))

ps:db2里函数也是相同,类似于C++里的函数
  相关解决方案