2011-11-25 18 views
6

Necesito dejar caer una tabla de DB2 si existe, o descartar e ignorar los errores.DB2 Drop table si existe equivalente

+0

¿En qué contexto está ejecutando esto? Si está ejecutando un script, las habilidades necesarias _may_ no estarán disponibles. Si estás haciendo esto desde un nivel/aplicación superior (RPG, Java, C#, etc.), esto suele ser trivial. –

+0

Vea si esto ayuda: http://bytes.com/topic/db2/answers/509144-drop-table-view-only-if-exists –

+0

Lo hago en JAVA –

Respuesta

1

Primera consulta si existe la tabla, como

select tabname from syscat.tables where tabschema='myschema' and tabname='mytable' 

y si se vuelve tema algo que su

drop table myschema.mytable 

Otra posibilidad es simplemente emitir el comando de caída y detectar la excepción que será levantada si la tabla no existe Simplemente ponga ese código adentro intente el bloque {...} catch (Exception e) {// Ignore} para ese enfoque.

+0

El try/catch no es bueno porque el la excepción puede deberse a la ausencia de la tabla, pero debido al hecho de que algunas restricciones hacen referencia a esta tabla y no se puede descartar hasta que se eliminen esas restricciones. – mvmn

+0

@mvmn: DB2 (al menos las versiones que conozco) siempre realiza una caída en "cascada". Por lo tanto, cualquier FK se cancelará de todos modos –

1

Prueba con esto:

IF EXISTS (SELECT name FROM sysibm.systables WHERE name = 'tab_name') THEN 
DROP TABLE tab_name;END IF; 
+0

También debe considerar el nombre del esquema; de lo contrario, el nombre de la tabla podría existir en otro esquema, pero no en el suyo, y se lanzará una excepción. –

+0

Y también es posible que desee comprobar que se trata de una tabla (y no una vista). –

+0

DB2 no es compatible con este tipo de control de flujo programático – user119588

0

búsqueda en systable: si está en AS400 (i potencia, sistema i) el nombre de la tabla sistema se QSYS2.SYSTABLES demás tratan sysibm.systables o syscat.tables (Este depende del sistema operativo)

BEGIN  
IF EXISTS (SELECT NAME FROM QSYS2.SYSTABLES WHERE TABLE_SCHEMA = 'YOURLIBINUPPER' AND TABLE_NAME = 'YOUTABLENAMEINUPPER') THEN   
    DROP TABLE YOURLIBINUPPER.YOUTABLENAMEINUPPER;        
END IF;               
END ; 
Cuestiones relacionadas