程序呼叫
程序是一種儲存在資料來源中的可執行物件。 通常,它是先行編譯的一或多個 SQL 陳述式。 用來呼叫程序的逸出序列為
{[?=]call procedure-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。
如需程序的詳細資訊,請參閱程序。