2011-11-25 14 views
6

Muszę upuścić tabelę DB2, jeśli istnieje, lub usunąć i zignorować błędy.Tabela upuszczania bazy danych DB2, jeśli istnieje, jest odpowiednikiem

+0

W jakim kontekście to robisz? Jeśli wykonujesz skrypt, niezbędne umiejętności _may_ nie będą dostępne. Jeśli robisz to na wyższym poziomie/aplikacji (RPG, Java, C#, itp.), Jest to zwykle banalne. –

+0

Sprawdź, czy to pomaga: http://bytes.com/topic/db2/answers/509144-drop-table-view-only-if-exists –

+0

Robię to na JAVA –

Odpowiedz

1

pierwsze zapytanie, czy tabela istnieje, jak

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

i jeśli zwróci coś wystawia

drop table myschema.mytable 

Inne możliwością jest po prostu wydać polecenie drop i złapać wyjątek, który zostanie podniesiony jeśli tabela nie istnieje. Po prostu wstaw ten kod do bloku try {...} catch (Exception e) {// Ignore} dla tego podejścia.

+0

Try/catch nie jest dobra, ponieważ wyjątek może nie wynikać z braku tabeli, ale z powodu faktu, że niektóre ograniczenia odwołują się do tej tabeli i nie można jej usunąć, dopóki te ograniczenia nie zostaną usunięte. – mvmn

+0

@mvmn: DB2 (przynajmniej wersje, które znam) zawsze robi "kaskadowy" spadek. Więc każdy FK zostanie po cichu upuszczony i tak –

1

Spróbuj tego:

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

Powinieneś rozważyć również nazwę schematu, w przeciwnym razie nazwa tabeli może istnieć w innym schemacie, ale nie w twojej, a wyjątek zostanie zgłoszony. –

+0

Możesz również sprawdzić, czy jest to tabela (a nie widok). –

+0

DB2 nie obsługuje tego rodzaju programowej kontroli przepływu – user119588

0

wyszukiwanie na systable: jeśli jesteś na AS400 (i zasilania, układ i) nazwa tabeli system jest QSYS2.SYSTABLES jeszcze spróbować SYSIBM.SYSTABLES lub syscat.tables (ta zależy od systemu operacyjnego)

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