2010-11-12 26 views
5

Mam monumentalnie nużące zadanie, które polega na znalezieniu kilku tabel z ogromnego schematu i wygenerowaniu DDL dla tych tabel.Jak programowo generować DDL z bazy danych Oracle?

powiedzieć, że już dostał schemaA ma 1000 tabele, muszę znaleźć, jeśli tableA istniał w tym schemaA, jeśli to robi, generowanie DDL i zapisać go do systemu plików, jeśli nie, to nazwa drukować out lub zapisz go w pliku. Jakieś pomysły?

Odpowiedz

16

Pakiet DBMS_METADATA (zakładając, że korzystasz z rozsądnie nowszej wersji Oracle) wygeneruje DDL dla dowolnego obiektu w bazie danych. Tak więc zostanie zwrócony obiekt CLOB z plikiem DDL dla SchemaA.TableA. Można wychwycić wyjątek, który został zgłoszony, że obiekt nie istnieje, ale sugerowałbym, aby zapytać słownik danych (np. DBA_OBJECTS), aby sprawdzić, czy istnieje tabela o nazwie TableA w SchemaA, tj.

SELECT COUNT(*) 
    FROM dba_objects 
WHERE owner = 'SCHEMAA' 
    AND object_name = 'TABLEA' 
    AND object_type = 'TABLE' 

Pamiętaj, że jeśli nie masz dostępu do DBA_OBJECTS, możesz zamiast tego użyć ALL_OBJECTS. Istnieje jednak obawa, że ​​w Schema A może znajdować się tabela A, na której nie masz dostępu SELECT. Ta tabela nie pojawi się w ALL_OBJECTS (która ma wszystkie obiekty, do których masz dostęp), ale pojawi się w DBA_OBJECTS (która ma wszystkie obiekty w bazie danych, bez względu na twoją możliwość dostępu do nich).

Następnie można zapisać plik DDL do pliku lub, jeśli liczba wynosi 0, wskazać, że obiekt nie istnieje. Z procedury składowanej można użyć pakietu UTL_FILE, aby zapisać do pliku na serwerze bazy danych. Jeśli próbujesz pisać do pliku w systemie plików klienta, musisz użyć języka, który ma dostęp do zasobów systemu operacyjnego klienta. Mały program C/Java/Perl/etc. powinien mieć możliwość wybrania CLOB i zapisania tych danych do pliku w systemie operacyjnym klienta.

+0

Świetne, Justin, testowałem pierwszą część sql działa świetnie, ale kiedy uruchamiam drugą część, mam ORA-00942: tabela lub widok nie istnieje. I jak mogę napisać clob do pliku przy użyciu sql? – Sawyer

+0

@ZZcat - Zaktualizowano moją odpowiedź –

+0

Drobne zaniedbanie - pierwsza próbka SQL potrzebuje przecinka między "TABELĄ" a "TABELĄ", bez której nie zadziała. –

Powiązane problemy