Bagikan melalui


Menjalankan Pernyataan

Ada empat cara untuk menjalankan pernyataan, tergantung pada kapan mereka dikompilasi (disiapkan) oleh mesin database dan siapa yang mendefinisikannya:

  • Eksekusi Langsung Aplikasi mendefinisikan pernyataan SQL. Ini disiapkan dan dijalankan pada waktu proses dalam satu langkah.

  • Eksekusi yang Disiapkan Aplikasi mendefinisikan pernyataan SQL. Ini disiapkan dan dijalankan pada waktu proses dalam langkah terpisah. Pernyataan dapat disiapkan sekali dan dijalankan beberapa kali.

  • Prosedur Aplikasi dapat menentukan dan mengkompilasi satu atau beberapa pernyataan SQL pada waktu pengembangan dan menyimpan pernyataan ini pada sumber data sebagai prosedur. Prosedur dijalankan satu atau beberapa kali pada waktu proses. Aplikasi dapat menghitung prosedur tersimpan yang tersedia menggunakan fungsi katalog.

  • Fungsi Katalog Penulis driver membuat fungsi yang mengembalikan tataan hasil yang telah ditentukan sebelumnya. Biasanya, fungsi ini mengirimkan pernyataan SQL yang telah ditentukan sebelumnya atau memanggil prosedur yang dibuat untuk tujuan ini. Fungsi ini dijalankan satu atau beberapa kali pada waktu proses.

Pernyataan tertentu (seperti yang diidentifikasi oleh handel pernyataannya) dapat dijalankan beberapa kali. Pernyataan dapat dijalankan dengan berbagai pernyataan SQL yang berbeda, atau dapat dijalankan berulang kali dengan pernyataan SQL yang sama. Misalnya, kode berikut menggunakan handel pernyataan yang sama (hstmt1) untuk mengambil dan menampilkan tabel dalam database Penjualan. Kemudian menggunakan kembali handel ini untuk mengambil kolom dalam tabel yang dipilih oleh pengguna.

SQLHSTMT    hstmt1;  
SQLCHAR *   Table;  
  
// Create a result set of all tables in the Sales database.  
SQLTables(hstmt1, "Sales", SQL_NTS, "sysadmin", SQL_NTS, NULL, 0, NULL, 0);  
  
// Fetch and display the table names; then close the cursor.  
// Code not shown.  
  
// Have the user select a particular table.  
SelectTable(Table);  
  
// Reuse hstmt1 to create a result set of all columns in Table.  
SQLColumns(hstmt1, "Sales", SQL_NTS, "sysadmin", SQL_NTS, Table, SQL_NTS, NULL, 0);  
  
// Fetch and display the column names in Table; then close the cursor.  
// Code not shown.  

Dan kode berikut menunjukkan bagaimana satu handel digunakan untuk berulang kali menjalankan pernyataan yang sama untuk menghapus baris dari tabel.

SQLHSTMT      hstmt1;  
SQLUINTEGER   OrderID;  
SQLINTEGER    OrderIDInd = 0;  
  
// Prepare a statement to delete orders from the Orders table.  
SQLPrepare(hstmt1, "DELETE FROM Orders WHERE OrderID = ?", SQL_NTS);  
  
// Bind OrderID to the parameter for the OrderID column.  
SQLBindParameter(hstmt1, 1, SQL_PARAM_INPUT, SQL_C_ULONG, SQL_INTEGER, 5, 0,  
                  &OrderID, 0, &OrderIDInd);  
  
// Repeatedly execute hstmt1 with different values of OrderID.  
while ((OrderID = GetOrderID()) != 0) {  
   SQLExecute(hstmt1);  
}  

Bagi banyak driver, mengalokasikan pernyataan adalah tugas yang mahal, jadi menggunakan kembali pernyataan yang sama dengan cara ini biasanya lebih efisien daripada membebaskan pernyataan yang ada dan mengalokasikan yang baru. Aplikasi yang membuat tataan hasil pada pernyataan harus berhati-hati untuk menutup kursor atas hasil yang ditetapkan sebelum mengeksekusi ulang pernyataan; untuk informasi selengkapnya, lihat Menutup Kursor.

Menggunakan kembali pernyataan juga memaksa aplikasi untuk menghindari batasan pada beberapa driver jumlah pernyataan yang dapat aktif pada satu waktu. Definisi yang tepat dari "aktif" adalah khusus driver, tetapi sering mengacu pada pernyataan apa pun yang telah disiapkan atau dijalankan dan masih memiliki hasil yang tersedia. Misalnya, setelah pernyataan INSERT disiapkan, umumnya dianggap aktif; setelah pernyataan SELECT dijalankan dan kursor masih terbuka, umumnya dianggap aktif; setelah pernyataan CREATE TABLE dijalankan, umumnya tidak dianggap aktif.

Aplikasi menentukan berapa banyak pernyataan yang dapat aktif pada satu koneksi pada satu waktu dengan memanggil SQLGetInfo dengan opsi SQL_MAX_CONCURRENT_ACTIVITIES. Aplikasi dapat menggunakan pernyataan yang lebih aktif daripada batas ini dengan membuka beberapa koneksi ke sumber data; karena koneksi bisa mahal, namun, efeknya pada performa harus dipertimbangkan.

Aplikasi dapat membatasi jumlah waktu yang dialokasikan untuk pernyataan yang akan dijalankan dengan atribut pernyataan SQL_ATTR_QUERY_TIMEOUT. Jika periode batas waktu berakhir sebelum sumber data mengembalikan kumpulan hasil, fungsi yang menjalankan pernyataan SQL mengembalikan SQLSTATE HYT00 (Batas Waktu habis kedaluwarsa). Secara default, tidak ada batas waktu.

Bagian ini berisi topik berikut.