我的要求是,
我想创建一个ddl脚本,它将检查DB上是否存在存储过程,如果是,则删除它并重新创建它。
我尝试的是,
IF EXISTS (select procname into Migration_procname from sysibm.sysprocedures where procname like 'GIAM_PRIVILEGE_MIGRATION') THEN
DROP PROCEDURE ITIMUSER.GIAM_PRIVILEGE_MIGRATION;
ELSE
CREATE PROCEDURE ITIMUSER.GIAM_PRIVILEGE_MIGRATION()
SPECIFIC ITIMUSER.GIAM_PRIVILEGE_MIGRATION
LANGUAGE SQL
BEGIN
......
......
update/select statements
......
END
@
哪个不起作用。 所以我甚至尝试创建另一个程序,这个程序执行相同的任务仍然没有成功。
任何指针都会有所帮助。
注意:我使用的是DB2 / LUW 9.5
答案 0 :(得分:0)
你可以试试CREATE OR REPLACE, 这是ORACLE中的语法,根据这个网站,它也应该在db2中工作: http://iprodeveloper.com/database/use-sql-create-or-replace-improve-db2-i-object-management
祝你好运答案 1 :(得分:0)
在以下过程中填充drop语句:
create procedure drop_procedure (procschema varchar(128),
procname varchar(128))
LANGUAGE SQL
BEGIN
DECLARE tmpstmt VARCHAR(100);
SET tmpstmt = 'drop procedure ' || procschema || '.' || procname;
A: BEGIN
-- Do nothing if drop procedure fails
DECLARE CONTINUE HANDLER FOR SQLSTATE '42704'
BEGIN
END;
EXECUTE IMMEDIATE tmpstmt;
END;
END @
然后无论是否存在程序,您都可以调用
CALL DROP_PROCEDURE('ITIMUSER', 'GIAM_PRIVILEGE_MIGRATION') @
CREATE PROCEDURE ITIMUSER.GIAM_PRIVILEGE_MIGRATION() ...