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

Oracle:DBMS_UTILITY.EXEC_DDL_STATEMENTとEXECUTE IMMEDIATE

    基本的には同じことを行います。つまり、ネイティブでサポートされていないPL/SQLでDDLステートメントを実行するメカニズムを提供します。メモリが十分に機能する場合、EXEC_DDL_STATEMENTはDBMS_UTILITYパッケージのOracle 7バージョンで使用可能でしたが、ネイティブ動的SQL(EXECUTE IMMEDIATE)は8でのみ導入されました。

    いくつかの違いがあります。 EXECUTE IMMEDIATEは、主に動的SQLの実行に関するものです(NDSエイリアスが示すように)。 DDLに使用できるという事実は、バイバイバイです。一方、EXEC_DDL_STATEMENT()は、示唆されているように、DDLのみを実行できます。

    ただし、DBMS_UTILITYバージョンは、下位互換性のためだけに保持されるのではなく、EXECUTEIMMEDIATEでは実行できない巧妙なトリックが1つあります。それは分散方式でDDLを実行することです。ローカルデータベースからこのステートメントを実行して、リモートデータベースにテーブルを作成できます(ユーザーに必要な権限がある場合):

    SQL>  exec [email protected]_db('create table t1 (id number)');
    

    私はこれをお勧めしません、ただそれができると言っています。



    1. Postgres SQLの状態:22P02

    2. Oracleでデータベースリンクをチェーンできますか?

    3. Postgresに向けた取り組み-XL9.5

    4. Oracle:非常に大きなテーブルを左結合し、結合された行を最大のフィールド値を持つ行に制限します