Seluruh blok PL/SQL diuraikan pada waktu kompilasi, tetapi teks dalam pernyataan dinamis tidak dievaluasi sampai runtime. (Mereka hampir sama untuk blok anonim, tetapi langkahnya masih berbeda).
If/else Anda juga tidak dievaluasi sampai runtime. Kompilator tidak mengetahui bahwa tabel akan selalu ada pada saat Anda melakukan penyisipan, ia hanya dapat memeriksa apakah tabel itu ada atau tidak pada saat ia mem-parsing seluruh blok.
Jika tabel sudah ada maka tidak apa-apa; kompiler dapat melihatnya, blok dijalankan, pilihan Anda mendapat 1, dan Anda masuk ke yang lain untuk melakukan penyisipan. Tetapi jika tidak ada maka penguraian sisipan dengan benar gagal dengan ORA-00942 pada waktu kompilasi dan tidak ada apa pun di blok yang dieksekusi.
Karena pembuatan tabel bersifat dinamis, semua referensi ke tabel juga harus dinamis - sisipan Anda seperti yang Anda lihat, tetapi juga jika Anda kemudian menanyakannya. Pada dasarnya itu membuat kode Anda lebih sulit untuk dibaca dan dapat menyembunyikan kesalahan sintaks - karena kode dinamis tidak diuraikan hingga waktu proses, dan mungkin Anda dapat memiliki kesalahan dalam pernyataan dinamis di cabang yang tidak terkena lama.
Tabel sementara global tidak boleh dibuat saat itu juga. Mereka adalah objek permanen dengan data sementara, khusus untuk setiap sesi, dan tidak boleh dibuat/dihapus sebagai bagian dari kode aplikasi Anda. (Tidak ada perubahan skema yang harus dilakukan oleh aplikasi Anda secara umum; perubahan itu harus dibatasi pada perubahan peningkatan/pemeliharaan dan dikontrol, untuk menghindari kesalahan, kehilangan data, dan efek samping yang tidak terduga; GTT tidak berbeda).
Tidak seperti tabel sementara di beberapa database relasional lainnya, saat Anda membuat tabel sementara di database Oracle, Anda membuat definisi tabel statis. Tabel sementara adalah objek persisten yang dijelaskan dalam kamus data, tetapi tampak kosong hingga sesi Anda memasukkan data ke dalam tabel. Anda membuat tabel sementara untuk database itu sendiri, bukan untuk setiap prosedur tersimpan PL/SQL.
Buat GTT sekali dan buat semua kode PL/SQL Anda statis. Jika Anda menginginkan sesuatu yang lebih dekat dengan tabel sementara lokal SQL Server, lihat koleksi PL/SQL.