First of all, thank you! This solution works, but two enhancements, as follows, would make it better:
1. This solution requires a procedure with an output cursor, as follows: Procedure GET_WIDGETS(WIDGETS Out SYS_REFCURSOR); Can iBATIS work with a function instead, as follows: Function GET_WIDGETS Return SYS_REFCURSOR; 2. This solution requires specifying a parameterObject argument, as follows: var cursor = new Hashtable(); cursor.Add("Cursor", null); ISqlMapper.QueryForList<Widget>("GetWidgets", cursor); This code seems to add "noise" to the otherwise elegant approach taken by iBATIS. Can it be avoided? (After spending countless hours grokking, experimenting and getting frustrated with iBATIS, my confidence in this software has been restored. Thank you again.)