What's the error? I see not much of a problem with ur code except that you miss a create / create or replace command in the begining of the code. If you post the error then it would be much helpful in debugging ur problem.
Also, ref cursor don't have any special meaning in 9i, they hold the same functionality as they did in 8i for that matter. Basically you need to see that incase you need a ref cursor or not at the first place while writing a query.
Suppose for example : You have a consignee cursor in a function/procedure that you want to pass to another function/procedure then instead of coding the cursor in the called fun/proc you can send it as a parameter by the help of ref cursor.