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
AshokTry 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 -
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,
Paluser546710 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..
nullManish 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
ArpitArpit 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 processingsarvan 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
nullit 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