Record count of REF CURSOR

Hi,
Can any one kindly tell me how to get the number of records fetched into a REF CURSOR.
Thanks

I'll tell you what I'm doing, but I don't like it. After I open the query, I run a count query using the same where and join clauses. The IO cost should be low because the records were accessed in the last statement, but the CPU will still cost you. As an alternative, you could declare a varray of your rowtype and select into that using a BULK COLLECT clause then you could get the count of the varray. I have not tried that yet, but if I ever get the time I will.
The first option looks like this:
OPEN p_Cursor FOR
SELECT MyField1, MyField2
FROM MYTable
INNER JOIN MyTable2 ON ...
WHERE ...
SELECT COUNT(*) INTO p_RowCount
FROM MYTable
INNER JOIN MyTable2 ON ...
WHERE ...
If you find a better way, please post it.

Similar Messages

  • Sorting records dynamically in REF cursor, based upon a dynamic field

    Hi,
    I have a REF CURSOR built by using row type, table type and PIPELINE function. I have opened the ref cursor now. I would like to update a field called 'RANK' based upon 'RATIO' field in the REF CURSOR. i.e order the records in the ref cursor by RATIO field and then update the RANK as 1, 2, 3, 4, ....
    Aim: I want to update a field in the REF CURSOR based upon another numeric field.
    Please help me.
    OPEN sales FOR
    SELECT RANK, ratio
    FROM TABLE (fngetfundholdingsale (in_primarykey, in_flag));
    loop
    fetch sales into sale1;
    exit when sales%notfound;
    --I want to update sale1.rank based upon ratio
    end loop;
    Thanks
    Ashok

    Try to use NDS (Native Dynamic SQL):
    l_order := 'ratio';
    OPEN sales FOR
    'SELECT rank' ||
    '  FROM TABLE (fngetfundholdingsale (:in_primarykey, :in_flag))' ||
    ' ORDER BY ' || l_order
      USING in_primarykey, in_flag;Regards,
    Zlatko

  • Ref Cursor Attribute

    Hi
    I wanted to take count of ref cursors return records.
    I have added OUT parameter for procedure and i m returning records from this OUT parameter,
    so i wanted to check count of record before returning it from procedure.
    please do the needful.

    also
    there is no way way to find out how many records at all will be retrieved in a cursor BEFORE you fetch the very last row from it. Cursor_name%rowcount gives the number of rows selected so far and that count increments every time you fetch.
    You use %rowcount only with implicit cursors that do insert/update/delete.

  • How to update data returned using REF CURSOR

    Hi all,
    I am trying to update updated data in a gridview but the update button seem to do nothing as i retrieve data using REF CURSOR.
    Let me describe the architecture of my application first. I'm trying to implement best practice whenever possible. I am following the data access tutorial published in www.asp.net , the only difference is that i have an Oracle (10g) database. So I split my application into three layers, data access, business logic, and presentation layer. I'm also writing all queries in an Oracle package.
    So I have my Oracle packages that perform CRUD operations. Then I have an xsd file that define dataTable based on the package procedure. My business logic layer then calls functions defined in the xsd file. And finally a detailsView control that uses an ObjectDataSource to call business logic functions.
    In a nutshell, I am just trying to update records retrieved using REF CURSOR. Your help is very much appreciated. Please let me know if further details are required. Cheers,

    In the DataSet (xsd) where your DataTable is defined, you just need to add additional methods to the TableAdapter to handle insert, update and delete, either with SQL or by mapping to stored procedures.
    Alternatively in code, create an OracleDataAdapter and supply its InsertCommand, UpdateCommand and DeleteCommand.
    David

  • REF cursor with special characters

    Hi all,
    I want to display the record set using ref cursor. I am passing varchar field as parameter. How to give this in where cluase of select statement.
    i want to use like %parameter_name% in where condition. How to use it in ref cursor.
    Thanks in advance,
    Pal

    user546710 wrote:
    Hi all,
    I want to display the record set using ref cursor. I am passing varchar field as parameter. How to give this in where cluase of select statement.
    i want to use like %parameter_name% in where condition. How to use it in ref cursor.
    Thanks in advance,
    PalWhy using a ref cursor? Do you understand the purpose of ref cursors and how to use them?
    Perhaps take a read of the following to get to grips with the basics...
    PL/SQL 101 : Understanding Ref Cursors
    PL/SQL 101 : Understanding Ref Cursors

  • How to convert the varray to ref cursor

    Hi,
    Is there any way to convert varray to ref cursor....
    i dont want to use any table or record as an ref cursor..
    i just want to create a procedure which returns a ref cursor..
    below is the sample procedure for it..
    create or replace procedure FETCH_DATA1
    tab_name in varchar2,
    p_recordset1 OUT fetch_data_pak.ref_cursor
    AS
    type v_array1 is varray(1000) of t_transaction%rowtype;
    v_array2 v_array1;
    cursor s1 is select * from t_transaction where lastupdate_date > '08-Aug-09';
    begin
    open s1;
    fetch s1 bulk collect into v_array2 limit 100;
    close s1;
    select * from table(cast (v_array2 as p_recordset1));
    end FETCH_DATA1;
    I need to convert the varray to ref cursor.....

    Why put it into a varray at all?
    You can just open the ref cursor for that select you are desiring.
    And if you need to limit it to returning just the first 100 (as your code seems to imply), wrap it and filter on rownum.
    Something similar to this:
    create or replace procedure FETCH_DATA1
      tab_name in varchar2,
      p_recordset1 OUT fetch_data_pak.ref_cursor
    AS
    begin
      open p_recordset1 for
      select /*+ first_rows(100) */ * from (
        select * from t_transaction
        where lastupdate_date > to_date('08-08-2009','DD-MM-YYYY')
        --order by something
      where rownum <= 100;
    end FETCH_DATA1;And note, that you really should have an order by when you wish to limit yourself to "first 100 rows" - otherwise it will be "random 100 rows".
    That goes for your cursor solution as well...
    Edited by: Kim Berg Hansen on Nov 28, 2011 10:25 AM
    Added explicit date conversion - it is bad practice not to explicitly convert dates ;-)

  • URGENT!!passing variables to ref-cursor stored procedures

    I have build forms6 block base ona stored procedures with ref
    cursor.
    But....it's impossible to pass variables from block.item to
    in-out parameter of ref cursor..to make a where clause for
    example!!
    I've tried all..but nothing happens..
    Can someone help me?
    Thanks..
    null

    Manish Wadhwa (guest) wrote:
    : Gigi (guest) wrote:
    : : I have build forms6 block base ona stored procedures with ref
    : : cursor.
    : : But....it's impossible to pass variables from block.item to
    : : in-out parameter of ref cursor..to make a where clause for
    : : example!!
    : : I've tried all..but nothing happens..
    : : Can someone help me?
    : : Thanks..
    : >>
    : It is not possible to send values as parameter to the stored
    : procedure because, oracle uses the trigger query-procedure for
    : calling the stored procedure and it does not entertain any
    : changes to that trigger. This is a problem with block based on
    : stored procedure, we have also tried it with table of records
    : instead of ref cursor, but doesn't work.
    : Manish
    Thanks Manish..
    i was afraid about that..
    But ..i ask to myself(retoric question..) it's possible the
    development oracle team build a "black box" like a stored
    procedure with ref o table of records who permit to select
    million of records in few second( i selected 5 million of records
    in 2 seconds..) and cannot permit to passing variables to these
    cursor.. every end users production forms must be working in
    this way..I don't understand..
    Gigi
    null

  • Ref cursor, appending data

    Hi All, i am using C# to connect execute a oracle sp and getting the results back using a ref cursor.
    CREATE OR REPLACE
    PACKAGE BODY DellSalesTool
    AS
    PROCEDURE MainScreenData1
    (cur_messages1 OUT cursor_type)
    as
    begin
         OPEN cur_messages1 for SELECT * FROM ST_LOB;
    end;
    PROCEDURE MainScreenData
                   (cur_messages OUT cursor_type)
    AS
         scid number;
         lobid number;
         msgid number;
         CURSOR Lob_Cursor IS SELECT DISTINCT LOB_ID     FROM ST_LOB;
         CURSOR Category_Cursor IS SELECT DISTINCT SC_ID     FROM ST_CATEGORY;
         RT_CATEGORY          Category_Cursor%ROWTYPE;
         RT_LOB               Lob_Cursor%ROWTYPE;
         BEGIN
         OPEN Category_Cursor;
         LOOP
         FETCH Category_Cursor INTO RT_CATEGORY;
         EXIT WHEN Category_Cursor%NOTFOUND;
                   OPEN Lob_Cursor;
                   LOOP
                   FETCH Lob_Cursor INTO RT_LOB;
                   EXIT WHEN Lob_Cursor%NOTFOUND;
                   SELECT MAX(MSG_ID) INTO msgid FROM ST_VW_MAIN
                   WHERE msg_priority = 1 AND sc_id = RT_CATEGORY.SC_ID
                   AND lob_id = 1
                   AND msg_date = (
                                       SELECT MAX(msg_date) FROM ST_VW_MAIN
                                       WHERE msg_priority = 1
                                       AND sc_id = RT_CATEGORY.SC_ID
                                       AND lob_id = 1);
                   OPEN cur_messages FOR
                   SELECT * FROM (
                        SELECT * FROM ST_VW_MAIN
                        WHERE msg_id = msgid
                        AND sc_id = RT_CATEGORY.SC_ID
                        AND lob_id = RT_LOB.LOB_ID
                   ) b
                   UNION
                   SELECT * FROM (
                        SELECT * FROM ST_VW_MAIN
                        WHERE sc_id = RT_CATEGORY.SC_ID
                        AND LOB_ID = RT_LOB.LOB_ID
                        AND MSG_ID NOT IN (msgid)
                        ORDER BY msg_date desc
                   ) a;
              END LOOP;
              CLOSE Lob_Cursor;
         END LOOP;
         CLOSE Category_Cursor;
         END;
    END;
    Now the issue is since the ref cursor is opened multiple times in the main cursor, i get the last result back in the c#. Any way using which i can append the records in the ref cursor..

    In the first part of the UNION you have "msg_id = msgid" and the second SELECT you have "msg_id not in (msgid)"?
    Do you want it that way? Are you trying to exclude NULL msg_id values?
    SELECT *
      FROM (SELECT *
              FROM ST_VW_MAIN
             WHERE sc_id = RT_CATEGORY.SC_ID AND lob_id = RT_LOB.LOB_ID and
                   msg_id = msgid) b
    UNION
    SELECT *
      FROM (SELECT *
              FROM ST_VW_MAIN
             WHERE sc_id = RT_CATEGORY.SC_ID AND LOB_ID = RT_LOB.LOB_ID AND
                   MSG_ID NOT IN (msgid))
    ORDER BY msg_date DESC

  • Iterate thru ref cursor received from Procudure

    Hi All,
    I have a proc X that has an Out parameter as ref cursor.
    I am calling that proc in another proc Y now how do i iterate through the ref Cursor returned.(in which data type shall i fetch the record of that ref cursor)
    Regards
    Arpit

    Arpit wrote:
    I have a proc X that has an Out parameter as ref cursor.
    I am calling that proc in another proc Y now how do i iterate through the ref Cursor returned.(in which data type shall i fetch the record of that ref cursor)The "data type" (known as the SQL projection) of the ref cursor depends on the SQL statement executed. That can be totally dynamic and unknown for a ref cursor until run-time - which means there is no way for your static PL/SQL code to know what the projection is and how to fetch it.
    Which is why ref cursors are VERY SELDOM used in PL/SQL..
    Ref cursors are intended to be consumed by external Oracle client processes - not PL/SQL. A DBMS_SQL cursor is to PL/SQL what a ref cursor is to an external client.
    Consuming ref cursors in PL/SQL code is unusual - and should be treated as an exception. And this asks the question what are your reasons for writing PL/SQL code that consumes a ref cursor?

  • Ref Cursor - How to append records into ref cursor?

    Hi,
    Is it possible to append ref cursor?
    Iam having a procedure which accepts 1 string as input
    parameter. That string will have list of ID delimited by comma.
    I want to extract & match every ID with some tables.
    My problem is for first ID i would get 10 records
    and for 2nd ID i 'l get other 20 records. But while returning
    i need to send the same(10 + 20 records) as ref cursor(OUT parameter).
    But in below given code i could send only last 20 records. first
    10 records are not append/updated into ref cursor.
    How to append 2nd 20 records with 1st 10 records? so that i can
    send all the 30 records.
    Here goes my code...
    CREATE OR REPLACE PROCEDURE getCRMGroupsAndRollups_PRC
    in_groupId IN VARCHAR2,
    out_getCRMGroups OUT TYPES.DATASET
    IS
    v_temp VARCHAR2(500) := in_groupId ||',';
    v_temp_split VARCHAR2(500);
    v_pos1 NUMBER := 0;
    v_pos2 NUMBER := 1;
    v_pos3 NUMBER := 0;
    v_extract_char VARCHAR(1) := NULL;
    v_comma_cnt NUMBER := 0;
    BEGIN
    -- check in for null input parameters
    IF ( in_groupId IS NOT NULL ) THEN
    -- loop to count no of in_groupId
    FOR j IN 1..LENGTH(v_temp)
    LOOP
         v_extract_char := SUBSTR(v_temp,j,1);
         IF (v_extract_char = ',') THEN
              v_comma_cnt := v_comma_cnt + 1;
         END IF;     
    END LOOP;
    -- loop to extract in_group Id
    FOR i IN 1..v_comma_cnt
    LOOP
         v_pos1 := instr(v_temp,',',(v_pos1 + 1));
         v_pos3 := ((v_pos1-1) - v_pos2 )+ 1;
         v_temp_split := SUBSTR(v_temp,v_pos2,v_pos3);
         v_pos2 := v_pos1 + 1;
    -- query to return dataset filled BY list of all the current
    -- CRM groups and the associated rollup groups
    OPEN out_getCRMGroups FOR
    SELECT
    DISTINCT
    gcs.crm_st_id_cd,
    gcs.lgcy_roll_up_grp_num,
    gcs.lgcy_roll_up_grp_name,
    gcs.grp_xwalk_complt_dt,
    gcs.crm_grp_num,
    gcs.facets_gnat_id,
    gcs.crm_grp_name
    FROM
    grp_convsn_stat gcs
    --lgcy_xref_elem lxe
    WHERE
    ( gcs.mbrshp_convsn_aprvl_dt = NULL )
    OR ( gcs.mbrshp_convsn_aprvl_dt < (SYSDATE - 7 ) )
    AND ( gcs.facets_grp_stat_actv_ind = 'Y' )
    AND ( gcs.lgcy_roll_up_grp_num = v_temp_split );
    END LOOP;
    END IF;
    EXCEPTION
    WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE('INTERNAL ERROR');
    END getCRMGroupsAndRollups_PRC;
    in this v_temp_split will have extracted id & iam opening
    ref cursor for each & every ID extracted from list.
    2) How to handle no_data_found exception for this ref cursor?
    Please help me....
    -thiyagarajan.

    http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:110612348061
    http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:210612357425
    Message was edited by:
    Kamal Kishore

  • DB proc - do you need to create a table to pass a ref cursor record type?

    I want to pass a limited selection of columns from a large table through a DB procedure using a REF CURSOR, returning a table rowtype:
    CREATE OR REPLACE package XXVDF_XPOS_DS021_ITEMS AS
         TYPE XXVDF_XPOS_DS021_ITEM_ARRAY
         IS REF CURSOR
         return XXVDF_XPOS_DS021_ITEM_TABLE%ROWTYPE;
    Do I need to create this dummy table?
    I can't get a TYPE to work, where the type is an OBJECT with the desired columns in it.
    So a dummy empty table will sit in the database...
    Is there another way?
    thanks!

    You can use RECORD type declaration:
    SQL> declare
      2   type rec_type is record (
      3    ename emp.ename%type,
      4    sal emp.sal%type
      5   );
      6   type rc is ref cursor return rec_type;
      7   rc1 rc;
      8   rec1 rec_type;
      9  begin
    10   open rc1 for select ename, sal from emp;
    11   loop
    12    fetch rc1 into rec1;
    13    exit when rc1%notfound;
    14    dbms_output.put_line(rec1.ename || ' ' || rec1.sal);
    15   end loop;
    16   close rc1;
    17  end;
    18  /
    SMITH 800
    ALLEN 1600
    WARD 1250
    JONES 2975
    MARTIN 1250
    BLAKE 2850
    CLARK 2450
    SCOTT 3000
    KING 5000
    TURNER 1500
    ADAMS 1100
    JAMES 950
    FORD 3000
    MILLER 1300or use, for example, VIEW to declare rowtype:
    SQL> create view dummy_view as select ename, sal from emp;
    View created.
    SQL> declare
      2   type rc is ref cursor return dummy_view%rowtype;
      3   rc1 rc;
      4   rec1 dummy_view%rowtype;
      5  begin
      6   open rc1 for select ename, sal from emp;
      7   loop
      8    fetch rc1 into rec1;
      9    exit when rc1%notfound;
    10    dbms_output.put_line(rec1.ename || ' ' || rec1.sal);
    11   end loop;
    12   close rc1;
    13  end;
    14  /
    SMITH 800
    ALLEN 1600
    WARD 1250
    JONES 2975
    MARTIN 1250
    BLAKE 2850
    CLARK 2450
    SCOTT 3000
    KING 5000
    TURNER 1500
    ADAMS 1100
    JAMES 950
    FORD 3000
    MILLER 1300 Rgds.

  • How to determine the cursor record count before the "open cursor"?

    Is it possible to determine the record count of an explicit cursor without running a count()? Say, my cursor definition is something like this,
    CURSOR cur_vehicle
    IS
    SELECT os.order_id, os.order_item, vs.part_id
    vs.part_num,
    vs.iso_num,
    vs.model_yr
    vs.dealer_cde,
    vs.cust_cde,
    px.plant_cd
    FROM parts_source vs,
    orders_source os,
    plant_tbl_crossref px
    wHERE os.order_id = vs.order_id
    AND vs.part_id = os.part_id
    AND vs.plant_cde = px.plant_cde
    ORDER BY os.order_id;
    I want to log the count of records returned by the above cursor prior to the first fetch, without running a count(1) for the query in cursor select.
    I know adding " Count(1) over(order by null) " in the cursor SELECT will bring it. But that does not help me log the record count to some log file or table before opening the cursor for processing.
    To conclude, my objective is to update the record count of cursor in some table before processing

    sarvan wrote:
    Is it possible to determine the record count of an explicit cursor without running a count()?
    ..snipped..No. The only way to do it correctly is inside that select.
    Each select is a consistent read. Which means that if this is done as 2 select statements, the 1st select can see a different version of the data than the 2nd select statement. does. So if you want a count and that to be consistent and on the same version of the data than the select, it has to be done as part of the select.
    Also consider what a cursor is. It is not a result set of sorts that is created in memory upfront - with a convenient interface that tells you the size/number of rows of that result set.
    A cursor is basically a program that reads database data as input and produce output. A fetch from a cursor is an instruction for this program to execute and output data.
    There's no data set that is created by the cursor from which the count can be determined. The cursor program does have state variables - like +%RowCount+ that specifies how many rows the cursor has thus far output. And you need to run that cursor to the end (no more output) in order to determine the total number of rows output by the cursor.

  • How to count no of rows affected by a ref cursor ?

    Hi,
    I have taken a ref cursor inside the function since I want to return resultset to the calling application. I also need the NO. OF ROWS AFFECTED by the ref cursor. When I used refcur%rowcount, it returned me 0. Whereas actual no. of rows inside the table is 11.
    As a workaround I created a integer variable v_rcount and again executed the cursor's query using count() to store the no. of rows affected by the cursor query. See definition 1 and 2 :
    How can I get no. of rows affected by the ref cursor without taking additional variable ??? Any other means available ???
    DEFINITION ONE:
    create or replace function f_ref()
    RETURN curpkg.ref_cursor as
    stock_cursor curpkg.ref_cursor;
    v_rcount INTEGER;
    BEGIN
    OPEN stock_cursor FOR SELECT * FROM FIRSTTABLE;
    select count(*) into v_rcount from firsttable;
    dbms_output.put_line('['|| v_rcount||']');
    RETURN stock_cursor;
    END;
    OUTPUT:
    [11]
    DEFINITION TWO:
    create or replace function f_ref()
    RETURN curpkg.ref_cursor as
    stock_cursor curpkg.ref_cursor;
    v_rcount INTEGER;
    BEGIN
    OPEN stock_cursor FOR SELECT * FROM FIRSTTABLE;
    v_rcount := stock_cursor%rowcount;
    dbms_output.put_line('['|| v_rcount||']');
    RETURN stock_cursor;
    END;
    OUTPUT:
    [0]

    michaels>  DECLARE
       emp_row   emp%ROWTYPE;
       cur       sys_refcursor;
       FUNCTION f_ref
          RETURN sys_refcursor
       AS
          stock_cursor   sys_refcursor;
       BEGIN
          OPEN stock_cursor FOR
             SELECT *
               FROM emp;
          RETURN stock_cursor;
       END f_ref;
    BEGIN
       cur := f_ref;
       LOOP
          FETCH cur
           INTO emp_row;
          EXIT WHEN cur%NOTFOUND;
       END LOOP;
       DBMS_OUTPUT.put_line ('Fetched rows: ' || cur%ROWCOUNT);
       CLOSE cur;
    END;
    Fetched rows: 14

  • Create record variable that refers dynamic query assigned to a ref cursor?

    Hi ,
    Just explaining what I am trying to achieve:
    1) i have a hr.departments table that was loaded in hr schema on 1st oct 2012 with 4 columns(department_id, department_name, manager_id, location_id)
    2) now I have a new schema by my name 'rahul' and I have loaded departments table but now an additional column has come into picture,ie created_date, this table got loaded on 1st-Nov-2012
    3) Now going forward my columns could be dropped from the departments table (it can be a case), for example might be my departments table in my schema 'rahul' one day could comprise of only 3 columns(department_id,department_name,manager_id)
    4) Now in the next step, I have managed to extract common column names(in a single line where columns are delimited using a comma) from both the tables(hr.departments and rahul.departments) which are (department_id, department_name, manager_id, location_id) using all_tab_cols table and I have written a function for it which i will be pasting below.
    5) now going forward, using the above column names line with column names delimited using comma, I have used a ref cursor and assigned a query to it using the line of columns that I have extracted from the above point
    6) Now I want to create a record variable which refers to my ref cursor, something like we do when we create a record variable by reffering to an explicit cursor defination that we give in the declaration block.
    PS:
    1) I have been out of touch with plsql for a long time so I have lost a lot of mmeory regarding plsql.
    2) basically I need to compare data in hr.departments table with rahul.departments table for only columns that are common to both the tables, rest new or discarded columns information will go in one of the log tables that I have created(this is done already)
    Please help me, I did try searching on google for the same but it really confused me very badly, any kind of help is appreciated, please find my code below:
    Regards
    Rahul
    Code :
    ===================================================================================================
    create or replace procedure p_compare_data(fp_old_table_name in varchar2, fp_new_table_name in varchar2)
    is
    type ref_cursor_old_table is ref cursor;
    v_ref_cursor_old_table ref_cursor_old_table;
    --record_v_ref_cursor_old_table v_ref_cursor_old_table;
    --record_ref_cursor_old_table v_ref_cursor_old_table%ROWTYPE;
    Lv_all_column_names varchar2(2000);
    function f_fetch_common_column_names(fp_old_table_name in varchar2, fp_new_table_name in varchar2)
    return varchar2
    is
              Lv_all_column_names varchar2(2000);
    begin
              execute immediate 'select ltrim(all_column_names,'','') all_column_names_in_line from (select * from (select sys_connect_by_path(hr_e_column_name,'','') all_column_names from (select hr_e_column_name, rownum curr, rownum - 1 prev from (select hr_e.* , rahul_e.* , case when (hr_e_column_name = rahul_e_column_name) then 1 when (rahul_e_column_name is NULL) then 2 when (hr_e_column_name is NULL) then 3 end decision from (select column_name hr_e_column_name from all_tab_cols where owner ='''||substr(fp_old_table_name,1,instr(fp_old_table_name,'.',1,1)-1)||''' and table_name = '''||substr(fp_old_table_name,instr(fp_old_table_name,'.',1,1)+1)||''') hr_e full outer join (select column_name rahul_e_column_name from all_tab_cols where owner = '''||substr(fp_new_table_name,1,instr(fp_new_table_name,'.',1,1)-1)||''' and table_name = '''||substr(fp_new_table_name,instr(fp_new_table_name,'.',1,1)+1)||''') rahul_e on hr_e.hr_e_column_name = rahul_e.rahul_e_column_name) decision_table where decision = 1) a start with a.curr = 1 connect by prior curr = prev) b order by length(b.all_column_names) desc) all_column_names_in_line where rownum = 1' into Lv_all_column_names;
              return (Lv_all_column_names);
    end;
    begin
         Lv_all_column_names := f_fetch_common_column_names(fp_old_table_name, fp_new_table_name);
         --dbms_output.put_line(Lv_all_column_names);
         open v_ref_cursor_old_table for ('select '||Lv_all_column_names||' from '||fp_old_table_name);
    end;
    =====================================================================================================

    >
    6) Now I want to create a record variable which refers to my ref cursor, something like we do when we create a record variable by reffering to an explicit cursor defination that we give in the declaration block.
    >
    This thread is basically nothing more than a continuation of your original thread except now you are finally explaining what you are really trying to do.
    Re: passing table name to a procedure and then need to open a cursor ..
    In that original thread you said you found the solution
    >
    Well Mate thanks for your suggestion but I got it working through ref cusror, thanks for your time.
    >
    So I ask you to post your 'solution' and when you finally did it was clear that you hadn't solved anything at all. Your solution used a ref cursor all right but the code relied on a record ('record_employees') that was based on a table name ('employees') that was declared within the procedure. There isn't much point in passing in a table name if you have to hard-code the table name in the procedure.
    create or replace procedure p_ref_cursor(fp_old_table in varchar2)
    is
    type ref_cursor is REF CURSOR;
    v_ref_cursor ref_cursor;
    record_employees hr.employees%ROWTYPE;
    begin
    open v_ref_cursor for 'select * from '||fp_old_table;
    loop
    fetch v_ref_cursor into record_employees;
    exit when v_ref_cursor%NOTFOUND;
    dbms_output.put_line(record_employees.employee_id);
    end loop;
    end;Then sb92075 ask you the question that illustrates what I just said
    >
    what happens when you pass in "HR.DEPARTMENTS" ; besides throwing errors?
    >
    And you blew him off with this
    >
    Mate, departments never came in my context, in my prior message I explained what I was trying to achieve ... so I dont know what problem you are understanding reading my posts.
    >
    And now here you are asking how to get this to work for the departments table.
    It is very difficult to help someone that won't tell us what it is they are really trying to do so we can try to suggest some better ways of doing it. Hopefully, in the future, you wil start by explaining your problems instead of focusing on the solution you think you should use.
    Back to the issue -
    The first thing you should do is finish defining the requirements. Assuming the above actually works to identify columns that have different data what are you going to do with that information?
    1. Do you need to save that different data from TABLE1 somewhere?
    2. If you don't save it how will anyone look at it to decide which table has the correct data?
    3. If you do save it how will you save it 'generically' since other tables will have different columns and datatypes?
    4. What about the data from the same record in TABLE2; do you need to save that data somewhere?
    5. Will these two tables have primary keys? Are they on the same columns in each table? If not what if TABLE1 has one record but there are TWO records in TABLE2 that are identical. Is that a match? Or is that a problem because TABLE2 has an extra record even though the record is identical?
    In short detecting the differences is just one small part of the entire problem. You also need to save those differences somewhere so someone can examine the data and decide what action to take. That is the more difficult part of trying to implement a 'generic' solution.
    But now that we know what you are really trying to do take a read through this thread from 6 years ago. It has three different ways to pass a query to a procedure and get different output. You may want to save a copy of the thread since it has some very advanced techniques in it.
    How to pipeline a function with a dynamic number of columns?
    See ascheffer's reply Posted: May 9, 2006 4:53 AM for using data cartridge functionality with a pipelined function.
    See Kamal's reply Posted: May 10, 2006 4:49 AM - it shows how to get XML output.
    See BluShadow's reply Posted: Mar 27, 2009 1:50 AM - for using dynamic sql

  • Weak REF CURSOR: discarding records?

    Hi,
    I'd like to discard the first N records from a weak REF CURSOR without having to specify the structure of the cursor. Is this possible?
    For example:
    LOOP
    FETCH results INTO garbagecan
    EXIT WHEN results%NOTFOUND;
    END LOOP;
    It seems that FETCH statement requires INTO to be specified with the correct structure.
    -Jerome
    null

    it is not possible to fetch into some variable, which doesn't match the structure of the cursor variable.....
    There is one way.....you can discard the first n records while assigning the query to cursor variable....
    Frame ur query that ur going to assocaite to the cursor in the following way....
    select * from (select rownum a, test.* from test) where a > N
    where 'N' is the no of records that u don't want to be in the cursor.....
    if u have doubt in this approach get back to me...

Maybe you are looking for

  • Fixing Text and Image questions

    Is there a way to make the back ground translucent so that you can vagly see the background image. Like some way to change the opacity in a container? How come when I create a div tage and insert a picture in there. I hit enter right after the pictur

  • Style Sheet Problem with Websphere

    Hello. If anyone here has any experience with Websphere or iSeries, I would appreciate some help. I posted this topic in the Websphere forum , but it seems that forum isn't very active. Anyway, I can't get my style sheet to work with a java servlet a

  • Bridge update freezes at 12% and fails to complete the update process why?

    The new update release for Bridge fail to complete it stops at 12% and will not finish. Does anyone know why the update will not install?

  • FB70 Printing Multi A/R Invoices

    My understanding of issuing A/R invoices is as follows: 1. FB70 u2013 enter customer invoice 2. FB12 u2013 request correspondence 3. F.64 u2013 print correspondence The problem for that is if, for example, 20 invoices are entered in FB70, then we hav

  • Creating a centering background image

    I would like to have a background like this page. http://www.atlantafalcons.com/MediaLounge/VideoLanding.aspx?q=Falcons+First+Take As you can see it centers itself.  I checked out the code and did not see anything about centering.  Here it is. </head