如果在db2中使用ddl不存在,则创建一个存储过程

时间:2014-06-05 08:54:23

标签: database stored-procedures db2 procedure

我的要求是,

我想创建一个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

2 个答案:

答案 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() ...