Share via


程序呼叫

程序是一種儲存在資料來源中的可執行物件。 通常,它是先行編譯的一或多個 SQL 陳述式。 用來呼叫程序的逸出序列為

{[?=]callprocedure-name[([parameter][,[parameter]]...)]}

其中的 procedure_name 會指定程序的名稱,而 parameter 則指定程序參數。

如需程序呼叫逸出序列的詳細資訊,請參閱「附錄 C:SQL 文法」中的程序呼叫逸出序列

程序可以有零或多個參數。 它也可以傳回值,如語法開頭的選用參數標記 ?= 所指示。 如果 parameter 是輸入或輸入/輸出參數,則可以是常值或參數標記。 不過,互通的應用程式應一律使用參數標記,因為某些資料來源不接受常值參數值。 如果 parameter 是輸出參數,則必須為參數標記。 參數標記必須先與 SQLBindParameter 繫結,才能執行程序呼叫陳述式。

輸入和輸入/輸出參數可以從程序呼叫省略。 如果呼叫包含括號但沒有任何參數的程序,如 {call procedure-name()},驅動程式會引導資料來源使用第一個參數的預設值。 如果程序沒有任何參數,這可能會造成該程序失敗。 如果呼叫沒有括號的程序,如 {call procedure-name},驅動程式不會傳送任何參數值。

在程序呼叫中可以針對輸入和輸入/輸出參數指定常值。 例如,假設程序 InsertOrder 有五個輸入參數。 以下對 InsertOrder 的呼叫會省略第一個參數、提供第二個參數的常值,然後將參數標記用於第三、第四和第五個參數:

{call InsertOrder(, 10, ?, ?, ?)}   // Not interoperable!  

請注意,如果省略了某個參數,將它與其他參數分隔的逗號仍然必須出現。 如果省略了輸入或輸入/輸出參數,程序就會使用參數的預設值。 指定輸入或輸入/輸出參數預設值的另一個方法,是將繫結至參數之長度/指標緩衝區的值設定成 SQL_DEFAULT_PARAM。

如果省略了輸入/輸出參數,或者如果有提供參數的常值,驅動程式就會捨棄輸出值。 同樣地,如果省略了程序傳回值的參數標記,驅動程式就會捨棄傳回值。 最後,如果應用程式指定的程序傳回值參數不會傳回值,驅動程式會將繫結至參數之長度/指標緩衝區的值設定為 SQL_NULL_DATA。

假設 PARTS_IN_ORDERS 程序可建立結果集,且該結果集涵蓋內含特定組件號碼的訂單清單。 下列程式碼會針對組件號碼 544 呼叫此程序:

SQLUINTEGER   PartID;  
SQLINTEGER    PartIDInd = 0;  
  
// Bind the parameter.  
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0,  
                  &PartID, 0, PartIDInd);  
  
// Place the department number in PartID.  
PartID = 544;  
  
// Execute the statement.  
SQLExecDirect(hstmt, "{call PARTS_IN_ORDERS(?)}", SQL_NTS);  

若要判斷資料來源是否支援程序,應用程式會使用 SQL_PROCEDURES 選項呼叫 SQLGetInfo

如需程序的詳細資訊,請參閱程序