Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak programowo wygenerować DDL z bazy danych Oracle?

Pakiet DBMS_METADATA (zakładając, że korzystasz z całkiem nowej wersji Oracle) wygeneruje DDL dla dowolnego obiektu w bazie danych. Więc

SELECT dbms_metadata.get_ddl( 'TABLE', 'TABLEA', 'SCHEMAA' )
  FROM dual;

zwróci CLOB z DDL dla SchemaA.TableA. Możesz złapać wyjątek, który jest rzucany, że obiekt nie istnieje, ale sugerowałbym wykonanie zapytania do słownika danych (tj. DBA_OBJECTS), aby sprawdzić, czy w SchemaA znajduje się tabela o nazwie TableA, tj.

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

Zauważ, że jeśli nie masz dostępu do DBA_OBJECTS, możesz zamiast tego użyć ALL_OBJECTS. Problem polega jednak na tym, że w SchemaA może znajdować się tabela A, do której nie masz dostępu SELECT. Ta tabela nie pojawiłaby się w ALL_OBJECTS (która zawiera wszystkie obiekty, do których masz dostęp), ale pojawiłaby się w DBA_OBJECTS (która zawiera wszystkie obiekty w bazie danych, niezależnie od tego, czy masz do nich dostęp).

Następnie możesz zapisać kod 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 do zapisu 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/ itp. powinien być w stanie wybrać CLOB i zapisać te dane do pliku w systemie operacyjnym klienta.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Enterprise Manager 11g FMW Control w R12.2

  2. Inżynieria odwrotna modelu danych przy użyciu Oracle SQL Developer

  3. Liczba wierszy, których dotyczy UPDATE w PL/SQL

  4. Pobierz wartości zwracane z tablicy pl/sql w java

  5. Jak utworzyć użytkownika w Oracle Multitenant 12c bez prefiksu C##?