6
votes

La syntaxe de si existe sur IBM DB2

La requête suivante tombe une table si la table existe mais cela ne semble pas fonctionner pour IBM DB2.

Begin atomic

if( exists(

SELECT 1 FROM SYSIBM.SYSTABLES 
            WHERE NAME='EMAIL' AND TYPE='T' AND creator = 'schema1'
)) then
drop table EMAIL;
end if;
End


1 commentaires

Obtenez-vous un message d'erreur? Si oui, pouvez-vous poster cela?


3 Réponses :


1
votes

Vous avez raison que DB2 interdit à DDL dans un bloc SQL atomique. IBM a publié une procédure complémentaire gratuite appelée db2perf_quiet_drop qui fonctionne comme vous le souhaitez.


0 commentaires

9
votes

La façon dont je l'ai fait est comme suit xxx

My CustomStoredProc vient d'exécuter immédiatement @dynsql;


0 commentaires

-3
votes
In case if you looking for embedded SQL:
Exec SQL                                   
  update Table1 set TabCol1 ='New Value' 
   where Table1KeyField1 =:Table1KeyValue1               
     and Table1KeyField2 =:Table1KeyValue2               
     and Exists (                          
       select '1' from Table2               
        where Table2KeyField1 =:Table2KeyValue1          
          and Table2KeyField2 =:Table2KeyValue2        
    ) ;                                    

2 commentaires

Cela ne semble pas répondre à la question de la puissance


Le script met à jour le tableau1 Si l'enregistrement existe dans le tableau2 sur la base de la clause. Je l'ai intégré dans mon code RPG et j'ai fonctionné. Vous pouvez exécuter ci-dessous le script et ajuster votre en conséquence ou m'envoyer votre script et je vais le réparer pour vous: Sélectionnez «1» comme true de Sysibm / SysDamy1 où existe (sélectionnez * à partir de sysibm / systypinfo où Type_Name = 'Integer');