Bagikan melalui


Pernyataan SQL Dibuat pada Waktu Eksekusi

Aplikasi yang melakukan analisis ad hoc umumnya membangun pernyataan SQL pada waktu proses. Misalnya, spreadsheet mungkin memungkinkan pengguna untuk memilih kolom tempat mengambil data:

// SQL_Statements_Constructed_at_Run_Time.cpp  
#include <windows.h>  
#include <stdio.h>  
#include <sqltypes.h>  
  
int main() {  
   SQLCHAR *Statement = 0, *TableName = 0;  
   SQLCHAR **TableNamesArray, **ColumnNamesArray = 0;  
   BOOL *ColumnSelectedArray = 0;  
   BOOL  CommaNeeded;  
   SQLSMALLINT i = 0, NumColumns = 0;  
  
   // Use SQLTables to build a list of tables (TableNamesArray[]). Let the  
   // user select a table and store the selected table in TableName.  
  
   // Use SQLColumns to build a list of the columns in the selected table  
   // (ColumnNamesArray). Set NumColumns to the number of columns in the  
   // table. Let the user select one or more columns and flag these columns  
   // in ColumnSelectedArray[].  
  
   // Build a SELECT statement from the selected columns.  
   CommaNeeded = FALSE;  
   Statement = (SQLCHAR*)malloc(8);  
   strcpy_s((char*)Statement, 8, "SELECT ");  
  
   for (i = 0 ; i = NumColumns ; i++) {  
      if (ColumnSelectedArray[i]) {  
         if (CommaNeeded)  
            strcat_s((char*)Statement, sizeof(Statement), ",");  
         else  
            CommaNeeded = TRUE;  
         strcat_s((char*)Statement, sizeof(Statement), (char*)ColumnNamesArray[i]);  
      }  
   }  
  
   strcat_s((char*)Statement, 15, " FROM ");  
   // strcat_s((char*)Statement, 100, (char*)TableName);  
  
   // Execute the statement . It will be executed once, do not prepare it.  
   // SQLExecDirect(hstmt, Statement, SQL_NTS);  
}  

Kelas aplikasi lain yang umumnya membuat pernyataan SQL pada run time adalah lingkungan pengembangan aplikasi. Namun, pernyataan yang mereka buat dikodekan secara permanen dalam aplikasi yang mereka bangun, di mana mereka biasanya dapat dioptimalkan dan diuji.

Aplikasi yang membuat pernyataan SQL pada run time dapat memberikan fleksibilitas yang luar biasa kepada pengguna. Seperti yang dapat dilihat dari contoh sebelumnya, yang bahkan tidak mendukung operasi umum seperti klausa WHERE, klausa ORDER BY, atau join, membangun pernyataan SQL pada run time jauh lebih kompleks daripada pernyataan yang dikodekan secara langsung. Selain itu, pengujian aplikasi-aplikasi tersebut bermasalah karena aplikasi-aplikasi tersebut dapat membangun sejumlah pernyataan SQL yang sembarang.

Potensi kerugian dari pembuatan pernyataan SQL pada waktu eksekusi adalah bahwa dibutuhkan lebih banyak waktu untuk membuat pernyataan daripada menggunakan pernyataan yang dikodekan langsung. Untungnya, ini jarang menjadi perhatian. Aplikasi semacam itu cenderung intensif antarmuka pengguna, dan waktu yang dihabiskan aplikasi membangun pernyataan SQL umumnya kecil dibandingkan dengan waktu yang dihabiskan pengguna memasuki kriteria.