sql >> Database teknologi >  >> RDS >> Oracle

Hvordan genererer man DDL programmatisk fra Oracle-databasen?

DBMS_METADATA-pakken (forudsat at du er på en forholdsvis ny version af Oracle) vil generere DDL for ethvert objekt i databasen. Så

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

vil returnere en CLOB med DDL for SchemaA.TableA. Du kan fange den undtagelse, der bliver kastet om, at objektet ikke eksisterer, men jeg vil gerne foreslå, at du forespørger i dataordbogen (dvs. DBA_OBJECTS) for at bekræfte, at der er en tabel med navnet TableA i SchemaA, dvs.

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

Bemærk, at hvis du ikke har adgang til DBA_OBJECTS, kan du bruge ALL_OBJECTS i stedet. Bekymringen dér er dog, at der kan være en TabelA i SchemaA, som du ikke har SELECT-adgang til. Den tabel vil ikke blive vist i ALL_OBJECTS (som har alle de objekter, du har adgang til), men den vil blive vist i DBA_OBJECTS (som har alle objekterne i databasen uanset din mulighed for at få adgang til dem).

Du kan derefter enten skrive DDL til en fil eller, hvis antallet er 0, angive, at objektet ikke eksisterer. Fra en lagret procedure kan du bruge UTL_FILE-pakken til at skrive til en fil på databaseserveren. Hvis du forsøger at skrive til en fil på klientfilsystemet, skal du bruge et sprog, der har adgang til klientoperativsystemets ressourcer. Et lille C/ Java/ Perl/ etc. program burde være i stand til at vælge en CLOB og skrive disse data til en fil på klientoperativsystemet.




  1. varchar2(n BYTE|CHAR) standard -> CHAR eller BYTE

  2. Oprettelse af rollebaseret adgangskontrol i MongoDB

  3. PostgreSQL – Sådan fjerner du gentagne værdier

  4. Hvordan køres .sql-fil i Oracle SQL-udviklerværktøj for at importere database?