1

以下の擬似コードを db2 でどのように記述すればよいでしょうか。

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

グーグルで見つけた解決策の1つは、リターンコードを無視することです。これを行うためのよりエレガントな方法はありますか?

ありがとう


更新:以下の回答の助けを借りて、手順を削除するために以下のように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
4

1 に答える 1

2

このクエリ:

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

(プレースホルダーでスキーマ名を指定する場所)は、スキーマ内のすべてのプロシージャを提供します。したがって、Proc exists 部分は、適切な proc 名を持つそのビューに対する単純な EXISTS クエリです。

于 2008-12-13T13:53:26.717 に答える