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

Oracle:「即時実行」とはどういう意味ですか?

    ネイティブの動的SQL を実行するためのものです。 。

    DMLの場合、コンパイル時に使用できないステートメントを実行するときに使用します。列リストがユーザーからの選択に基づいている場合。

    あなたの場合、DDLはPL/SQL内から静的SQLとして実行できないために使用されています。 特定のクエリ、DML、およびTCLコマンドのみが有効です 。それ以外は動的として扱う必要があります。

    PL/SQLブロックからDDLを使用する必要があることはめったにないと思います。 TRUNCATE 合理的かもしれません。その場でオブジェクトを作成または削除するものを見つけた場合は、最適ではないデータモデルを示唆する可能性があるため、それはより懸念される可能性があります。

    EXECUTE IMMEDIATE それ自体は自動的にコミットしません。ただし、DDLを実行すると、PL / SQLの外部で実行した場合と同じように動作するため、場合によってはコミットされます。

    ちなみに、コードがステートメントを保持するために中間変数を使用している理由はわかりません。これは、実行される内容を表示したい場合に便利ですが、そうではないようです。あなたがしたことは次のように行うことができます:

    EXECUTE IMMEDIATE 'TRUNCATE TABLE BD_BIDS_EXT_DET';
    

    つまり、V_SQL_1を使用しません まったく。



    1. Laravel Eloquent with()->nullを返す

    2. 条件付き分割変換:SQLServerからOracleおよびMySQLデータベースへのデータのエクスポート

    3. 警告:mysql_connect():[2002]そのようなファイルまたはディレクトリはありません(unix:///tmp/mysql.sock経由で接続しようとしています)

    4. MAX(DATE)を使用したGROUP BY