Why do RefCursors return result sets in reverse order?
Oracle XE version 10.2.0.1 (both windows and Linux perform the same).
I'm porting code from DB2 to Oracle - our environment is mostly stored procedures returning REFCURSORS to a java layer. Many of the stored procedures return more than one REFCURSOR (please no posts on the value of packages vs procs, I understand the benefit but cannot switch at this time to packages). It took me a while to figure this out, but it appears that the cursors are returned in reverse order of their OUT param position(s). My fear is that this isn't always the case, but that the cursors could be open in some random order, in which case any conditional processing I have would need to account for that. Anyone experience this? Or can any Oracle guru explain why the cursors are open in reverse order? At this point in time, I do need to process them positionally rather than naming them -
Here's a test case:
CREATE TABLE TESTCUR(
col1 NUMBER,
col2 VARCHAR2(50)
INSERT INTO TESTCUR VALUES (1, 'value for cursor 1');
INSERT INTO TESTCUR VALUES (2, 'value for cursor 2');
INSERT INTO TESTCUR VALUES (3, 'value for cursor 3');
CREATE OR REPLACE PROCEDURE TESTREFCURSORMULTI (
testcasenumber IN NUMBER,
cv_1 OUT SYS_REFCURSOR,
cv_2 OUT SYS_REFCURSOR,
cv_3 OUT SYS_REFCURSOR
AS
BEGIN
IF testcasenumber = 1 THEN
OPEN cv_1 FOR
SELECT col2
FROM TESTCUR
WHERE col1 = 1;
OPEN cv_2 FOR
SELECT * FROM DUAL WHERE 1=0;
OPEN cv_3 FOR
SELECT * FROM DUAL WHERE 1=0;
ELSE
IF testcasenumber = 2 THEN
OPEN cv_1 FOR
SELECT col2
FROM TESTCUR
WHERE col1 = 2;
OPEN cv_2 FOR
SELECT * FROM DUAL WHERE 1=0;
OPEN cv_3 FOR
SELECT * FROM DUAL WHERE 1=0;
ELSE
OPEN cv_1 FOR
SELECT col2
FROM TESTCUR
WHERE col1 = 1;
OPEN cv_2 FOR
SELECT col2
FROM TESTCUR
WHERE col1 = 2;
OPEN cv_3 FOR
SELECT col2
FROM TESTCUR
WHERE col1 = 3;
END IF;
END IF;
END;
set autoprint on
var rc1 refcursor
var rc2 refcursor
var rc3 refcursor
begin
TESTREFCURSORMULTI(
testcasenumber => 3,
cv_1 => :rc1,
cv_2 => :rc2,
cv_3 => :rc3)
end;
/ Here are the results when opening all three:
SQL> begin
2 TESTREFCURSORMULTI(
3 testcasenumber => 3,
4 cv_1 => :rc1,
5 cv_2 => :rc2,
6 cv_3 => :rc3)
7 ;
8 end;
9 /
PL/SQL procedure successfully completed.
COL2
value for cursor 3
COL2
value for cursor 2
COL2
value for cursor 1Results when opening 1:
SQL> set autoprint on
SQL> var rc1 refcursor
SQL> var rc2 refcursor
SQL> var rc3 refcursor
SQL> begin
2 TESTREFCURSORMULTI(
3 testcasenumber => 1,
4 cv_1 => :rc1,
5 cv_2 => :rc2,
6 cv_3 => :rc3)
7 ;
8 end;
9 /
PL/SQL procedure successfully completed.
no rows selected
no rows selected
COL2
value for cursor 1
It nothing more but the way how AUTOPRINT works:
SQL> set autoprint on
SQL> var rc1 refcursor
SQL> var rc2 refcursor
SQL> var rc3 refcursor
SQL> begin
2 TESTREFCURSORMULTI(
3 testcasenumber => 3,
4 cv_1 => :rc1,
5 cv_2 => :rc2,
6 cv_3 => :rc3)
7 ;
8 end;
9 /
PL/SQL procedure successfully completed.
COL2
value for cursor 3
COL2
value for cursor 2
COL2
value for cursor 1
SQL> set autoprint off
SQL> begin
2 TESTREFCURSORMULTI(
3 testcasenumber => 3,
4 cv_1 => :rc1,
5 cv_2 => :rc2,
6 cv_3 => :rc3)
7 ;
8 end;
9 /
PL/SQL procedure successfully completed.
SQL> print rc1
COL2
value for cursor 1
SQL> print rc2
COL2
value for cursor 2
SQL> print rc3
COL2
value for cursor 3
SQL> As you can see, right cursor returned right result, just autoprint in case of multiple variables prints results starting last open cursor:
SQL> set autoprint on
SQL> begin
2 open :rc1 for 'select 1 from dual';
3 open :rc2 for 'select 2 from dual';
4 open :rc3 for 'select 3 from dual';
5 end;
6 /
PL/SQL procedure successfully completed.
3
3
2
2
1
1
SQL> begin
2 open :rc3 for 'select 3 from dual';
3 open :rc2 for 'select 2 from dual';
4 open :rc1 for 'select 1 from dual';
5 end;
6 /
PL/SQL procedure successfully completed.
1
1
2
2
3
3
SQL> SY.
Similar Messages
-
How to use stored procedure which returns result set in OBIEE
Hi,
I hav one stored procedure (one parameter) which returns a result set. Can we use this stored procedure in OBIEE? If so, how we hav to use.
I know we hav the Evaluate function but not sure whether I can use for my SP which returns result set. Is there any other way where I can use my SP?
Pls help me in solving this.
ThanksHi Radha,
If you want to cache the results in the Oracle BI Server, you should check that option. When you run a query the Oracle BI Server will get its results from the cache, based on the persistence time you define. If the cache is expired, the Oracle BI Server will go to the database to get the results.
If you want to use caching, you should enable caching in the nqsconfig.ini file.
Cheers,
Daan Bakboord -
Sort Result set in Custom Order
Hello - Happy Friday everyone !!
I would like result set to be sorted in a custom order, for example, a specific value must appear at top of result set, a specific value must appear at bottom of result set, and others can be sorted in standard order.
Below is the link I found while researching for the possible solution. This works great if I have to sort a specific value to appear at top of result set but I want some specific values to appear at the very bottom as well.
http://sqlandme.com/2013/11/18/sql-server-custom-sorting-in-order-by-clause/
For example:
CountryName
AUSTRALIA
BANGLADESH
CHINA
FRANCE
INDIA
JAPAN
NEW ZEALAND
PAKISTAN
SRI LANKA
UNITED KINGDOM
UNITED STATES
Now based on the popularity you might need a country to appear on top of the list. In order to return results as required, we need to specify a custom sort order in ORDER BY clause. It can be used as below.
The following query will return result set ordered by CountryName, but INDIA at top and CHINA at 2nd "container">
USE [SqlAndMe]
GO
SELECT CountryName
FROM dbo.Country
ORDER BY CASE WHEN
CountryName = 'INDIA' THEN '1'
WHEN
CountryName = 'CHINA' THEN '2'
ELSE
CountryName END ASC
GO
Result Set:
CountryName
INDIA
CHINA
AUSTRALIA
BANGLADESH
FRANCE
JAPAN
NEW ZEALAND
PAKISTAN
SRI LANKA
UNITED KINGDOM
UNITED STATES
My predicament: Based on the example above, I always want 'India' and 'China' at the TOP and 'Bangladesh' and 'Pakistan' at the bottom. Rest can follow the general sort rule. How do I tweak/approach this? Thank you very
much for your help in advance.
Result Set I am anticipating;
INDIA
CHINA
AUSTRALIA
FRANCE
JAPAN
NEW ZEALAND
SRI LANKA
UNITED KINGDOM
UNITED STATES
BANGLADESH
PAKISTAN
This would make my weekend great!!
Regards,
SJ
http://sqlandme.com/2013/11/18/sql-server-custom-sorting-in-order-by-clause/
Sanjeev Jhathis would be enough
USE [SqlAndMe]
GO
SELECT CountryName
FROM dbo.Country
ORDER BY CASE CountryName
WHEN 'INDIA' THEN 1
WHEN 'CHINA' THEN 2
WHEN 'BANGLADESH' THEN 4
WHEN 'PAKISTAN' THEN 5
ELSE 3
END,CountryName
GO
Please Mark This As Answer if it helps to solve the issue Visakh ---------------------------- http://visakhm.blogspot.com/ https://www.facebook.com/VmBlogs -
Returning result sets from PL/SQL procedure to client app.
I was wondering if its possible in Oracle PL/SQL to DECLARE, OPEN a cursor and exit
the procedure without closing the cursor
and then retrieve the resultset from
the client.
Pl let me know..
nullYes, you need to use one OUT parameter in your PL/SQL procedure
to pass the cursor variable to
Java code. You can also return that as a return variable of
PL/SQL function. Get the cursor variable from the resultset using
Types.CURSOR data type and then proceed as usual.
Enrique (guest) wrote:
: Thank you Rajib for your prompt reply. I have been programming
a
: lot in Transact SQL( MSSQL ), but I am new to Oracle and I need
: to migrate MSSQL procedures to Oracle. I will try to use the
: refCursors. One more question, how do I pass the cursors back?
: With OUT parameters? In MSSQL you do not need to specify OUT
: parameters if you are returning a result set.
: Once Again,
: Thank you
: Rajib (guest) wrote:
: : You can return a variable of refcursor type from your PL/SQL
: : procedure (PL/SQL 2.3 or higher) to Java code. Oracle JDBC
has
: a
: : refcursor data type. Now you can use this cursor as a
: resultset.
: : Enrique (guest) wrote:
: : : Hi All,
: : : I am trying to write some store procedures( PL/SQL )
: : that
: : : will select rows from my tables, and then pass then back to
: my
: : : JDBC application as result sets....Does anyone know how can
I
: : do
: : : that? Do I need to use output parameters? Or Return
: functions?
: : : Any help or hint wourl be be gladly appreciate it.
: : : Enrique
: : : Thank you.
null -
JDBC SQL Server Channel Calling Stored Procedure Won't Return Result Set
Good afternoon, Experts
We're calling a stored procedure in a sender communcation channel. I can perform any SQL SELECT statement here, but for some reason when I execute the SP (EXECUTE StoredProcedureName) The Adapter Engine returns the following:
Database-level error reported by JDBC driver while executing statement 'DECLARE @UpdateRecords bit SET @UpdateRecords = 0 EXECUTE ExportToSAP @UpdateRecords'. The JDBC driver returned the following error message: 'com.microsoft.sqlserver.jdbc.SQLServerException: The statement did not return a result set.'. For details, contact your database server vendor.
Even stranger yet is is that this works just fine on our PI-DEV system. I created an identical communication channel connecting to the same database with the same UID and PWD and it won't work in PI-QAS.
Any help/ideas you could share would be greatly appreciated!!!
Thanks,
ChadHi Chad.
Normally, itu2019s a problem with your procedure. The Store Procedure is wrong and something is different between your DEV environment and QAS environment.
Try to ask to DB team check it.
Regards,
Bruno -
Database control: how to read output of sproc that returns result set
I have a stored procedure that returns a result set. Should I use a RowSet control to wrap this, or a database control, or neither? Am I better off with straight JDBC in a Java control?
Thanks.Sorry for missing the point totally...
DOKTL also contains long text for FM parameters...
This is a modified version of your code that retrieves the long text and displays it...
DATA: parameter TYPE TABLE OF swotfupar,
ls_parameter LIKE LINE OF parameter,
search_string TYPE doktl-object,
texttab type table of doktl-doktext with header line.
PARAMETERS: fubaname TYPE swcontdef-abapname
DEFAULT 'POPUP_TO_CONFIRM',
pa_lang TYPE sy-langu.
START-OF-SELECTION.
CALL FUNCTION 'SWO_QUERY_FUNCTION_PARAMETERS'
EXPORTING
functionmodule = fubaname
TABLES
function_parameters = parameter
* EXCEPTIONS
* FUNCTION_NOT_FOUND = 1
* OTHERS = 2
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
LOOP AT parameter INTO ls_parameter.
CONCATENATE ` ` "30 spaces
ls_parameter-parameter INTO search_string.
OVERLAY search_string WITH fubaname.
SELECT doktext FROM doktl INTO TABLE texttab
WHERE id = 'FU'
AND langu = pa_lang
AND object = search_string.
WRITE:/ 'Long Text for', ls_parameter-parameter.
LOOP AT texttab.
NEW-LINE.
WRITE: AT 10 texttab COLOR COL_HEADING.
ENDLOOP.
ENDLOOP.
Hope this helps you
Regards,
Dushyant Shetty -
Calling stored procedure returning result set
Hi all,
i know this issue is discussed quite often. I did not find an answer in the forums, not in the manual and even not in the examples for stored procedure.
So i try it here once more :)
Description:
GET_SKS:
The GET_SKS procedure is used to generate a number of surrogate keys. It has one input parameter NUM_SKS_IN that specifies the number of keys to generate. The generated keys are returned as a result set.
So i tried:
CallableStatemant sproc_stmt = lsession.connection().prepareCall("{ call Get_SKS(?,?)}");
sproc_stmt.setInt(2,1);
sproc_stmt.registerOutParameter(1,OracleTypes.CURSOR);
sproc_stmt.execute();
ResultSet sproc_result = (ResultSet) sproc_stmt.getObject(1);
I got the exception:
java.sql.SQLException: ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'GET_SKS'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
Thanks for help! This is really getting frustrating...
Regards,
akHi there,
i could speak to our one of our admins. This is what he gave me:
CREATE OR REPLACE PROCEDURE "TCSDBOWNER"."GET_SKS"
(num_sks_in IN INTEGER,
sk_out OUT SYS_INFO.SYS_INFO_SK%TYPE)
AS
/*+
|| Procedure - GET_SKS - Oracle
||
|| Description:
|| This procedure is used to get one or more primary keys for tables with
|| surrogate keys as the primary key. This number is unique across all
|| tables and installations for a given client.
||
|| Parameters:
|| num_sks_in - INTEGER: number of surrogate keys to return
|| sk_out - sk_subtype: first key in the sequence of requested keys
||
|| History:
|| 08/30/01,dcs: Created
CURSOR request_cur IS
select DBMS_LOCK.REQUEST(170333184) from dual;
CURSOR release_cur IS
select DBMS_LOCK.RELEASE(170333184) from dual;
CURSOR dual_sk_cur IS
select SEQ_SK.NEXTVAL SK
from DUAL;
v_base_offset SYS_INFO.BASE_OFFSET%TYPE;
v_sk SYS_INFO.SYS_INFO_SK%TYPE;
v_sqlstring VARCHAR2(1000);
v_cursor_handle INTEGER;
v_return INTEGER;
BEGIN
IF num_sks_in < 1 THEN
TCS_EXC.RAISE_ERROR(TCS_EXC.num_sks_in_lt_1);
END IF;
OPEN request_cur;
FETCH request_cur INTO v_return;
CLOSE request_cur;
IF v_return <> 0 AND v_return <> 4 THEN
TCS_EXC.RAISE_ERROR(TCS_EXC.sk_gen_lock_failed);
END IF;
v_cursor_handle := DBMS_SQL.OPEN_CURSOR;
v_sqlstring := 'ALTER SEQUENCE SEQ_SK INCREMENT BY '|| TO_CHAR(num_sks_in);
DBMS_SQL.PARSE(v_cursor_handle, v_sqlstring, DBMS_SQL.V7);
v_return := DBMS_SQL.EXECUTE(v_cursor_handle);
DBMS_SQL.CLOSE_CURSOR(v_cursor_handle);
GET_BASE_OFFSET(v_base_offset);
OPEN dual_sk_cur;
FETCH dual_sk_cur INTO v_sk;
CLOSE dual_sk_cur;
sk_out := (v_base_offset * 10000000000) + v_sk - num_sks_in + 1;
v_cursor_handle := DBMS_SQL.OPEN_CURSOR;
v_sqlstring := 'ALTER SEQUENCE SEQ_SK INCREMENT BY 1';
DBMS_SQL.PARSE(v_cursor_handle, v_sqlstring, DBMS_SQL.V7);
v_return := DBMS_SQL.EXECUTE(v_cursor_handle);
DBMS_SQL.CLOSE_CURSOR(v_cursor_handle);
OPEN release_cur;
FETCH release_cur INTO v_return;
CLOSE release_cur;
IF v_return <> 0 THEN
TCS_EXC.RAISE_ERROR(TCS_EXC.sk_gen_lock_failed);
END IF;
END GET_SKS; Ok, i tried with that but even not succeded yet. Can anybody help me to code that into a java call?
Regards,
ak -
Stored function not returning result set unless recompiled
Hi,
I have a strange situation going on with a basic Java (1.6.0.17) application talking to an Oracle 11g (11.2.0.1.0) database. Basically what is happening is that sometimes a stored function's return value (a result set) is not making it as far as JDBC/Java, unless I recompile the stored function (with absolutely no changes to the application or function's code). I am always able to successfully see the result set if I call the function directly from within SQL Developer, just not on the Java app/JDBC side.
I've tried running with 3 different physical Oracle 11g servers and tried running the app on a couple of machines. I'm wondering if this is either some kind of caching issue or perhaps a JDBC bug/misconfiguration.
Any help would be greatly appreciated. Attached to this message:
1. stored function code
2. snippet of Java app code
3. ODBC trace output when returned a empty result set (ie failure scenario)
4. ODBC trace out when returned the correct result set (ie success scenario)
* it's helpful if you compare the texts of 3 & 4 with Vim diff or WinMerge etc.
** as they're large I've just extracted the sections that had differences. Leave a message here and I can send you the full ones if necessary.
1. stored function code
===============
FUNCTION getRecordSet (
ActionId Number
RETURN CallingList.ref_cursor
IS
myDataCursor CallingList.ref_cursor;
ActionId_ Number;
BEGIN
ActionId_ := ActionId;
IF isActionExpired(ActionId) <= 0 THEN
ActionId_ := 0;
END IF;
OPEN myDataCursor FOR
SELECT
C.ID,
C.CUSTOMER_ID,
C.CAMPAIGN_ID,
c.phone,
C.TRANSFERDN,
(SELECT
TTS_MESSAGE
FROM CAMPAIGN CMP
WHERE CMP.CAMPAIGN_ID = C.CAMPAIGN_ID) "TTS"
FROM
CALLING_LIST C
WHERE
C.ACTION_ID = ActionId_
AND
C.CALL_STATUS = 1
AND
C.CALLCOUNT > 0
And rownum <=5;
RETURN myDataCursor;
EXCEPTION
WHEN CURSOR_ALREADY_OPEN THEN
RETURN NULL;
WHEN INVALID_CURSOR THEN
RETURN NULL;
WHEN NO_DATA_FOUND THEN
RETURN NULL;
END getRecordSet;
....and the isActionExpired function that is called from within getResultSet is (but for all my testing it's been returning 1 with no problems)
FUNCTION isActionExpired (
ActionId number
) RETURN number
AS
Today varchar2(12);
myCount number(6);
BEGIN
myCount := 0;
today := to_char(sysdate, 'dd.mm.yyyy');
SELECT
count(*)
INTO
myCount
FROM
ACTION A
where
ACTION_ID = ActionId
AND
SYSDATE BETWEEN ACTION_STARTDATETIME
AND
ACTION_STOPDATETIME
and
SYSDATE BETWEEN to_date(today || ' ' || A.STARTTIME, 'dd.mm.yyyy HH24:MI:SS') and to_date(today || ' ' || A.ENDTIME, 'dd.mm.yyyy HH24:MI:SS')
AND
ACTION_STATUS = 1;
return myCount;
END isActionExpired;
2. snippet of Java app code
=================
... db connect logic...
javax.management.MBeanServer mbs = null;
javax.management.ObjectName name = null;
try {
String loader = Thread.currentThread().getContextClassLoader().toString().replaceAll("[,=:\"]+", "");
name = new javax.management.ObjectName("com.oracle.jdbc:type=diagnosability,name="+loader);
mbs = java.lang.management.ManagementFactory.getPlatformMBeanServer();
mbs.setAttribute(name, new javax.management.Attribute("LoggingEnabled", true));
} catch (Exception e) {
System.out.println("ORACLE TRACE ERROR: " + e.getStackTrace());
try {
String query = "begin ? := CALLINGLIST.getRecordSet(?); end;";
CallableStatement stmt = conn.prepareCall(query);
stmt.registerOutParameter(1, OracleTypes.CURSOR);
stmt.setInt(2, actionId);
stmt.execute();
ResultSet rs = (ResultSet) stmt.getObject(1); // So, here it works.
// print the results
int count=0;
while (rs.next()) {
count++;
stmt.close();
System.out.println("rs count was: " + count);
} catch (SQLException e) {
System.out.println("Exception occurred: " + e.getMessage());
3. ODBC trace output when returned a empty result set (ie failure scenario)
===============================================
Jul 1, 2010 3:30:47 PM oracle.net.ns.Packet receive
TRACE_16: Enter:
Jul 1, 2010 3:30:47 PM oracle.net.ns.Packet receive
TRACE_20: Debug: type=6, length=121, flags=0
00 79 00 00 06 00 00 00 |.y......|
00 00 06 22 01 06 00 01 |..."....|
0A 00 00 00 07 03 C2 04 |........|
0E 04 C3 5E 22 03 02 C1 |...^"...|
2A 04 33 30 30 32 03 37 |*.3002.7|
37 37 05 48 65 6C 6C 6F |77.Hello|
08 01 06 00 00 01 02 00 |........|
00 00 00 00 00 04 01 05 |........|
01 01 02 05 7B 00 00 01 |....{...|
02 00 03 00 00 00 00 00 |........|
00 00 00 00 00 00 00 00 |........|
00 01 01 00 00 00 00 19 |........|
4F 52 41 2D 30 31 34 30 |ORA-0140|
33 3A 20 6E 6F 20 64 61 |3:.no.da|
74 61 20 66 6F 75 6E 64 |ta.found|
0A |. |
Jul 1, 2010 3:30:47 PM oracle.net.ns.Packet receive
TRACE_16: Exit
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.DBConversion CHARBytesToJavaChars
TRACE_16: Enter: [B@1fa1bb6, 0, [C@1b000e7, 1, [I@1315d34, 20
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.DBConversion _CHARBytesToJavaChars
TRACE_16: Enter: [B@1fa1bb6, 0, [C@1b000e7, 1, 871, [I@1315d34, 20, oracle-character-set-830, oracle-character-set-2000, oracle-character-set-871, false
Jul 1, 2010 3:30:47 PM oracle.sql.CharacterSet convertUTFBytesToJavaChars
TRACE_16: Enter: [B@1fa1bb6, 0, [C@1b000e7, 1, [I@1315d34, true, 20
Jul 1, 2010 3:30:47 PM oracle.sql.CharacterSet convertUTFBytesToJavaChars
TRACE_16: return: 4
Jul 1, 2010 3:30:47 PM oracle.sql.CharacterSet convertUTFBytesToJavaChars
TRACE_16: Exit
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.DBConversion _CHARBytesToJavaChars
TRACE_16: return: 4
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.DBConversion _CHARBytesToJavaChars
TRACE_16: Exit
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.DBConversion CHARBytesToJavaChars
TRACE_16: return: 4
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.DBConversion CHARBytesToJavaChars
TRACE_16: Exit
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.DBConversion CHARBytesToJavaChars
TRACE_16: Enter: [B@1fa1bb6, 0, [C@1b000e7, 211, [I@1de256f, 10
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.DBConversion _CHARBytesToJavaChars
TRACE_16: Enter: [B@1fa1bb6, 0, [C@1b000e7, 211, 871, [I@1de256f, 10, oracle-character-set-830, oracle-character-set-2000, oracle-character-set-871, false
Jul 1, 2010 3:30:47 PM oracle.sql.CharacterSet convertUTFBytesToJavaChars
TRACE_16: Enter: [B@1fa1bb6, 0, [C@1b000e7, 211, [I@1de256f, true, 10
Jul 1, 2010 3:30:47 PM oracle.sql.CharacterSet convertUTFBytesToJavaChars
TRACE_16: return: 3
Jul 1, 2010 3:30:47 PM oracle.sql.CharacterSet convertUTFBytesToJavaChars
TRACE_16: Exit
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.DBConversion _CHARBytesToJavaChars
TRACE_16: return: 3
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.DBConversion _CHARBytesToJavaChars
TRACE_16: Exit
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.DBConversion CHARBytesToJavaChars
TRACE_16: return: 3
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.DBConversion CHARBytesToJavaChars
TRACE_16: Exit
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.DBConversion CHARBytesToJavaChars
TRACE_16: Enter: [B@1fa1bb6, 0, [C@1b000e7, 321, [I@16bd8ea, 2000
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.DBConversion _CHARBytesToJavaChars
TRACE_16: Enter: [B@1fa1bb6, 0, [C@1b000e7, 321, 871, [I@16bd8ea, 2000, oracle-character-set-830, oracle-character-set-2000, oracle-character-set-871, false
Jul 1, 2010 3:30:47 PM oracle.sql.CharacterSet convertUTFBytesToJavaChars
TRACE_16: Enter: [B@1fa1bb6, 0, [C@1b000e7, 321, [I@16bd8ea, true, 2000
Jul 1, 2010 3:30:47 PM oracle.sql.CharacterSet convertUTFBytesToJavaChars
TRACE_16: return: 5
Jul 1, 2010 3:30:47 PM oracle.sql.CharacterSet convertUTFBytesToJavaChars
TRACE_16: Exit
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.DBConversion _CHARBytesToJavaChars
TRACE_16: return: 5
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.DBConversion _CHARBytesToJavaChars
TRACE_16: Exit
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.DBConversion CHARBytesToJavaChars
TRACE_16: return: 5
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.DBConversion CHARBytesToJavaChars
TRACE_16: Exit
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.T4CConnection updateSessionProperties
TRACE_16: Enter: [Loracle.jdbc.internal.KeywordValue;@16e1fb1
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.T4CConnection updateSessionProperties
TRACE_16: Exit
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.T4CStatement fetch
TRACE_16: Exit
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.OracleStatement checkValidRowsStatus
TRACE_16: Enter:
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.OracleStatement checkValidRowsStatus
TRACE_16: Exit
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.OracleResultSetImpl <init>
TRACE_16: Exit
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.T4CResultSetAccessor getCursor
TRACE_16: return: oracle.jdbc.driver.OracleResultSetImpl@e2cb55
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.T4CResultSetAccessor getCursor
TRACE_16: Exit
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.ResultSetAccessor getObject
TRACE_16: return: oracle.jdbc.driver.OracleResultSetImpl@e2cb55
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.ResultSetAccessor getObject
TRACE_16: Exit
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.OracleCallableStatement getObject
TRACE_1: return: oracle.jdbc.driver.OracleResultSetImpl@e2cb55
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.OracleCallableStatement getObject
TRACE_1: Exit
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.OracleCallableStatementWrapper getObject
TRACE_30: return: oracle.jdbc.driver.OracleResultSetImpl@e2cb55
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.OracleCallableStatementWrapper getObject
TRACE_30: Exit
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.OracleResultSetImpl next
TRACE_1: Public Enter:
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.OracleResultSetImpl next
TRACE_20: Debug: closed=false, statement.currentRow=-1, statement.totalRowsVisited=0, statement.maxRows=0, statement.validRows=1, statement.gotLastBatch=true
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.OracleResultSetImpl next
TRACE_1: return: true
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.OracleResultSetImpl next
TRACE_1: Exit
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.OracleResultSetImpl next
TRACE_1: Public Enter:
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.OracleResultSetImpl next
TRACE_20: Debug: closed=false, statement.currentRow=0, statement.totalRowsVisited=1, statement.maxRows=0, statement.validRows=1, statement.gotLastBatch=true
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.OracleResultSetImpl internal_close
TRACE_16: Enter: false
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.BaseResultSet close
TRACE_16: Public Enter:
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.BaseResultSet close
TRACE_16: Exit
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.PhysicalConnection registerHeartbeat
TRACE_16: Enter:
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.PhysicalConnection registerHeartbeat
TRACE_16: Exit
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.PhysicalConnection needLine
TRACE_16: Enter:
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.PhysicalConnection needLineUnchecked
TRACE_16: Enter:
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.PhysicalConnection needLineUnchecked
TRACE_16: Exit
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.PhysicalConnection needLine
TRACE_16: Exit
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.T4CStatement closeQuery
TRACE_16: Enter:
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.T4CConnection assertLoggedOn
TRACE_16: Enter: "oracle.jdbc.driver.T4CStatement.closeQuery"
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.T4CConnection assertLoggedOn
TRACE_16: Exit
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.T4CStatement closeQuery
TRACE_16: Exit
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.OracleStatement endOfResultSet
TRACE_16: Enter: false
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.OracleStatement prepareForNewResults
TRACE_16: Enter: false, false
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.OracleStatement clearWarnings
TRACE_16: Public Enter:
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.OracleStatement clearWarnings
TRACE_16: Exit
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.OracleResultSetImpl internal_close
TRACE_16: Enter: true
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.OracleResultSetImpl internal_close
TRACE_16: return:
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.OracleResultSetImpl internal_close
TRACE_16: Exit
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.OracleStatement prepareForNewResults
TRACE_16: Exit
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.T4CStatement clearDefines
TRACE_16: Enter:
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.OracleStatement clearDefines
TRACE_16: Public Enter:
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.OracleStatement freeLine
TRACE_16: Enter:
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.OracleStatement freeLine
TRACE_16: Exit
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.OracleStatement cleanupDefines
TRACE_16: Enter:
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.PhysicalConnection cacheBuffer
TRACE_16: Enter: [B@8e32e7
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.BufferCache put
TRACE_16: Enter: [B@8e32e7
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.BufferCache put
TRACE_30: Exit
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.PhysicalConnection cacheBuffer
TRACE_16: Exit
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.PhysicalConnection cacheBuffer
TRACE_16: Enter: [C@1b000e7
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.BufferCache put
TRACE_16: Enter: [C@1b000e7
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.BufferCache put
TRACE_30: Exit
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.PhysicalConnection cacheBuffer
TRACE_16: Exit
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.OracleStatement cleanupDefines
TRACE_16: Exit
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.OracleStatement clearDefines
TRACE_16: Exit
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.T4CStatement clearDefines
TRACE_16: Exit
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.OracleStatement endOfResultSet
TRACE_16: Exit
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.OracleResultSetImpl internal_close
TRACE_16: Exit
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.OracleResultSetImpl next
TRACE_1: return: false
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.OracleResultSetImpl next
TRACE_1: Exit
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.OracleCallableStatementWrapper close
TRACE_16: Enter:
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.OraclePreparedStatementWrapper close
TRACE_16: Enter:
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.OracleStatementWrapper close
TRACE_16: Enter:
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.OracleStatement close
TRACE_1: Public Enter:
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.OracleStatement closeOrCache
TRACE_16: Enter: null
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.PhysicalConnection isStatementCacheInitialized
TRACE_16: Enter:
Jul 1, 2010 3:30:47 PM oracle.jdbc.driver.PhysicalConnection isStatementCacheInitialized
4. ODBC trace out when returned the correct result set (ie success scenario)
===============================================
TRACE_16: Enter:
Jul 1, 2010 3:30:07 PM oracle.net.ns.Packet receive
TRACE_20: Debug: type=6, length=82, flags=0
00 52 00 00 06 00 00 00 |.R......|
00 00 08 01 06 00 00 01 |........|
02 00 00 00 00 00 00 04 |........|
01 05 00 02 05 7B 00 00 |.....{..|
01 02 00 03 00 00 00 00 |........|
00 00 00 00 00 00 00 00 |........|
00 00 01 01 00 00 00 00 |........|
19 4F 52 41 2D 30 31 34 |.ORA-014|
30 33 3A 20 6E 6F 20 64 |03:.no.d|
61 74 61 20 66 6F 75 6E |ata.foun|
64 0A |d. |
Jul 1, 2010 3:30:07 PM oracle.net.ns.Packet receive
TRACE_16: Exit
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.T4CConnection updateSessionProperties
TRACE_16: Enter: [Loracle.jdbc.internal.KeywordValue;@1fa1bb6
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.T4CConnection updateSessionProperties
TRACE_16: Exit
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.T4CStatement fetch
TRACE_16: Exit
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.OracleResultSetImpl internal_close
TRACE_16: Enter: false
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.BaseResultSet close
TRACE_16: Public Enter:
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.BaseResultSet close
TRACE_16: Exit
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.PhysicalConnection registerHeartbeat
TRACE_16: Enter:
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.PhysicalConnection registerHeartbeat
TRACE_16: Exit
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.PhysicalConnection needLine
TRACE_16: Enter:
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.PhysicalConnection needLineUnchecked
TRACE_16: Enter:
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.PhysicalConnection needLineUnchecked
TRACE_16: Exit
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.PhysicalConnection needLine
TRACE_16: Exit
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.T4CStatement closeQuery
TRACE_16: Enter:
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.T4CConnection assertLoggedOn
TRACE_16: Enter: "oracle.jdbc.driver.T4CStatement.closeQuery"
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.T4CConnection assertLoggedOn
TRACE_16: Exit
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.T4CStatement closeQuery
TRACE_16: Exit
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.OracleStatement endOfResultSet
TRACE_16: Enter: false
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.OracleStatement prepareForNewResults
TRACE_16: Enter: false, false
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.OracleStatement clearWarnings
TRACE_16: Public Enter:
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.OracleStatement clearWarnings
TRACE_16: Exit
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.OracleStatement prepareForNewResults
TRACE_16: Exit
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.T4CStatement clearDefines
TRACE_16: Enter:
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.OracleStatement clearDefines
TRACE_16: Public Enter:
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.OracleStatement freeLine
TRACE_16: Enter:
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.OracleStatement freeLine
TRACE_16: Exit
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.OracleStatement cleanupDefines
TRACE_16: Enter:
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.PhysicalConnection cacheBuffer
TRACE_16: Enter: [B@8e32e7
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.BufferCache put
TRACE_16: Enter: [B@8e32e7
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.BufferCache put
TRACE_30: Exit
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.PhysicalConnection cacheBuffer
TRACE_16: Exit
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.PhysicalConnection cacheBuffer
TRACE_16: Enter: [C@1b000e7
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.BufferCache put
TRACE_16: Enter: [C@1b000e7
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.BufferCache put
TRACE_30: Exit
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.PhysicalConnection cacheBuffer
TRACE_16: Exit
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.OracleStatement cleanupDefines
TRACE_16: Exit
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.OracleStatement clearDefines
TRACE_16: Exit
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.T4CStatement clearDefines
TRACE_16: Exit
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.OracleStatement endOfResultSet
TRACE_16: Exit
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.OracleResultSetImpl internal_close
TRACE_16: Exit
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.OracleResultSetImpl <init>
TRACE_16: Exit
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.T4CResultSetAccessor getCursor
TRACE_16: return: oracle.jdbc.driver.OracleResultSetImpl@1315d34
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.T4CResultSetAccessor getCursor
TRACE_16: Exit
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.ResultSetAccessor getObject
TRACE_16: return: oracle.jdbc.driver.OracleResultSetImpl@1315d34
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.ResultSetAccessor getObject
TRACE_16: Exit
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.OracleCallableStatement getObject
TRACE_1: return: oracle.jdbc.driver.OracleResultSetImpl@1315d34
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.OracleCallableStatement getObject
TRACE_1: Exit
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.OracleCallableStatementWrapper getObject
TRACE_30: return: oracle.jdbc.driver.OracleResultSetImpl@1315d34
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.OracleCallableStatementWrapper getObject
TRACE_30: Exit
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.OracleResultSetImpl next
TRACE_1: Public Enter:
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.OracleResultSetImpl next
TRACE_20: Debug: closed=true, statement.currentRow=-1, statement.totalRowsVisited=0, statement.maxRows=0, statement.validRows=0, statement.gotLastBatch=false
Jul 1, 2010 3:30:07 PM oracle.jdbc.driver.OracleResultSetImpl next
Edited by: user9376621 on Jul 1, 2010 1:07 AM
Edited by: user9376621 on Jul 1, 2010 1:13 AMPlease ignore this, it was a non-issue in the end.
-
Returning result set from procedure out parameter, display with anon block
I'm trying to do something pretty simple (I think it should be simple at least). I want to use a pl/sql procedure to return a result set in an OUT parameter. If I run this code by itself (in the given anonymous block at the end, without trying to display any results), toad says that the PL/SQL procedure successfully completed.
How can I display the results from this procedure? I am assuming that the result set should be stored in the O_RETURN_REDEEM_DTL, but how can I get anything out of it?
I have this package with the following procedure:
/* FUNCTION - REDEEM_DTL_READ */
PROCEDURE REDEEM_DTL_READ(
ZL_DIVN_NBR_IN IN REDEEM_DTL.ZL_DIVN_NBR%TYPE,
GREG_DATE_IN IN REDEEM_DTL.GREG_DATE%TYPE,
ZL_STORE_NBR_IN IN REDEEM_DTL.ZL_STORE_NBR%TYPE,
REGISTER_NBR_IN IN REDEEM_DTL.REGISTER_NBR%TYPE,
TRANS_NBR_IN IN REDEEM_DTL.TRANS_NBR%TYPE,
O_RETURN_REDEEM_DTL OUT REDEEM_DTL_TYPE,
o_rtrn_cd OUT NUMBER,
o_err_cd OUT NUMBER,
o_err_msg OUT VARCHAR2
IS
BEGIN
o_rtrn_cd := 0;
o_err_msg := ' ';
o_err_cd := 0;
--OPEN REDEEM_DTL_READ_CUR(ZL_DIVN_NBR_IN, GREG_DATE_IN, ZL_STORE_NBR_IN, REGISTER_NBR_IN, TRANS_NBR_IN);
OPEN O_RETURN_REDEEM_DTL FOR SELECT * FROM REDEEM_DTL;
-- LOOP
-- FETCH REDEEM_DTL_READ_CUR INTO O_RETURN_REDEEM_DTL;
-- EXIT WHEN REDEEM_DTL_READ_CUR%NOTFOUND;
-- END LOOP;
-- CLOSE REDEEM_DTL_READ_CUR;
EXCEPTION
WHEN OTHERS
THEN
o_rtrn_cd := 7;
o_err_msg := SUBSTR (SQLERRM, 1, 100);
o_err_cd := SQLCODE;
END REDEEM_DTL_READ;and call it in an anonymous block with:
DECLARE
ZL_DIVN_NBR_IN NUMBER;
GREG_DATE_IN DATE;
ZL_STORE_NBR_IN NUMBER;
REGISTER_NBR_IN NUMBER;
TRANS_NBR_IN NUMBER;
O_RETURN_REDEEM_DTL PSAPP.CY_SALESPOSTING.REDEEM_DTL_TYPE;
O_RETURN_REDEEM_DTL_OUT PSAPP.CY_SALESPOSTING.REDEEM_DTL_READ_CUR%rowtype;
O_RTRN_CD NUMBER;
O_ERR_CD NUMBER;
O_ERR_MSG VARCHAR2(200);
BEGIN
ZL_DIVN_NBR_IN := 71;
GREG_DATE_IN := TO_DATE('07/21/2008', 'MM/DD/YYYY');
ZL_STORE_NBR_IN := 39;
REGISTER_NBR_IN := 1;
TRANS_NBR_IN := 129;
-- O_RETURN_REDEEM_DTL := NULL; Modify the code to initialize this parameter
O_RTRN_CD := NULL;
O_ERR_CD := NULL;
O_ERR_MSG := NULL;
PSAPP.CY_SALESPOSTING.REDEEM_DTL_READ ( ZL_DIVN_NBR_IN, GREG_DATE_IN, ZL_STORE_NBR_IN,
REGISTER_NBR_IN, TRANS_NBR_IN, O_RETURN_REDEEM_DTL, O_RTRN_CD, O_ERR_CD, O_ERR_MSG );
FOR item IN O_RETURN_REDEEM_DTL
LOOP
DBMS_OUTPUT.PUT_LINE('ZL_DIVN_NBR = ' || item.ZL_DIVN_NBR);
END LOOP;
END; And end up with an error:
ORA-06550: line 25, column 15:
PLS-00221: 'O_RETURN_REDEEM_DTL' is not a procedure or is undefined
ORA-06550: line 25, column 3:
PL/SQL: Statement ignoredMessage was edited by:
user607908Aha, I knew I forgot something!
I actually had it defined as a REF CURSOR in PSAPP.CY_SALESPOSTING package spec:
TYPE REDEEM_DTL_TYPE IS REF CURSOR;since I wasn't sure what to make it.
Cursor used in procedure:
CURSOR REDEEM_DTL_READ_CUR (
zl_divn_nbr_in IN NUMBER,
greg_date_in IN DATE,
zl_store_nbr_in IN NUMBER,
register_nbr_in IN NUMBER,
trans_nbr_in IN NUMBER)
IS
SELECT ZL_DIVN_NBR, GREG_DATE, ZL_STORE_NBR, REGISTER_NBR, TRANS_NBR, PAYMENT_TYP_NBR
FROM REDEEM_DTL
WHERE ZL_DIVN_NBR = zl_divn_nbr_in AND GREG_DATE = greg_date_in AND
ZL_STORE_NBR = zl_store_nbr_in AND REGISTER_NBR = register_nbr_in AND
TRANS_NBR = trans_nbr_in;Updated code:
/* PROCEDURE - REDEEM_DTL_READ */
PROCEDURE REDEEM_DTL_READ(
ZL_DIVN_NBR_IN IN REDEEM_DTL.ZL_DIVN_NBR%TYPE,
GREG_DATE_IN IN REDEEM_DTL.GREG_DATE%TYPE,
ZL_STORE_NBR_IN IN REDEEM_DTL.ZL_STORE_NBR%TYPE,
REGISTER_NBR_IN IN REDEEM_DTL.REGISTER_NBR%TYPE,
TRANS_NBR_IN IN REDEEM_DTL.TRANS_NBR%TYPE,
O_RETURN_REDEEM_DTL OUT REDEEM_DTL_TYPE,
o_rtrn_cd OUT NUMBER,
o_err_cd OUT NUMBER,
o_err_msg OUT VARCHAR2
IS
BEGIN
o_rtrn_cd := 0;
o_err_msg := ' ';
o_err_cd := 0;
OPEN REDEEM_DTL_READ_CUR(ZL_DIVN_NBR_IN, GREG_DATE_IN, ZL_STORE_NBR_IN,
REGISTER_NBR_IN, TRANS_NBR_IN);
--OPEN O_RETURN_REDEEM_DTL FOR SELECT * FROM REDEEM_DTL;
LOOP
FETCH REDEEM_DTL_READ_CUR INTO O_RETURN_REDEEM_DTL;
EXIT WHEN REDEEM_DTL_READ_CUR%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('ZL_DIVN_NBR = ' || O_RETURN_REDEEM_DTL.ZL_DIVN_NBR);
END LOOP;
CLOSE REDEEM_DTL_READ_CUR;
-- LOOP
-- FETCH REDEEM_DTL_READ_CUR INTO O_RETURN_REDEEM_DTL;
-- EXIT WHEN REDEEM_DTL_READ_CUR%NOTFOUND;
-- END LOOP;
-- CLOSE REDEEM_DTL_READ_CUR;
EXCEPTION
WHEN OTHERS
THEN
o_rtrn_cd := 7;
o_err_msg := SUBSTR (SQLERRM, 1, 100);
o_err_cd := SQLCODE;
END REDEEM_DTL_READ;the updated anon block:
DECLARE
ZL_DIVN_NBR_IN NUMBER;
GREG_DATE_IN DATE;
ZL_STORE_NBR_IN NUMBER;
REGISTER_NBR_IN NUMBER;
TRANS_NBR_IN NUMBER;
O_RETURN_REDEEM_DTL PSAPP.CY_SALESPOSTING.REDEEM_DTL_TYPE;
O_RTRN_CD NUMBER;
O_ERR_CD NUMBER;
O_ERR_MSG VARCHAR2(200);
BEGIN
ZL_DIVN_NBR_IN := 71;
GREG_DATE_IN := TO_DATE('07/21/2008', 'MM/DD/YYYY');
ZL_STORE_NBR_IN := 39;
REGISTER_NBR_IN := 1;
TRANS_NBR_IN := 129;
-- O_RETURN_REDEEM_DTL := NULL; Modify the code to initialize this parameter
O_RTRN_CD := NULL;
O_ERR_CD := NULL;
O_ERR_MSG := NULL;
PSAPP.CY_SALESPOSTING.REDEEM_DTL_READ ( ZL_DIVN_NBR_IN, GREG_DATE_IN, ZL_STORE_NBR_IN,
REGISTER_NBR_IN, TRANS_NBR_IN, O_RETURN_REDEEM_DTL, O_RTRN_CD, O_ERR_CD, O_ERR_MSG );
FOR item IN 1..O_RETURN_REDEEM_DTL.COUNT
LOOP
DBMS_OUTPUT.PUT_LINE('ZL_DIVN_NBR = ' || O_RETURN_REDEEM_DTL(item).ZL_DIVN_NBR);
END LOOP;
END;and the new error:
ORA-06550: line 25, column 38:
PLS-00487: Invalid reference to variable 'O_RETURN_REDEEM_DTL'
ORA-06550: line 25, column 3:
PL/SQL: Statement ignoredAlso, it would be nice if the forums would put a box around code so that it would be easy to
distinguish between what is supposed to be code and what should be regular text...
Message was edited by:
user607908 -
Advice Please: Adding Few Static Values to Stored Proc Returned Result Set
Hello -
The Stored Proc below returns about 1000 rows of result set when a date is passed to the query. In addition to that, there are about 5 rows of data (which is in my excel file) needs to be added to the result set. What is the best possible way?
What I have done is I created a new table which has that 5 static rows. It has just the addresses and amount and customer number. There is no invoice date in that table. I tried UNION and the query did not like the fact that I had something like that in
the first table:
SELECT
'0' as 'TYPE'
,'TBCCA' as 'Acc ID'
,'12882' as 'BEID'
, '' as ' # OF UNITS'
, Circuit_Total as 'AMT'
,'D' as 'D or C'
, '' as ' FDOC yyyymmdd'
, '' as ' LDOC yyyymmdd'
, Address as 'Brief Comment'
, city as 'Tax City'
, State as 'Tax State'
, Zip_Code as 'Tax Zip Code'
, INV_DATE as 'Invoice Date'
FROM [dbo].[TBC_MonthlyCircuitDetail]
WHERE INV_DATE = '2014-07-01'
AND [Circuit_Total] >0
UNION
SELECT 0
'0' as 'TYPE' --DID NOT LIKE THIS <<
,'TBCCA' as 'Acc ID'
,'12882' as 'BEID'
, '' as ' # OF UNITS'
, Circuit_Total as 'AMT'
,'D' as 'D or C'
, '' as ' FDOC yyyymmdd'
, '' as ' LDOC yyyymmdd'
, Address as 'Brief Comment'
, city as 'Tax City'
, State as 'Tax State'
, Zip_Code as 'Tax Zip Code'
, '' INV_DATE as 'Invoice Date'
FROM [dbo].[TBC_MonthlyCircuitDetailStaticValues]
WHERE INV_DATE = '2014-07-01'
AND [Circuit_Total] >0
Stored Proc below:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[SP_TBC_ORBIT Process Form]
-- Add the parameters for the stored procedure here
@INVOICE_DATE varchar(20)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT
'0' as 'TYPE'
,'TBCCA' as 'Acc ID'
,'12882' as 'BEID'
, '' as ' # OF UNITS'
, Circuit_Total as 'AMT'
,'D' as 'D or C'
, '' as ' FDOC yyyymmdd'
, '' as ' LDOC yyyymmdd'
, Address as 'Brief Comment'
, city as 'Tax City'
, State as 'Tax State'
, Zip_Code as 'Tax Zip Code'
, INV_DATE as 'Invoice Date'
FROM [dbo].[TBC_MonthlyCircuitDetail]
WHERE INV_DATE IN (@INVOICE_DATE)
AND [Circuit_Total] >0
END
GO
So, what do you suggest? As you can tell, I am quite a novice but I am learning by researching, asking questions and doing it. Thanks in advance!
Sanjeev JhaYour second Select statement is as below:
SELECT 0
'0' as 'TYPE'
--DID NOT LIKE THIS <<
,'TBCCA' as
'Acc ID'
,'12882' as
'BEID'
, '' as
' # OF UNITS'
, Circuit_Total as
'AMT'
,'D' as 'D or C'
, '' as
' FDOC yyyymmdd'
, '' as
' LDOC yyyymmdd'
, Address as
'Brief Comment'
, city as 'Tax City'
, State as
'Tax State'
, Zip_Code as
'Tax Zip Code'
, ''INV_DATE
as 'Invoice Date' -- CHANGE HERE
FROM [dbo].[TBC_MonthlyCircuitDetailStaticValues]
WHERE INV_DATE = '2014-07-01'
AND [Circuit_Total] >0
You are receiving Invoice date from INV_DATE column from table or you want to set it as blank?
Change it to either - ( '' as
'Invoice Date' ) or (INV_DATE as
'Invoice Date' )
-Vaibhav Chaudhari -
Hello,
I am trying to make stored procedure in what i am getting i_group_id as a list of groups seprated by semicoln like 1,2,14,17,23.
And i want list of emails based on that group. And result set will be as a list of emails seprated by semicolon.
If you know how to install that in stored procedure please help me. Appreciate your help.
Thanks.
PROCEDURE get_groups_email(i_group_id IN VARCHAR2,
x_group_email_dtl_cur OUT resultcur)
IS
x_group_email VARCHAR2(4000):=NULL;
BEGIN
FOR i IN (SELECT TRIM(emp.email) email
FROM ems.employee emp,
ems.groups_employee egrp
WHERE egrp.group_id IN (i_group_id)
AND emp.person_id = egrp.person_id) LOOP
x_group_email:= x_group_email || i.email ||';';
END LOOP;
x_group_email := RTRIM(x_group_email,';');
OPEN x_group_email_dtl_cur FOR
SELECT x_group_email
FROM DUAL;
DBMS_OUTPUT.PUT_LINE('x_group_email:' || x_group_email);
END get_groups_email;
PROCEDURE get_groups_email(i_group_id IN VARCHAR2,
x_group_email_dtl_cur OUT resultcur)
IS
x_group_email VARCHAR2(4000):=NULL;
BEGIN
FOR i IN (SELECT TRIM(emp.email) email
FROM ems.employee emp,
ems.groups_employee egrp
WHERE egrp.group_id IN (i_group_id)
AND emp.person_id = egrp.person_id) LOOP
x_group_email:= x_group_email || i.email ||';';
END LOOP;
x_group_email := RTRIM(x_group_email,';');
OPEN x_group_email_dtl_cur FOR
SELECT x_group_email
FROM DUAL;
DBMS_OUTPUT.PUT_LINE('x_group_email:' || x_group_email);
END get_groups_email;1013527 wrote:
I am using Oracle 9.7.2. Not 11g.
No Database at hand to provide a working example.
So use http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:73830657104020 to split your list into rows.
Join that to your table of e-mail addresses
then take a look at http://www.sqlsnippets.com/en/topic-11787.html maybe chosing http://www.sqlsnippets.com/en/topic-12087.html
and you're done.
Regards
Etbin
something to play with (still NOT TESTED!)
with
e_mails as
(select 1 user_id,'alpha' || chr(64) || 'domain.eu' e_mail from dual union all
select 2,'beta' || chr(64) || 'domain.eu' from dual union all
select 3,'gamma' || chr(64) || 'domain.eu' from dual union all
select 4,'delta' || chr(64) || 'domain.eu' from dual union all
select 5,'epsilon' || chr(64) || 'domain.eu' from dual union all
select 6,'zeta' || chr(64) || 'domain.eu' from dual union all
select 7,'eta' || chr(64) || 'domain.eu' from dual union all
select 8,'theta' || chr(64) || 'domain.eu' from dual union all
select 9,'iota' || chr(64) || 'domain.eu' from dual union all
select 10,'kappa' || chr(64) || 'domain.eu' from dual union all
select 11,'lambda' || chr(64) || 'domain.eu' from dual union all
select 12,'mu' || chr(64) || 'domain.eu' from dual union all
select 13,'nu' || chr(64) || 'domain.eu' from dual union all
select 14,'xi' || chr(64) || 'domain.eu' from dual union all
select 15,'omicron' || chr(64) || 'domain.eu' from dual union all
select 16,'pi' || chr(64) || 'domain.eu' from dual union all
select 17,'rho' || chr(64) || 'domain.eu' from dual union all
select 18,'sigma' || chr(64) || 'domain.eu' from dual union all
select 19,'tau' || chr(64) || 'domain.eu' from dual union all
select 20,'upsilon' || chr(64) || 'domain.eu' from dual union all
select 21,'phi' || chr(64) || 'domain.eu' from dual union all
select 22,'chi' || chr(64) || 'domain.eu' from dual union all
select 23,'psi' || chr(64) || 'domain.eu' from dual union all
select 24,'omega' || chr(64) || 'domain.eu' from dual
groups as
(select 1 g_id,'1,15,21,17' members from dual union all
select 2,'23,10,3,20,7,23,15,9' from dual union all
select 3,'3,4,5,6,7,8' from dual union all
select 4,'23,24,15,16,7,18' from dual
select g_id,
substr(sys_connect_by_path(e_mail,';'),2) e_mail_list
from (select g.g_id,
e.e_mail,
row_number() over (partition by g.g_id order by e.user_id) rn
from e_mails e,
groups g
where instr(','||g.members||',',','||to_char(e.user_id)||',') > 0
and instr(','||:group_list||',',','||to_char(g.g_id)||',') > 0
where connect_by_isleaf = 1
start with rn = 1
connect by rn = prior rn + 1
and g_id = prior g_id
Message was edited by: Etbin provided a small example -
Hello,
I am trying to make stored procedure in what i am getting i_group_id as a list of groups seprated by semicoln like 1,2,14,17,23.
And i want list of emails based on that group. And result set will be as a list of emails seprated by semicolon.
Can anybody please help me for that. Thanks in advance.
PROCEDURE get_groups_email(i_group_id IN VARCHAR2,
x_group_email_dtl_cur OUT resultcur)
IS
x_group_email VARCHAR2(4000):=NULL;
BEGIN
FOR i IN (SELECT TRIM(emp.email) email
FROM ems.employee emp,
ems.groups_employee egrp
WHERE egrp.group_id IN (i_group_id)
AND emp.person_id = egrp.person_id) LOOP
x_group_email:= x_group_email || i.email ||';';
END LOOP;
x_group_email := RTRIM(x_group_email,';');
OPEN x_group_email_dtl_cur FOR
SELECT x_group_email
FROM DUAL;
DBMS_OUTPUT.PUT_LINE('x_group_email:' || x_group_email);
END get_groups_email;
PROCEDURE get_groups_email(i_group_id IN VARCHAR2,
x_group_email_dtl_cur OUT resultcur)
IS
x_group_email VARCHAR2(4000):=NULL;
BEGIN
FOR i IN (SELECT TRIM(emp.email) email
FROM ems.employee emp,
ems.groups_employee egrp
WHERE egrp.group_id IN (i_group_id)
AND emp.person_id = egrp.person_id) LOOP
x_group_email:= x_group_email || i.email ||';';
END LOOP;
x_group_email := RTRIM(x_group_email,';');
OPEN x_group_email_dtl_cur FOR
SELECT x_group_email
FROM DUAL;
DBMS_OUTPUT.PUT_LINE('x_group_email:' || x_group_email);
END get_groups_email;>
Can anybody please help me for that
>
Not in this forum they can't. This forum, as the title says, is for SQL Developer questions only.
Please mark this question ANSWERED and repost it in the SQL and PL/SQL forum
https://forums.oracle.com/community/developer/english/oracle_database/sql_and_pl_sql -
UNION ALL / UNION in returning result set
I cannot find an official Oracle doc states that
select * from table_1
UNION ALL
select * from table_2;
will list the result from table_1 first, like:
<result set from table_1>
<result set from table_2>
But it seems this is the way. If remove "ALL", it will not quarentee the result set of table_1 will come before the result set of table_2 because of the sorting.
Could someone offer an answer? Thanks.
Zactwo comments...
1) Without the code (and a perfect understanding of it), it may be very difficult to create a case where the result is different from what you usually find. We can expect more powerful use of union all (with Parallel Query, because the optimizer does not examine all the different permutations or whatever) may behave differently from what you guess
2) It can (and, of course, will) change in a future release because of new algorithms. There are well known (for example aggregate=sort) things that have changed with things like HASH based algorithms. Unless you want your code to provide wrong results because a patch has changed a "supposed" behaviour, this is probably a good practice to tell what you want in your SQL Query (and order by = sort)
I think I read Thomas Kyte saying : "Whatever you can say about Oracle Database, it is probably true. What is difficult is finding in which version it is the case ! If it is not... wait for the next release" (I'm sorry if he didn't say that... he could have)
I know I didn't answer your question but it is just a 2 cents comment. Best Regards,
Gregory -
RETURN RESULT SET FROM JAVA STORED PROCEDURE
I'm calling a Oracle 8.1.5 java stored proc from PL/SQL and I
would like to send a Java result set to the calling function.
I havent found anyway to do this currently. Anyone else doing
anything like this and have a work around or know when/if it has
been fixed?
Mark
[email protected]
nullThis is not possible in Oracle 8i, will have to wait till Oracle 9i
-
Procedure to take inpot data set and return result set
Hi all,
I have a situation where there will be one "standard" set of data (source_data below) and I will need to get information on results for certain groups of clients (client_data being an example). As straight SQL this would be very easy (see below) -- real world problem is a little more complicated. However, what I would like to do is set up a procedure so that I can pass it my variable client data and it will spit back out a data set the same as the output from the given SQL.
A pointer in the right direction would be appreciated. If I could "pass the client data" as a string containing a SQL query, that would be even better, e.g.
GetResults('select client_id,min(whatever_date) from some_client_data where .....',MyOutputRefCursor?)
create table source_data
(client_id integer,
tdate date,
amount number(6,2));
create table client_data
(client_id integer,
critical_date date);
insert into source_data values(1,to_date('20090104','yyyymmdd'),1000);
insert into source_data values(1,to_date('20100104','yyyymmdd'),2000);
insert into source_data values(1,to_date('20110104','yyyymmdd'),3000);
insert into source_data values(1,to_date('20120104','yyyymmdd'),4000);
insert into source_data values(2,to_date('20090104','yyyymmdd'),5000);
insert into source_data values(2,to_date('20090604','yyyymmdd'),1000);
insert into source_data values(2,to_date('20100104','yyyymmdd'),2000);
insert into source_data values(3,to_date('20091004','yyyymmdd'),3000);
insert into source_data values(3,to_date('20091104','yyyymmdd'),4000);
insert into source_data values(4,to_date('20090104','yyyymmdd'),5000);
insert into source_data values(4,to_date('20090604','yyyymmdd'),2000);
insert into client_data values(1,to_date('20110104','yyyymmdd'));
insert into client_data values(2,to_date('20090604','yyyymmdd'));
select c.client_id,
sum(CASE WHEN tdate < critical_date then amount else null end) used_before,
sum(CASE WHEN tdate >= critical_date then amount else null end) used_after
from source_data s
inner join client_data c on s.client_id = c.client_id
GROUP BY c.client_id;Thanks,
JonJonWat wrote:
I have a situation where there will be one "standard" set of data (source_data below) and I will need to get information on results for certain groups of clients > (client_data being an example). As straight SQL this would be very easy (see below) -- real world problem is a little more complicated. Can you give a more accurate representation of the real world problem?
A pointer in the right direction would be appreciated. If I could "pass the client data" as a string containing a SQL query, that would be even better, e.g.Passing a query as as string for execution is rarely the correct approach. This approach won't scale and most likely will result in maintenance and security problems.
If you can update your post to have a more accurate representation of the problem you are trying to solve you'll probably get an acceptable answer. Other than that all I can suggest is that you need to rethink the approach a bit. For example, if you know you need to filter out a set of data to join to your SOURCE_DATA table, why couldn't you do that inside the procedure?
SELECT c.client_id
, SUM
( CASE
WHEN tdate < critical_date
THEN amount
END
) AS used_before
, SUM
( CASE
WHEN tdate >= critical_date
THEN amount
END
) AS used_after
FROM source_data s
JOIN ( SELECT client_id
, MIN(<date column>) AS critical_date
FROM client_data
WHERE <where clause>
GROUP BY client_id
) c on s.client_id = c.client_id
GROUP BY c.client_id;
Maybe you are looking for
-
Did I Kill My eMac? Dead hard Drive? Help if you can!
I don't know what happened, but here's the setup (Please help if you can). emac with 10.4.6 768 RAM. I was going to copy a DVD using Toast. I put in the original and as usual, the computer grabbed the files, then opened the tray and asked me to put i
-
Network drives ejecting for no reason
I am setting up the office network and a few of the network drives keep ejecting for no reason. It's on a MAC/Windows network, and the Raid is a MEDEA brand RAID system. Thanks
-
Hello, Anyone can send me the report painter study material? I had screwed up with the report painter, don't know how to add a sub element in my Profit and Lost Consolidation report. Anyone have training material for CA705? Please give me a coy to s
-
If Facebook games say you need to install flash player but my phone service says it can't download f
My Facebook games say that I need to install flash player in order to play the games, but my windows phone says it doesn't support flash player
-
Hi Environment : Oracle database 10.2 R2 Operating system : Windows server 2003 R2 We have 3 disk partition and each partition we have put tablespace and another partition index tablespace to perform a database .