sql >> Databasteknik >  >> RDS >> Oracle

Hur man programmatiskt genererar DDL från Oracle-databas?

Paketet DBMS_METADATA (förutsatt att du använder en relativt ny version av Oracle) kommer att generera DDL för alla objekt i databasen. Så

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

kommer att returnera en CLOB med DDL för SchemaA.TableA. Du kan fånga undantaget att objektet inte existerar, men jag skulle vilja föreslå att du frågar efter datalexikonet (dvs. DBA_OBJECTS) för att verifiera att det finns en tabell som heter TableA i SchemaA, d.v.s.

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

Observera att om du inte har tillgång till DBA_OBJECTS kan du använda ALL_OBJECTS istället. Oron där är dock att det kan finnas en TabellA i SchemaA som du inte har SELECT-åtkomst till. Den tabellen skulle inte visas i ALL_OBJECTS (som har alla objekt som du har tillgång till) men den skulle visas i DBA_OBJECTS (som har alla objekt i databasen oavsett din förmåga att komma åt dem).

Du kan sedan antingen skriva DDL till en fil eller, om antalet är 0, indikera att objektet inte finns. Från en lagrad procedur kan du använda UTL_FILE-paketet för att skriva till en fil på databasservern. Om du försöker skriva till en fil på klientfilsystemet måste du använda ett språk som har åtkomst till klientoperativsystemets resurser. Ett litet C/ Java/ Perl/ etc.-program bör kunna välja en CLOB och skriva den data till en fil på klientoperativsystemet.




  1. AWS Summits 2018:Chicago Recap

  2. 5 fantastiska resurser som hjälper dig att rocka din databasövervakningsroll

  3. Hur man konverterar Excel-ark till SQLite-databas i Android

  4. UTC_TIMESTAMP() Exempel – MySQL