Aracılığıyla paylaş


Bir İfadeyi Yürütme

Veritabanı altyapısı tarafından ne zaman derlenmiş (hazırlanmış) olduklarına ve bunları kimlerin tanımladıklarına bağlı olarak bir deyimi yürütmenin dört yolu vardır:

  • Doğrudan Yürütme Uygulama SQL deyimini tanımlar. Çalışma zamanında tek bir adımda hazırlanır ve yürütülür.

  • Hazırlanmış Yürütme Uygulama SQL deyimini tanımlar. Çalışma zamanında ayrı adımlarda hazırlanır ve yürütülür. İfade bir kez çalıştırılmak üzere hazırlanabilir ve birden çok kez yürütülebilir.

  • Yordam Uygulama geliştirme zamanında bir veya daha fazla SQL deyimi tanımlayıp derleyebilir ve bu deyimleri bir yordam olarak veri kaynağında depolayabilir. Prosedür, çalışma zamanında bir veya daha fazla kez yürütülür. Uygulama, katalog işlevlerini kullanarak kullanılabilir saklı yordamları numaralandırabilir.

  • Katalog İşlevleri Sürücü yazıcısı, önceden tanımlanmış bir sonuç kümesi döndüren bir işlev oluşturur. Genellikle, bu işlev önceden tanımlanmış bir SQL deyimi gönderir veya bu amaç için oluşturulmuş bir yordamı çağırır. İşlev, çalışma zamanında bir veya daha fazla kez yürütülür.

Belirli bir deyim (ifade tanıtıcısı ile tanımlandığında) herhangi bir sayıda yürütülebilir. deyimi çeşitli farklı SQL deyimleriyle yürütülebilir veya aynı SQL deyimiyle tekrar tekrar yürütülebilir. Örneğin, aşağıdaki kod Sales veritabanındaki tabloları almak ve görüntülemek için aynı deyim tutamacını (hstmt1) kullanır. Ardından bu tutamacı yeniden kullanarak kullanıcı tarafından seçilen tablodaki sütunları alır.

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.  

Aşağıdaki kod, bir tablodaki satırları silmek için aynı ifadeyi tekrar tekrar çalıştırmak amacıyla tek bir tanıtıcının nasıl kullanıldığını gösterir.

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);  
}  

Birçok sürücü için deyimleri ayırma pahalı bir görevdir, bu nedenle aynı deyimi bu şekilde yeniden kullanmanız genellikle mevcut deyimleri boşaltmaktan ve yenilerini ayırmaktan daha verimlidir. Bir deyimde sonuç kümeleri oluşturan uygulamalar, deyimi yeniden yürütmeden önce imleci sonuç kümesinin üzerinde kapatmaya dikkat etmelidir; daha fazla bilgi için bkz. İmleci Kapatma.

Deyimleri yeniden kullanmak, uygulamayı aynı anda etkin olabilecek deyim sayısının bazı etmenlerinde sınırlamalardan kaçınmaya da zorlar. "Etkin" teriminin tam tanımı sürücüye özeldir, ancak genellikle hazırlanmış veya yürütülmüş ve hâlâ sonuçları mevcut olan herhangi bir ifadeyi belirtir. Örneğin, INSERT deyimi hazırlandıktan sonra genellikle etkin olduğu kabul edilir; SELECT deyimi yürütüldükten ve imleç hala açık olduğunda, genellikle etkin olduğu kabul edilir; CREATE TABLE deyimi yürütüldükten sonra, genellikle etkin olduğu kabul edilmez.

Bir uygulama, SQLGetInfo'ya SQL_MAX_CONCURRENT_ACTIVITIES seçeneğiyle çağrı yaparak tek bir bağlantıda aynı anda kaç deyimin etkin olabileceğini belirler. Bir uygulama, veri kaynağına birden çok bağlantı açarak bu sınırdan daha etkin deyimler kullanabilir; ancak bağlantılar pahalı olabileceğinden performans üzerindeki etki göz önünde bulundurulmalıdır.

Uygulamalar, SQL_ATTR_QUERY_TIMEOUT deyimi özniteliğiyle bir deyimin yürütülmesi için ayrılan süreyi sınırlayabilir. Veri kaynağı sonuç kümesini döndürmeden önce zaman aşımı süresi dolarsa, SQL deyimini yürüten işlev SQLSTATE HYT00 döndürür (Zaman aşımı süresi doldu). Varsayılan olarak zaman aşımı yoktur.

Bu bölüm aşağıdaki konuları içerir.