共用方式為


程序的使用時機

使用程序有許多優點,這全是因為使用程序可將 SQL 陳述式從應用程式移至資料來源。 應用程式中剩餘的內容是可互通的程序呼叫。 這些優點包括:

  • 性能程序通常是執行 SQL 陳述式的最快方式。 與備妥的執行相似,陳述式會在兩個不同的步驟中編譯和執行。 與備妥的執行不同,程序只會在執行階段執行。 它們會在不同的時間編譯。

  • 商務規則商務規則是公司經商的相關規則。 例如,只有職稱為「銷售人員」的人可以新增銷售訂單。 將這些規則放在程序中,可讓個別公司在不修改應用程式程式碼的情況下,重寫應用程式所呼叫的程序,以便自訂垂直應用程式。 例如,訂單輸入應用程式可能會呼叫具有固定數目參數的 InsertOrder 程序;實作 InsertOrder 的具體方式可能因公司而異。

  • 可取代性程序可以在不重新編譯應用程式的情況下加以取代,這點與將商務規則放在程序中息息相關。 如果公司購買並安裝應用程式後須變更商務規則,該公司可以變更包含該規則的程序。 對應用程式來說,一切並未改變;它仍會呼叫特定程序來完成特定工作。

  • DBMS 特定 SQL 程序這種方式可讓應用程式利用 DBMS 特定 SQL,但仍維持互通。 例如,在支援 SQL 流程控制陳述式之 DBMS 上的程序可能會捕捉並從錯誤中復原,而不支援流程控制陳述式之 DBMS 上的程序可能只會傳回錯誤。

  • 程序留存交易在某些資料來源上,認可或復原交易時,系統會刪除連線上所有備妥陳述式的存取方案。 將 SQL 陳述式放在永久儲存於資料來源中的程序,即可讓陳述式留存交易。 程序是否在備妥、部分備妥或未準備的狀態下留存,取決於特定的 DBMS。

  • 區分開發程序可以與應用程式的其餘部分分開開發。 在大型企業中,或許能透過此方法進一步利用具高度專業性程式設計人員的技能。 換句話說,應用程式程式設計人員可以撰寫使用者介面程式碼,而資料庫程式設計人員則可以撰寫程序。

垂直和自訂應用程式一般都會使用程序。 這些應用程式通常會執行固定的工作,也可以在其中硬式編碼程序呼叫。 例如,訂單輸入應用程式可能會呼叫 InsertOrderDeleteOrderUpdateOrderGetOrders 程序。

從泛型應用程式呼叫程序不太合理。 撰寫程序通常是為了在特定應用程式中執行工作,因此對泛型應用程式來說沒什麼用。 例如,試算表若呼叫剛才提及的 InsertOrder 程序並不合理。 此外,泛型應用程式不應為了加速陳述式執行,而在執行階段建構程序;這不僅可能比備妥或直接執行還慢,也須使用 DBMS 特定的 SQL 陳述式。

應用程式開發環境是個例外,此法通常能讓程式設計人員建置可執行程序的 SQL 陳述式,也能讓程式設計人員測試程序。 這類環境會呼叫 SQLProcedures 來列出可用的程序,並呼叫 SQLProcedureColumns 來列出輸入、輸入/輸出和輸出參數、程序傳回值,以及程序所建立之任何結果集的資料行。 不過,您必須在每個資料來源上事先開發這類程序;此操作須使用 DBMS 特定的 SQL 陳述式。

使用程序有三個主要缺點。 首先,必須針對應用程式執行的每個 DBMS 撰寫和編譯程序。 雖然這對自訂應用程式來說不成問題,但對於旨在執行數個 DBMS 的垂直應用程式,這可能會大幅增加開發和維護時間。

第二個缺點是許多 DBMS 不支援程序。 同樣地,旨在執行數個 DBMS 的垂直應用程式比較可能出現這個問題。 若要判斷程序是否支援,應用程式會使用 SQL_PROCEDURES 選項呼叫 SQLGetInfo

第三個缺點特別適用於應用程式開發環境,那就是 ODBC 不會定義建立程序的標準文法。 也就是說,雖然應用程式可以互通呼叫程序,但無法互通建立程序。