Yes and yes. A scalar value returned by a procedure will always be wrapped in an array of volt tables. You can also create an array of volt tables and return that...
Hmmm... Section 18.104.22.168 describes how to get VoltTable as return value of run() but I couldn't find any mention of passing or returning VoltTable as parameters to run().
Just to confirm, let me give an example of what I am thinking about.
Lets say, given a personId as input, we need to get three outputs: 1) count of his friends 2) list of friends and 3) all past addresses. To do so we write a SP where the count is returned through the return value of run(). The rest through the parameter list:
public long run(long personId, VoltTable friendsList, VoltTable pastAddresses)
Is this a valid run() signature?
If yes, I will then have a follow-up question.
PS: why is message subject field not auto-populated everytime I reply to the same thread?