return ref cursor
I want to return ref cursor based on explicit cursorscreate or replace procedure get_extract (in_val in varchar2, return_cursor to sys_refcursor)
is
cursor c1 is select * from jumbo.
cursor c2 is select * from mumbo.
rec_j jumbo % rowtype;
rec_m mumbo % rowtype;
Start
If in_val = am' then
Open c1;
loop
Fetch c1 in rec_m;
When exit c1% notfound;
end loop;
Open return_cursor SELECT * from rec_m;
Close c1;
elsif in_val = 'J' then
Open c2;
loop
extract the c2 in rec_j;
When the exit c2% notfound;
end loop;
Open return_cursor SELECT * from rec_j;
Close c2;
on the other
Open return_cursor select double null.
end if;
end;
/
When I compile the procedure above, I get the error
LINE/COL ERROR
-------- ---------------------------------------------------
20/24 PL/SQL: statement ignored
20/38 PL/SQL: ORA-00942: table or view does not exist
32/24 PL/SQL: statement ignored
32/38 PL/SQL: ORA-00942: table or view does not exist
so its occurring in the open return_cursor for... statement, what is the problem with above?
user650888 wrote:
I wrote the above and it worked but instead of having a select into the body of the procedure, I love it in an explicit cursor
You can't do that. The sliders don't work that way. On the closest you could get would be something like:
SQL> select * from t;
ID DESCR
---------- ----------
1 T One
2 T Two
SQL> select * from t1;
ID DESCR
---------- ----------
1 T1 One
2 T1 Two
SQL> create or replace procedure get_extract(in_val in varchar2,
2 return_cursor out sys_refcursor) is
3 l_cur_m varchar2(100) := 'select * from t';
4 l_cur_j varchar2(100) := 'select * from t1';
5 begin
6 if in_val = 'M' then
7 open return_cursor for l_cur_m;
8 elsif in_val = 'J' then
9 open return_cursor for l_cur_j;
10 else
11 open return_cursor for select null from dual;
12 end if;
13 end;
14 /
Procedure created.
SQL> var cur refcursor;
SQL> exec get_extract('M', :cur);
PL/SQL procedure successfully completed.
SQL> print cur
ID DESCR
---------- ----------
1 T One
2 T Two
SQL> exec get_extract('J', :cur);
PL/SQL procedure successfully completed.
SQL> print cur
ID DESCR
---------- ----------
1 T1 One
2 T1 Two
John
Tags: Database
Similar Questions
-
REP-0737: must be a function of return type 'ref cursor.
Hi all
I have create a ref cursor query in reports 10 g. But it is giving error REP-0737: must be a function of return type 'ref cursor.
Here is my code
function QR_1RefCurDS return sys_refcursor is My_Cur Sys_Refcursor; begin Open My_Cur for select * from scott.emp order by deptno; return My_Cur end;
fate of the screen.
Oracle Forms/Reports has a complete PL/SQL engine and (only) the SQL parser.
However, the engine of forms/States PL / SQL and SQL Analyzer are at a level that was in the Oracle 8.0 database.
So, in the forms/States functions/procedures and forms/States triggers, you can not use SQL commands that did not exist in the 8.0 database.
The predefined SYS_REFCURSOR type is introduced in Oracle 9i.
Use this:
PACKAGE test_rc IS
TYPE of rc_type IS REF CURSOR RETURN emp % ROWTYPE;
END;
FUNCTION RETURN QR_1RefCurDS Test_rc.rc_type IS
test_rc.rc_type RC;
BEGIN
OPEN the RC to SELECT * FROM emp;
RETURN rc;
END;
Kind regards
Zlatko
-
REF CURSOR as a return of a function in SQL developer
Hi team,
I have a function which returns a Ref from a function slider while getting an entry number. But once I have create an implementation of single test on it with a valid entry that he throws error like below and have failed. My SQL developer version is 4.0.2.15.21 and it turns on a Linux OS (GNU/Linux 3.10.0 - 123.6.3.el7.x86_64). Here is the error I get.
Cannot be converted to NUMBER <oracle.jdbc.driver.OracleResultSetImpl@5925237>.
oracle.dbtools.raptor.datatypes.oracle.sql.NUMBER.customUnscaledInternalValue(NUMBER.java:93)
oracle.dbtools.raptor.datatypes.oracle.sql.NumericDatum.customInternalValue(NumericDatum.java:37)
oracle.dbtools.raptor.datatypes.impl.DataTypeImpl.customInternalValueFilter(DataTypeImpl.java:411)
oracle.dbtools.raptor.datatypes.impl.DataTypeImpl.getInternalValue(DataTypeImpl.java:399)
oracle.dbtools.raptor.datatypes.impl.DataValueImpl. < init > (DataValueImpl.java:55)
oracle.dbtools.raptor.datatypes.impl.DataTypeImpl.customDataValue(DataTypeImpl.java:196)
oracle.dbtools.raptor.datatypes.impl.DataTypeImpl.getDataValue(DataTypeImpl.java:178)
Oracle.DBTools.unit_test. Runner.UtRunnerImplIterator$ UtRunnerImplObject.getDynamicValueByName (UtRunnerImplIterator.Java:324)
Oracle.DBTools.unit_test. Runner.UtRunnerImplIterator$ UtRunnerImplObject.mapDynamicValueByName (UtRunnerImplIterator.Java:301)
Oracle.DBTools.unit_test. Runner.UtRunnerImplIterator$ UT...
Please help me out here.
Please do not post double fillet.
Mark this thread ANSWER and continue to use your other thread.
-
PL/SQL - Call Out Ref Cursor returned by a stored procedure
Hello
I am creating a procedure where a Ref Cursor is defined as an OUT parameter, my question is how to shout that the Ref Cursor when I run for example here is how I want to call my EXEC sql command:
EXEC film_not_in_stock (2,2,vcur);
Here is the procedure:
CREATE OR REPLACE PROCEDURE film_not_in_stock (p_film_id in NUMBER, p_store_id number, vcur ON SYS_REFCURSOR)
IS
News sys_refcursor;
v_cur inventory.inventory_id%TYPE--ou is the same type of column inventory_id
v_cur sys_refcursor;
BEGIN
Heart OPEN to SELECT inventory_id
INVENTORY
WHERE film_id = p_film_id
AND store_id = p_store_id
AND inventory_id NOT IN (SELECT inventory_in_stock (inventory_id) FROM dual);
News of FETCH in v_cur;
OUTPUT WHEN heart % NOTFOUND;
END;
/
I know there are typos in the procedure, you will appreciate if you can help me to put it right.
Thank you very much!
Tonya.
In fact, based on your previous post, function inventory_in_stock returns 0 or 1. If so, there are:
CREATE OR REPLACE
PROCEDURE film_not_in_stock)
p_film_id in NUMBERS
p_store_id in NUMBERS
p_cur ON SYS_REFCURSOR
)
IS
News sys_refcursor;
v_cur inventory.inventory_id%TYPE--ou is the same type of column inventory_id
v_cur sys_refcursor;
BEGIN
OPEN p_cur
FOR
SELECT inventory_id
INVENTORY
WHERE film_id = p_film_id
AND store_id = p_store_id
AND inventory_in_stock (inventory_id) = 0;
News of FETCH in v_cur;
OUTPUT WHEN heart % NOTFOUND;
END;
/
SY.
-
Made Oracle 6i LOV with ref cursor returned by a function of database
Hi all
I want to dynamically create a LOV in oracle forms 6i using the value of ref cursor returned by the function of database.
is this possible?
Using loop, I could able to display the values returned by the ref cursor, but how can I assign these values in the LOV?
You will need to loop through your REF Cursor and assign each value to a group of registration of forms and then assign the Group Record to your LOV. Take a look at the built-ins CREATE_GROUP, ADD_GROUP_COLUMN and ADD_GROUP_ROW in the help system of forms for more information about how to use these built-ins and examples of how to use them.
Craig...
-
Irregular data loss - function from PL/SQL returning data using Ref Cursor
Database Version: 10.2.0.4.0 (node 2 CARS)
The high-level process flow is as below:
(1) insert records in a few tables & commit the same
(2) call the pl/sql function to extract files (on certain conditions with joins with other tables) of the tables which are filled in step 1.
-> It uses the ORDER BY clause to queries inline & line number 5000 records return for each call.
Sense - if inline query is supposed to return 1,00,000 records then 20 calls to the same function. This, because the application cannot contain records beyond number.
(3) the data returned by the ref cursor is then processed by application (Tibco BW) to generate the flat file.
We are facing the problem of data loss in the file and there is no fixed model. It happens once between 200-300 calls process.
Resolution: When the problem occurs, triggering the process and in almost every time re-outbreak of the process provides required data.
Guidance on what could be the reason?
* Examples of Code for the function:
CREATE OR REPLACE FUNCTION FUNC_GET_HRCH_TOTAL_DATA)
outinstrid in NUMBERS
outinstrkey in NUMBERS
rownumberstart in NUMBERS
rownumbereend in NUMBERS
err_code OUT VARCHAR2,
err_msg OUT VARCHAR2)
RETURN PACK_TYPES. HRCH_TOTAL_CURSOR
IS
REF_HRCH_TOTAL_CURSOR PACK_TYPES. HRCH_TOTAL_CURSOR;
BEGIN
OPEN FOR REF_HRCH_TOTAL_CURSOR
SELECT *.
FROM (SELECT A.HIERARCHY_KEY, B.KEY, B.VAL_KEY, A.KEY_NEW, C.ITEMID, B.VAL_TAG, B.sort_order, ROWNUM ROWNUMBER
OF AOD_HRCH_ITEM A, AOD_HRCH_ATTR B, AOD_HRCH_ITEMS C
WHERE A.outputid = B.outputid
AND A.outputid = C.outputid AND A.outputkey = B.outputkey
AND A.outputkey = C.outputkey AND A.outputid = outinstrid
AND A.outputkey = outinstrkey AND A.ITEM_SEQ = B.ITEM_SEQ
AND A.ITEM_SEQ = C.ITEM_SEQ AND A.HIERARCHY_LEVEL_ORDER = B.SORT_ORDER
ORDER BY A.HIERARCHY_LEVEL_ORDER DESC)
WHERE ROWNUMBER < rownumbereend
AND ROWNUMBER > = rownumberstart;
RETURN REF_HRCH_TOTAL_CURSOR;
EXCEPTION
WHILE OTHERS
THEN
err_code: = x_progress | ' - ' || SQLCODE;
err_msg: = SUBSTR (SQLERRM, 1, 500);
END FUNC_GET_HRCH_TOTAL_DATA;
/
Published by: meet_sanc on February 16, 2013 10:42Your SELECT statement is almost certainly incorrect
SELECT * FROM ( SELECT A.HIERARCHY_KEY, B.KEY, B.VAL_KEY, A.KEY_NEW, C.ITEMID, B.VAL_TAG, B.sort_order,ROWNUM ROWNUMBER FROM AOD_HRCH_ITEM A, AOD_HRCH_ATTR B, AOD_HRCH_ITEMS C WHERE A.outputid = B.outputid AND A.outputid = C.outputid AND A.outputkey = B.outputkey AND A.outputkey = C.outputkey AND A.outputid = outinstrid AND A.outputkey = outinstrkey AND A.ITEM_SEQ = B.ITEM_SEQ AND A.ITEM_SEQ = C.ITEM_SEQ AND A.HIERARCHY_LEVEL_ORDER = B.SORT_ORDER ORDER BY A.HIERARCHY_LEVEL_ORDER DESC) WHERE ROWNUMBER < rownumbereend AND ROWNUMBER >= rownumberstart;
Since the ORDER BY is applied after the ROWNUM is assigned in this case, your query is requested for a period of 5000 lines any arbitrariness. It would be perfectly valid for a single line to return in each of your 200 different calls or for a line to return in any of them.
You definitely want to do something in the sense of the canonical askTom wire
select * from ( select a.*, rownum rnum from ( YOUR_QUERY_GOES_HERE -- including the order by ) a where rownum <= MAX_ROWS ) where rnum >= MIN_ROWS
That said, it seems inconceivable that Tibco is unable to manage a cursor that returns more than a certain number of lines. You do a ton of work to return the data pages that are certainly not necessary. Unless you're saying that you somehow paralyzed your installation of Tibco giving him a ridiculously small amount of memory to process, something doesn't look good. A slider is just a pointer - it holds that no data - so the number of lines that you can extract a slider should have no impact on the amount of memory on the client application needs.
As others have already pointed out, your exception handler is almost certainly do more harm than good. Return the error codes and error messages as from the OUT parameters, instead of simply allowing the exception to propagate deletes a ton of useful information (such as the mistake of the stack) and makes your process much less robust.
Justin
-
Best approach - whether to return Collections or the Ref Cursor?
I have the table that the column is a nested table (column address) type. Now, I want to fill the same
in a jsp page.
As his collection type I am thinking to send variable Collection to front-end. And most of java professionals
argue that the collections are the best approach.
But here, in a lot of posts, I read that collections at the front end is the worst approach and it degrades performance
and increases the load.
But java assert that even if connection fails they can always display the data as the data set is with them
How to get a set of results COLLECTION.
As ref cursor is just a pointer to the real cursor lies in the comics... they're going to make one record of the other instead and once the connection is lost... they can no longer display the data. This assertion seems
to be reasonable!
How you condemn it? and prove ref Cursor is good way?
Here's the example scenario that I have with me.
Using the Collectioncreate type t_adress is object(t_h_no varchar2(500),t_pin_code number); / create type t_address_tbl is table of t_adress; / create table r_dummy (emp_name varchar2(200),emp_id number,emp_address t_address_tbl) nested table emp_address store as emp_address_tbl; insert into r_dummy values('raghu',1,t_address_tbl(t_adress('598',500035),t_adress('600',500036))) insert into r_dummy values('raghu nadh',2,t_address_tbl(t_adress('598',500035),t_adress('600',500036)))
Using Ref CursorCreate or replace procedure p_using_col ( p_emp_id in r_dummy.emp_name%type, p_emp_dtls out t_address_tbl ) is begin Select t_adress(cl.t_h_no,cl.t_pin_code) bulk collect into p_emp_dtls from r_dummy,table(emp_address) cl where emp_id = p_emp_id; end; / set serveroutput on; declare l_emp_id r_dummy.emp_name%type := 1; l_emp_dtls t_address_tbl; begin p_using_col(l_emp_id,l_emp_dtls); for i in 1..l_emp_dtls.count loop dbms_output.put_line(l_emp_dtls(i).t_h_no); end loop; end;
ConcerningCreate or replace procedure p_using_ref ( p_emp_id in r_dummy.emp_name%type, p_emp_dtls out sys_refcursor ) is begin Open p_emp_dtls for Select cl.t_h_no,cl.t_pin_code from r_dummy,table(emp_address) cl where emp_id = p_emp_id; end; / set serveroutput on; declare l_emp_id r_dummy.emp_name%type := 1; l_emp_dtls sys_refcursor; l_h_no varchar2(500); l_pin_code number; begin p_using_ref(l_emp_id,l_emp_dtls); loop fetch l_emp_dtls into l_h_no,l_pin_code; exit when l_emp_dtls%notfound; dbms_output.put_line(l_h_no||' '||l_pin_code); end loop; close l_emp_dtls; end;
RUSSORUSSO says:
I would like to know what really happens behind the screen IE in PGA... when we return collections...A collection is a PL/SQL variable. Like all PL/SQL variables, it resides in the global area of the server process that executes PL/SQL code. This memory is part of the process the process's private memory.
If need more memory, more memory server be malloc' ed by the process.
As he is dedicated and private memory, no other process can reap the benefits of this memory in use. It is not 'ideal' - shared memory however benefits all the processes that are involved in sharing that allocated the memory. As is the case with the SGA
How long my set of data will reside in the PGA? He immediately fade after returning to the calling procedure? and how it degrades performance. Help me with a good link.
Assume that you create a collection of 10 MB. The process server malloc' ed 10 MB of server memory. The PGA has thus extended.
When your code executes the variable usage (it is out of reach of runtime), the PL/SQL engine can theoretically free up 10 MB of memory. However, it may have allocated 4 KB memory after this assignment of 10 MB. Only 4 KB is still in use. This moment results in that the process cannot shrink its allocated memory - as this free piece of 10 MB is slapbang in the middle of the used memory space.
PGA memory is 'expensive' because it's not shared memory is private, with only the current process. PGA in memory is not so easy to decline. Memory management is a complex issue and you who ceases to use a large part of the PGA memory almost never means that this memory suddenly become free and available for other processes to use.
Also, you have to ask yourself why you want to copy data from disk blocks into the SGA buffer (for SQL procedures) cache, then copy these data blocks of APG in the PGA (using a collection and extraction in bulk) and then copy this PGA memory on the network to the client process (TOAD or .net or Java or whatever).
It's a lot of moving parts - which increases the complexity, lowers the performance and scalability and ups the risk of something going wrong due to the increased complexity.
It is much simpler and much stronger, to maintain the number of moving parts to a minimum. For example to copy data directly from cache buffers of the SGA to the customer via a ref cursor
-
Return of the ref cursor of procedure where the cursor is defined in the specification
Hello
Here's pseudo-code
create or replace package test
as
cursor c_emp (number cv_emp_id)
is
Select emp_name emp where emp_id = cv_emp_id;
type ref_c is ref cursor;
function get_emp_name (number p_emp_id) return ref_c;
end test;
/
create or replace the test physics package
as
ref_c function get_emp_name (number p_emp_id)
is
ret_val ref_c;
Start
Open c_emp (p_emp_id);
ret_val: = c_emp;
return ret_val;
end get_emp_name;
end test;
/
Returns me "PLS-00382: expression is of the wrong type. I tried to use a strongly typed Ref cursor based on the cursor, but nothing helped.
Clearly, I understand something... and if I can't assign as ' ret_val: = c_emp "and if there is another key way it so please let me know.
Thank you
Ralph
Published by: user13024707 on May 5, 2010 04:43user13024707 wrote:
Clearly the point of my question is being missed.Or maybe the question is not been clearly asked. ;)
I want to set the cursor in the PACKAGE SPECIFICATION, and not in the package body. The issue of the bind variable and the string is neither here nor there because I pass parameters to the cursor.
What you ask is to use a PL/SQL cursor (defined in the specifications of the package or elsewhere) and that convert a Ref Cursor. N ° cannot be done.
PL/SQL cursors should be used in the PL/SQL code. REF CURSOR is primary used to pass back a reference to a cursor (and all queries are cursors) to a layer of application outside of PL/SQL for example .net, java, etc.. Once you start using the ref Cursor only really, you have the choice of opening it based on a (dynamic) or a fixed query string as in the examples given. You cannot open a cursor of a PL/SQL cursor definition Ref.The difference is that when you do:
CURSOR cur_mycursor IS SELECT ...
you declare a cursor in pl/sql definition, not actually a slider itself. The cursor itself is created when you issue an OPENING or a statement FOR etc. So a Ref Cursor (reference to a slider) cannot refer to the definition of the cursor because it is only a definition, not a cursor (i.e. it has not been sent engine sql and instantiated at that time here). Instead the Ref Cursor must reference a cursor (query), itself, and that may be presented as a string or as the query itself that is issued against the sql engine and then the ref cursor points
Thus, slider ref and PL/SQL cursors are different concepts, both designed to manage cursors in a slightly different way of programming. You cannot mix them.
-
How to read my ref cursor return user defined cursor type
Hello
I have the types defined as follows:
It is used as a return type in a stored procedure.TYPE MY_RECORD IS RECORD ( COL1 TABLE1.COL1%TYPE, COL2 TABLE1.COL2%TYPE ); TYPE MY_CURSOR IS REF CURSOR RETURN MY_RECORD;
I have a pl/sql block, where I make a call to MS that returns this cursor.
How to read individual values for SP?SQL> create or replace package pkg as type my_record is record (col1 emp.empno%type, col2 emp.ename%type); type my_cursor is ref cursor return my_record; procedure p (cur out my_cursor); end pkg; / Package created. SQL> create or replace package body pkg as procedure p (cur out my_cursor) as begin open cur for select empno, ename from emp where rownum <= 2; end p; end pkg; / Package body created. SQL> declare cur pkg.my_cursor; e_rec pkg.my_record; begin pkg.p (cur); loop fetch cur into e_rec; exit when cur%notfound; dbms_output.put ('Empno: ' || e_rec.col1); dbms_output.put_line ('; Ename: ' || e_rec.col2); end loop; close cur; end; / Empno: 7369; Ename: SMITH Empno: 7499; Ename: ALLEN PL/SQL procedure successfully completed.
-
Calling an Oracle stored procedure that returns a REF cursor
Hi guys,.
I'm calling an Oracle stored procedure that returns a REF CURSOR. Here is the piece of code that I'm working on:
procedure TC307_MAIN (p_program varchar2, varchar2, varchar2, result_set OUT eng_cur p_engchgno p_project) as
Start
IF (p_program = 'Navybased' and p_project = 'PROTECTOR-BUILD') THEN
result_set: = comments. Tc307_Eng_Chg_Rpt.TC307_RNZN (p_engchgno, result_set = >);
END IF;
end TC307_MAIN;
procedure TC307_RNZN (p_engchgno varchar2, result_set IN OUT eng_cur) as
Start
end TC307_RNZN;
PL/SQL code behind TC307_RNZN is big enough, that's why I've not stuck here. Basically, the second stored procedure executes a PLSQL statement and returns a result set. I need to return the result_set in the main proceedings based on nested else statement which I am still trying to build. I get a compilation... error can someone guide me with the correct method to call the second stored procedure and returning in the main proceedings.
Thank you very much.Rohan,
Try this
procedure TC307_MAIN(p_program varchar2, p_project varchar2, p_engchgno varchar2, result_set OUT eng_cur) as begin IF (p_program = 'RNZN' and p_project = 'PROTECTOR-BUILD') THEN -- This is a procedure not a function guest.Tc307_Eng_Chg_Rpt.TC307_RNZN(p_engchgno, result_set); --UR compilation error on this line* END IF; end TC307_MAIN;
SS
http://DB-Oracl.blogspot.com -
By the way the Ref cursor to the subprogrammes-taking islet of time to return
Hello
Version Oracle 11.2.0.1
I test the way other Ref Cursor sub programs using examples of schema scott. Please see below for the code.
Everything compiled fine.while execution of the procedure taking a lot of time.create or replace package typ_ref_cursor_pkg as Type t_ref_cursor is REF CURSOR; end typ_ref_cursor_pkg; / create or replace package emp_info_pkg is Type rec_emp is record ( name emp.ename%TYPE, sal emp.sal%Type ); l_emp_rec rec_emp; Procedure get_emp_salary(p_cursor typ_ref_cursor_pkg.t_ref_cursor); Procedure get_emp_by_dept(p_deptno emp.deptno%type); end emp_info_pkg; / create or replace package body emp_info_pkg is Procedure get_emp_salary(p_cursor typ_ref_cursor_pkg.t_ref_cursor) is begin Loop Fetch p_cursor into l_emp_rec; exit when p_cursor%NOTFOUND; DBMS_OUTPUT.PUT_LINE(l_emp_rec.name||' - '||l_emp_rec.sal); end Loop; End get_emp_salary; Procedure get_emp_by_dept(p_deptno emp.deptno%type) is v_emp typ_ref_cursor_pkg.t_ref_cursor; Begin open v_emp for select ename,sal from emp where deptno=p_deptno; LOOP get_emp_salary(v_emp); END LOOP; close v_emp; END get_emp_by_dept; END emp_info_pkg; /
what I am doing wrong? Could you point me to the right direction?execute emp_info_pkg.get_emp_by_dept(10);
Thank you
SGSg049 wrote:
Everything compiled fine.while execution of the procedure taking a lot of time.execute emp_info_pkg.get_emp_by_dept(10);
How long is a long time? Is the code you have posted takes a lot of time, or is it just a case of quick test that works quickly?
Start by checking the SQL code. Get an execution plan for SQL that you run and see if you do a scan of the complete table on the table - if so an index on deptno could help.
I think you have an endless loop in get_emp_by_dept. I was unable to see a way out the manual of the WHILE loop.
-
Pipelined table vs ref cursor in a function return
Hi gurus,
Everybody has discovered that a (subject) is faster on the other? Data will be primarily consumed from an external application (.net). What are the benefits? I can't decide if that use is
Thank you very much.user12868294 wrote:
Hi gurus,Everybody has discovered that a (subject) is faster on the other? Data will be primarily consumed from an external application (.net). What are the benefits? I can't decide if that use is
Thank you very much.
They are two different things.
A pipeline table acts as an array, but you must always choose in it and so if your consumption that in .net, you would still use a Ref Cursor I guess to query this table in pipeline (I guess .net is not query the tables directly, but must use some sort of slider Ref?)
Tables in pipeline can be fast, but it depends on what you need to. Is there a reason why you really need a feature in pipeline? If this is not the case, just use a normal query with a Ref Cursor, so your .net application only retrieves the data properly.
-
Hello expert;
I have a function that returns a ref cursor, but the function may not return anything. I would like to know what is the best way to manage the error message
ORA-06503: PL/SQL: function returned no value - slider Ref
.. Please see below.
function f_de return latest_cur is my_l_cur l_cur; begin open my_l_cur for select max(dateadded) as dateadded from tbl_test; end;
I was wondering what is the best way to manage. I know I could use a count, and if the number is greater than 0, manipulate, but I was looking for the best way to manage it.
user13328581 wrote:
Hello expert;
I have a function that returns a ref cursor, but the function may not return anything. I would like to know what is the best way to manage the error message
ORA-06503: PL/SQL: function returned no value - slider Ref
.. Please see below.
- latest_cur the f_de function return is
- my_l_cur l_cur;
- Start
- Open the my_l_cur for
- Select max (dateadded) as dateadded
- of tbl_test;
- end;
I was wondering what is the best way to manage. I know I could use a count, and if the number is greater than 0, manipulate, but I was looking for the best way to manage it.
by definition a FUNCTION returns a value, but your code isn't working; Therefore, the error is thrown.
RETURN MY_L_CUR;
the top line should take place before the END; statement.
-
Hi guys,.
You can develop the ref cursor please. I'm new to the plsql...
Hi Alex,
Introduction to the REF CURSOR
With the help of
REF
CURSOR
s is one of the most powerful, flexible and scalable means to return the query results to an Oracle database to a client application.A
REF
CURSOR
is a PL/SQL data type whose value is the memory address of a workspace of query on the database. In essence, aREF
CURSOR
is a pointer or a handle to a game on the database of results.REF
CURSOR
s are represented by theOracleRefCursor
class ODP.NET.REF
CURSOR
s have the following characteristics:- A
REF
CURSOR
refers to a memory on the database address. Therefore, the client must be connected to the database during the lifetime of theREF
CURSOR
to access. - A
REF
CURSOR
involves a round-trip of additional database. While theREF
CURSOR
is returned to the customer, the actual data is not returned until the customer open itREF
CURSOR
and requests the data. Note that the data are not be retrieved until the user tries to read it. - A
REF
CURSOR
is not editable. The result set represented by theREF
CURSOR
is read-only. You cannot update the database using aREF
CURSOR
. - A
REF
CURSOR
is not back with scroll. The data represented by theREF
CURSOR
is only accessible in a way before and in series. You cannot position a record pointer inside theREF
CURSOR
to point to records in the result set. - A
REF
CURSOR
is a PL/SQL data type. You create and return aREF
CURSOR
within a block of PL/SQL code.
See this link which explained on cursor by Zerathul ref: PL/SQL 101: understanding Ref Cursor
Kind regards
Jitendra
- A
-
Report regions - use of the Ref Cursor?
APEX 4.2
See http://mikesmithers.wordpress.com/2012/02/22/getting-apex-to-play-with-ref-cursors
The above article is older than 2 years. The techniques shown in the link above still valid today if we want to create a report region in the APEX are based on a function that returns a Ref Cursor? Are there improvements in this area for the next APEX 5.0 and/or database Oracle 12 c?
Thank you
HELEN wrote:
APEX 4.2
See http://mikesmithers.wordpress.com/2012/02/22/getting-apex-to-play-with-ref-cursors
The above article is older than 2 years. The techniques shown in the link above still valid today if we want to create a report region in the APEX are based on a function that returns a Ref Cursor?
If the function returns the ref cursor is the only point of access that you have data then Yes, it probably is. If you have direct access to the underlying database objects and the function does not have something very complicated, then you are probably better off creating your own body of the function returning SQL query data source.
Everything about the dynamics of ref Cursor now I divided in 2 layers, with a function for generating the dynamic SQL and another for bind parameters open the ref cursor. APEX apps can then reuse the functions of SQL query in function body return SQL query data sources (if you take a bit of care to keep the bind variable names vaguely APEX-point-friendly).
Are there improvements in this area for the next APEX 5.0 and/or database Oracle 12 c?
See this for the technical background on why APEX is not yet support ref Cursor and this for more information of the Oracle team on the possibility of future support. Obviously, he did not he in 4.1. I suspect that data REF CURSOR region sources depended on a minimum requirement of DB of the 11.1.0.6 (where was introduced support for the conversion of the REF CURSOR in the cursors DBMS_SQL). As minimum DB for APEX 5.0 version is 11.1.0.7, it would be a possible feature for 5.0, but it is not classified as one.
Maybe you are looking for
-
Table 2D SGL typecasting of problem
Hello I'm experimenting with my code and has encountered a problem of cast a 2D SGL table: What is the problem here? Type of thread of sources and wells is same "matrix 2D of the single '... BTW. It's LV8.6.1. One more comment: put a loop FOR all abo
-
Computer hangs when I click on view full map
My computer hangs when I click on view full map.
-
Recover Windows 8.0 on hp pc
I would like to reinstall my windows 8 pro system, but I have lost my recovery CD. So, how to do a reinstall or recovery of windows 8 and delete all my files, I supported those upward and its ok to remove them. I'm selling this computer because I don
-
Cannot install CS6 after uninstalling Windows 10
I uninstalled CS6 due to problems that could not be fixed. CS6 is a full version, not an update. I downloaded the 2 files appropriate for Windows (.7z or .exe). for CS6 (x 64) on the Adobe website, rebooted the system, and then ran the CS6 .exe as
-
I can't update to the latest indesign cc, how is it?
other applications update, with the exception of indesign. I get an error:Errors encountered during installation. (U44M1P7)