Menggunakan dukungan pernyataan yang disiapkan - Amazon Redshift

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menggunakan dukungan pernyataan yang disiapkan

JDBCDriver Amazon Redshift mendukung pernyataan yang disiapkan. Anda dapat menggunakan pernyataan yang disiapkan untuk meningkatkan kinerja kueri berparameter yang perlu dijalankan beberapa kali selama koneksi yang sama.

Pernyataan yang disiapkan adalah SQL pernyataan yang dikompilasi di sisi server tetapi tidak segera dijalankan. Pernyataan yang dikompilasi disimpan di server sebagai PreparedStatement objek sampai Anda menutup objek atau koneksi. Sementara objek itu ada, Anda dapat menjalankan pernyataan siap sebanyak yang diperlukan menggunakan nilai parameter yang berbeda, tanpa harus mengkompilasi pernyataan lagi. Overhead yang dikurangi ini memungkinkan kumpulan kueri dijalankan lebih cepat.

Untuk informasi lebih lanjut tentang pernyataan yang disiapkan, lihat “Menggunakan Pernyataan yang Disiapkan” di tutorial JDBC Dasar-dasar dari Oracle.

Anda dapat menyiapkan pernyataan yang berisi beberapa kueri. Misalnya, pernyataan disiapkan berikut berisi dua INSERT kueri:

PreparedStatement pstmt = conn.prepareStatement("INSERT INTO MyTable VALUES (1, 'abc'); INSERT INTO CompanyTable VALUES (1, 'abc');");

Berhati-hatilah agar kueri ini tidak bergantung pada hasil kueri lain yang ditentukan dalam pernyataan yang disiapkan yang sama. Karena kueri tidak berjalan selama langkah persiapan, hasilnya belum dikembalikan, dan tidak tersedia untuk kueri lain dalam pernyataan yang disiapkan yang sama.

Misalnya, pernyataan yang disiapkan berikut, yang membuat tabel dan kemudian menyisipkan nilai ke dalam tabel yang baru dibuat, tidak diperbolehkan:

PreparedStatement pstmt = conn.prepareStatement("CREATE TABLE MyTable(col1 int, col2 varchar); INSERT INTO myTable VALUES (1, 'abc');");

Jika Anda mencoba menyiapkan pernyataan ini, server mengembalikan kesalahan yang menyatakan bahwa tabel tujuan (myTable) belum ada. CREATEQuery harus dijalankan sebelum INSERT query dapat disiapkan.