2008-12-10 7 views
1

Comment écrire ci-dessous le code pseudo dans db2,Comment vérifier qu'une procédure/vue/table existe ou pas avant de la déposer dans DB2 9.1?

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

Une solution que je trouve, après googler est d'ignorer les codes de retour. Avons-nous une façon plus élégante de faire cela?

Merci


Mise à jour: Avec l'aide de la réponse ci-dessous, nous avons écrit un proc comme ci-dessous pour déposer les procédures

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 

Répondre

2

cette requête:

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

(où vous spécifiez votre nom de schéma sur l'espace réservé) vous donne tous les procs dans un schéma. Donc, la partie Proc existe est simplement une requête EXISTS sur cette vue avec le nom de proc approprié.