FETCH arbitrary columns from a ref_cursor

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Agoston Bejo

    FETCH arbitrary columns from a ref_cursor

    The problem is as follows:
    I have a stored proc. that returns a types.ref_curso r (where
    types.ref_curso r is defined as 'ref cursor'):
    PROCEDURE P(c OUT TYPES.ref_curso r);
    The returned cursor has a bunch of columns, but I only need a few of them.
    Anyway, with FETCH INTO I have to provide variables for every column. So I
    have to do this:
    var1 Type1;
    var2 Type2;
    ...
    FETCH c INTO var1, var2, ..., var20, ... var_n;
    Where Type1, etc. ... are as specified in the documentation of P. (Since I
    couldn't find a way to determine the record type of an arbitrary
    ref_cursor.)
    Is there a way to make this type of situation easier?
    Some solutions came into my mind, such as:

    1. I could declare a variable with the type c%ROWTYPE or something.
    2. I could FETCH only the columns that I need, e.g.
    FETCH c(col1, col5, col7) INTO var1, var5, var7;
    3. I could somehow find a way for the procedure to return something other
    than a ref_cursor which seems a nightmare to work with.

    Unfortunately, I have found nothing like this either on the net or in the
    Oracle documentation.

    Any ideas?

    Thx


  • Daniel Morgan

    #2
    Re: FETCH arbitrary columns from a ref_cursor

    Agoston Bejo wrote:
    The problem is as follows:
    I have a stored proc. that returns a types.ref_curso r (where
    types.ref_curso r is defined as 'ref cursor'):
    PROCEDURE P(c OUT TYPES.ref_curso r);
    The returned cursor has a bunch of columns, but I only need a few of them.
    Anyway, with FETCH INTO I have to provide variables for every column. So I
    have to do this:
    var1 Type1;
    var2 Type2;
    ...
    FETCH c INTO var1, var2, ..., var20, ... var_n;
    Where Type1, etc. ... are as specified in the documentation of P. (Since I
    couldn't find a way to determine the record type of an arbitrary
    ref_cursor.)
    Is there a way to make this type of situation easier?
    Some solutions came into my mind, such as:
    >
    1. I could declare a variable with the type c%ROWTYPE or something.
    2. I could FETCH only the columns that I need, e.g.
    FETCH c(col1, col5, col7) INTO var1, var5, var7;
    3. I could somehow find a way for the procedure to return something other
    than a ref_cursor which seems a nightmare to work with.
    >
    Unfortunately, I have found nothing like this either on the net or in the
    Oracle documentation.
    >
    Any ideas?
    >
    Thx
    The code has more problems than you may think:

    select keyword
    from v$reserved_word s
    where keyword like 'TY%';

    Assuming Oralce 9i ... you don't say ... redefine as:

    PROCDURE P (c OUT SYSREFCURSOR)

    The solution to your problem can be found at:


    --
    Daniel A. Morgan
    University of Washington
    damorgan@x.wash ington.edu
    (replace 'x' with 'u' to respond)

    Comment

    Working...