sql >> Databáze >  >> RDS >> Oracle

Jak programově generovat DDL z databáze Oracle?

Balíček DBMS_METADATA (za předpokladu, že používáte přiměřeně nejnovější verzi Oracle) vygeneruje DDL pro jakýkoli objekt v databázi. Takže

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

vrátí CLOB s DDL pro SchemaA.TableA. Mohli byste zachytit výjimku, která je vyvolána, že objekt neexistuje, ale měl bych tendenci navrhovat, abyste se dotazovali na datový slovník (tj. DBA_OBJECTS), abyste ověřili, že ve SchemaA existuje tabulka s názvem TableA, tj.

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

Všimněte si, že pokud nemáte přístup k DBA_OBJECTS, můžete místo toho použít ALL_OBJECTS. Problémem však je, že ve SchemaA může být tabulkaA, ke které nemáte přístup SELECT. Tato tabulka by se neobjevila v ALL_OBJECTS (který má všechny objekty, ke kterým máte přístup), ale objeví se v DBA_OBJECTS (který má všechny objekty v databázi bez ohledu na vaši schopnost k nim přistupovat).

Potom můžete buď zapsat DDL do souboru, nebo, pokud je počet 0, označit, že objekt neexistuje. Z uložené procedury můžete použít balíček UTL_FILE k zápisu do souboru na databázovém serveru. Pokud se pokoušíte zapisovat do souboru na klientském souborovém systému, budete muset použít jazyk, který má přístup k prostředkům klientského operačního systému. Malý C/Java/Perl/atd. program by měl být schopen vybrat CLOB a zapsat tato data do souboru v klientském operačním systému.




  1. SQL Server – Zkrat dotazu?

  2. LINQ to SQL více tabulek levé vnější spojení

  3. PostgreSQL, komplexní dotaz pro výpočet přísad podle receptury

  4. Jak automatizovat dotazy na kontingenční tabulky v MySQL