2010-03-22 12 views
1

Pourquoi pas ce travail dans IBM Data Studio (Eclipse):Déposer une vue DB2 si elle existe

IF EXISTS (SELECT 1 FROM SYSIBM.SYSVIEWS WHERE NAME = 'MYVIEW' AND CREATOR = 'MYSCHEMA') THEN 
    DROP VIEW MYSCHEMA.MYVIEW; 
END IF; 

J'ai le sentiment qu'il a à faire avec terminateurs déclaration (;) mais je ne peux pas trouver une syntaxe qui fonctionne .

Une autre question similaire à How to check a procedure/view/table exists or not before dropping it in db2 9.1? suggère qu'ils ont dû créer un proc mais ce n'est pas une solution pour nous.

+0

Est-ce DB2 pour iSeries ou DB2 pour les autres plates-formes? Cela compte parce qu'il y a une différence. –

+0

Notre serveur DB2 est sous AIX, mais je lance IBM Data Studio sur un ordinateur Windows. – grenade

Répondre

1

du livre d'IBM: Getting Started with Data Studio for DB2:

fin de commande: Vous pouvez développer plusieurs instructions SQL dans une seule fenêtre SQL Editor, en terminant chaque déclaration avec un caractère de fin d'instruction . Le terminateur par défaut est un point-virgule . Mais vous pouvez changer cela en un autre caractère en cliquant avec le bouton droit de la souris dans le contenu de l'éditeur et en sélectionnant l'action du menu contextuel Définir Terminator d'instruction.

EDIT:

OK, le problème semble être la syntaxe. Beaucoup de gens semblent avoir le même problème. Exemple voir DROP TABLE, VIEW, ... only IF EXISTS.

Dans l'exemple, deux solutions sont mentionnées.

  1. utilisation Begin atomic
  2. utiliser la procédure db2perf_quiet_drop

Pour plus de détails lire la page aimé.

Deuxième EDIT:

Je viens de trouver une explication vraiment bon pour Begin ataomic sur les pages IBM. Voir Advanced SQL Scripting PL d'IBM. L'exemple 2 est ce que vous cherchez.

+0

Oui, je pense que le problème est quelque chose dans le sens du processeur sql n'aime pas le terminateur de déclaration à l'intérieur de la if ... fin si, mais je ne fais que deviner. Ce dont j'ai vraiment besoin, c'est d'une instruction sql valide db2 qui va vérifier qu'une vue existe avant de la déposer. – grenade

+0

D'après ce que je peux voir de cet exemple 2, il décrit comment alimenter une instruction SQL stockée dans un fichier texte, vers le client de ligne de commande DB2. C'est intéressant mais ça ne répond pas à ma question. – grenade

+0

Il vous montre comment encapsuler l'instruction 'if' avec' begin atomic'. Il indique également que vous devez utiliser un terminateur Statement différent. De plus, il vous montre que même le terminateur de déclaration a été changé en '@' vous devez utiliser le ';' pour l'instruction qui est enveloppée par 'begin atomic'. –

Questions connexes