在将数据删除到db2 9.1之前,如何检查过程/视图/表是否存在?

时间:2008-12-10 10:59:28

标签: database db2

我们如何在db2中编写下面的伪代码,

If (Proc exists)
  Drop Proc
  Create Proc
Else
 Create Proc

我发现,谷歌搜索后的一个解决方案是忽略返回码。我们有更优雅的方式来做到这一点吗?

由于


更新:在下面的答案的帮助下,我们写了一个如下的proc来删除程序

  CREATE PROCEDURE SVCASNDB.DROPSP(IN P_SPECIFICNAME VARCHAR(128))
        SPECIFIC DROPSP

        P1: BEGIN


        -- Drop the SP if it already exists
        if exists (SELECT SPECIFICNAME FROM SYSIBM.SYSROUTINES WHERE SPECIFICNAME = trim(upper(p_SpecificName))) then
            begin
                DECLARE v_StmtString VARCHAR (1024);
                SET v_StmtString = 'DROP SPECIFIC PROCEDURE SCHEMA.' || p_SpecificName;
                PREPARE stmt1 FROM v_StmtString ;
                EXECUTE stmt1;
            end;
        end if;

    END P1

1 个答案:

答案 0 :(得分:2)

此查询:

SELECT DISTINCT ROUTINENAME, RESULT_SETS, REMARKS 
FROM SYSIBM.SYSROUTINES 
WHERE ROUTINESCHEMA='<schema>' AND FUNCTION_TYPE NOT IN ('S', 'T')

(在占位符处指定架构名称) 为您提供模式中的所有过程。因此,Proc存在部分只是对该视图的EXISTS查询,具有正确的proc名称。