sql >> データベース >  >> RDS >> Oracle

OracleデータベースからプログラムでDDLを生成する方法は?

    DBMS_METADATAパッケージ(かなり新しいバージョンのOracleを使用していると仮定)は、データベース内の任意のオブジェクトのDDLを生成します。だから

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

    SchemaA.TableAのDDLを含むCLOBを返します。オブジェクトが存在しないというスローされた例外をキャッチすることはできますが、データディクショナリ(つまり、DBA_OBJECTS)にクエリを実行して、SchemaAにTableAという名前のテーブルがあることを確認することをお勧めします。

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

    DBA_OBJECTSにアクセスできない場合は、代わりにALL_OBJECTSを使用できることに注意してください。ただし、ここでの懸念は、SELECTアクセス権を持たないTableAがSchemaAに存在する可能性があることです。そのテーブルは、ALL_OBJECTS(アクセスできるすべてのオブジェクトを含む)には表示されませんが、DBA_OBJECTS(アクセスする能力に関係なくデータベース内のすべてのオブジェクトを含む)には表示されます。

    次に、DDLをファイルに書き込むか、カウントが0の場合は、オブジェクトが存在しないことを示します。ストアドプロシージャから、UTL_FILEパッケージを使用して、データベースサーバー上のファイルに書き込むことができます。クライアントファイルシステム上のファイルに書き込もうとしている場合は、クライアントオペレーティングシステムのリソースにアクセスできる言語を使用する必要があります。小さなC/Java / Perl /などのプログラムは、CLOBを選択し、そのデータをクライアントオペレーティングシステム上のファイルに書き込むことができるはずです。




    1. OracleでSQLを使用して現在の年を取得するにはどうすればよいですか?

    2. cxを使用してUnicodeを挿入できない-Oracle

    3. OracleとSQLServerのスペースの処理の違い

    4. MySQLで先頭/末尾の文字で文字列を埋める方法– LPAD()、RPAD()