對於 HR 架構的預設安裝,控制台輸出顯示了員工 101 的兩個記錄中每個記錄的欄位(用分號分隔):
101;9/21/1989 12:00:00 AM;10/27/1993 12:00:00 AM;AC_ACCOUNT;110;
101;10/28/1993 12:00:00 AM;3/15/1997 12:00:00 AM;AC_MGR;110;
上述代碼顯示,包中的過程是使用包名稱 (ELECT_JOB_HISTORY) 和過程的名稱(在此情況下為 GetJobHistoryByEmployeeId)指定的,二者之間用句點分隔。
代碼還說明了如何定義結果集的 REF CURSOR 參數。請注意,資料類型為 OracleType.Cursor,方向為 ParameterDirection.Output。
還請注意,在訪問 REF CURSOR 中的結果集的整個過程中,串連都保持開啟狀態。
如果包返回多個遊標,則 DataReader 會按照您向參數集合中添加它們的順序來訪問這些遊標,而不是按照它們在過程中出現的順序來訪問。可使用 DataReader 的 NextResult() 方法前進到下一個遊標。
返回單個值的預存程序
OracleCommand 類的 ExecuteOracleScalar() 方法用於執行將單個值作為 OracleType 資料類型返回的 SQL 陳述式或預存程序。如果命令返回一個結果集,則該方法會返回第一行第一列的值。如果返回了 REF CURSOR,而不是返回了 REF CURSOR 所指向的第一行第一列的值,則該方法會返回一個Null 參考。OracleCommand 類的 ExecuteScalar() 方法類似於 ExecuteOracleScalar() 方法,只不過它將值作為 .NET 架構資料類型返回。
儘管如此,在使用 Oracle 預存程序時,這兩個方法都沒有用。Oracle 預存程序不能將值作為 RETURN 語句的一部分返回,而只能將其作為 OUT 參數返回。有關資訊,請參閱不返回資料的預存程序一節。同時,除了通過 REF CURSOR 輸出參數以外,您不能返回結果集。下一節將對此進行討論。