Refcursor IN
Hello All,
I'm using oracle 11gR2
One of our user wants all their LOVs maintained thru a UI. They have close to 50 LOV tables with no. of fields ranging from 5 to 10 with mostly different names.
I'm trying to write a generalized package to get the values, set the values and delete the values. We have permissions/privileges being checked before any of the DML being performed.
for the get procedure, I'm returning a refcursor when they pass in the table name (may not be ideal but....had to) and now starting to work on the set procedure (insert new values). Some of the issues that I'm trying to address is that the number of fields are not constant, the field names are different etc..
Would passing in a refursor work for this scenario? or is there better ways of doing it? Please shed some light.
Thanks in advance
NU
>
One of our user wants all their LOVs maintained thru a UI. They have close to 50 LOV tables with no. of fields ranging from 5 to 10 with mostly different names.
I'm trying to write a generalized package to get the values, set the values and delete the values. We have permissions/privileges being checked before any of the DML being performed.
Some of the issues that I'm trying to address is that the number of fields are not constant, the field names are different
>
First you need to quit focusing on the solution you seem to want to use (ref cursor) and get back to focusing on defining the problem and the requirements.
Once the complete requirements are available you can start looking for solutions that can be used.
>
I'm trying to write a generalized package
>
Well you can't do that if the requirements (column names and number of columns) for the 50 LOVs are different.
You either have to make the number and names of columns the same (using a view perhaps) or you will need more than one 'generic' set of code (that is, one for each set of LOVs that is consistent.
What UI are you talking about? A Java middle-tier? You may have a choice of where to put the business rules: in the middle tier so the back-end code is more generic or in the back-end.
I suggest you first need to review the 50 LOVs and determine how many similar sets of them that you have.
Some common attirbutes might be: 1) actual attribute name, 2) display name, 3) actual attribute value, 4) display value/format
The 'display' attributes are what the business user wants displayed and the name they want to use to refer to the attribute ('State Code'). The 'actual' attributes are what is really used in the back-end ('STATE_CD'). For generics you want to use a mapping table so you can map the business name to the actual name and break the dependency.
The key thing is what I said above. Focus on nailing down the requirements. The correct solution will be more readily apparent when you know for sure what all of the issues are.
Similar Messages
-
Hello,
I have a problem with refcursor in a project migrated from 10 to 11g.
I found this thread from a few years ago that talks about the same problem.
It has no final answer - is it ok to comment the st.close(); in callStoredFunction in the AMImpl.
Re: TP4 - View Object with REF CURSOR - SQLException
Please tell me if the suggested solution on that thread is fine, or ot will cause many unclosed statetements?
Thank you, NinaHello All,
I got the solution to the problem.
I was trying to surround the region component using the Structure pane. But instead drag and drop the strechable components on to the region.
Ex: Region got expanded 100% if I surround it with PanelStrechLayout with width and height set to 100%. But I didnit find this Panel StrechLayout when I try to surround it using Structure Pane.
Refer to this: http://www.oracle.com/technology/products/adf/patterns/layoutBestPractices.html
Thanks,
Melissa. -
Show refcursor returned by a PL/SQL function ?
Is it possible to show the results returned by a
PL/SQL function that returns a refcursor ?
In sqlplus it goes like this:
SQL> variable a refcursor;
SQL> execute :a := p_front.get_invoice_list;
PL/SQL procedure successfully completed.
SQL> print a;
INVOICE_ID CLIENT_ID INVOICE_D
101 100 01-APR-06
100 100 06-APR-06
If not, this would be on the top of my wishlist...
By the way: you did a good job on this tool!
Regards,
WillemIs it possible to show the results returned by a
PL/SQL function that returns a refcursor ?
In sqlplus it goes like this:
SQL> variable a refcursor;
SQL> execute :a := p_front.get_invoice_list;
PL/SQL procedure successfully completed.
SQL> print a;
INVOICE_ID CLIENT_ID INVOICE_D
101 100 01-APR-06
100 100 06-APR-06
If not, this would be on the top of my wishlist...
By the way: you did a good job on this tool!
Regards,
Willem -
Having issues with bind variable refcursor
Hi,
I have a procedure which returns just the list of employees from the emp table.
while executing this package, it gives me an error
Ex:
sql> variable cur refcursor;
sql> exec emp.getemplist(:cur);
error:
not all variables bound
Please let me know what is wrong here.
Thanks
Manjumanjukn wrote:
package is a simple one..
Exact Oracle version? Works fine on 10.2.0.4.0:
SQL> create or replace package body emp_pkg is
2 PROCEDURE getemplist (result_cursor OUT sys_refcursor)
3 IS
4 begin
5 open result_cursor for select * from emp where deptno=10;
6 end getemplist;
7 end emp_pkg;
8 /
Package body created.
SQL> variable cur refcursor;
SQL> exec emp_pkg.getemplist(:cur);
PL/SQL procedure successfully completed.
SQL> print cur
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7839 KING PRESIDENT 17-NOV-81 5000 10
7934 MILLER CLERK 7782 23-JAN-82 1300 10
SQL> SY. -
How to call a procedure with refcursor from another plsql unit
example I created a pkg with the a procedure that returns a REFCURSOR.
Now I need to call this procedure from another pkg and use the refcursor values in other pkg.
Help please.......
PROCEDURE CustomerSite_Get (p_Registry IN VARCHAR2,
p_CustomerNumber IN VARCHAR2, p_Cursor IN OUT t_cursor);
PROCEDURE CustomerSite_Get (p_Registry IN VARCHAR2,
p_CustomerNumber IN VARCHAR2, p_Cursor IN OUT t_cursor)
IS
-- 0903: Include BillToName
BEGIN
OPEN p_Cursor FOR
SELECT S.LOCATION CustomerSite, S.SITE_USE_ID CustomerSiteID, C.CUSTOMER_NAME BillToName
FROM RA_CUSTOMERS C,
RA_ADDRESSES A,
RA_SITE_USES S,
UWA_REGISTRY R,
UWA_REGISTRY_BILL_TO B
WHERE C.CUSTOMER_ID = A.CUSTOMER_ID
AND A.ADDRESS_ID = S.ADDRESS_ID
AND S.SITE_USE_ID = B.SITE_USE_ID
AND R.REGISTRY_ID = B.REGISTRY_ID
AND B.TRIP_BILLING != 'N'
AND R.DELETE_FLAG != 'Y'
AND R.Registry = p_Registry
AND R.CUSTOMER_NUM = p_CustomerNumber
ORDER BY S.LOCATION;
END CustomerSite_Get;
thanks,
Anitha.
Edited by: user521218 on May 6, 2009 1:24 PMHi Anitha,
try this,
-- PKG_A
Procedure CustomerSite_Get( p_Registry IN Varchar2
, p_CustomerNumber IN Varchar2
, p_Cursor IN OUT t_cursor) Is
Begin
PKG_B.CustomerSite_Get( p_Registry
, p_CustomerNumber
, p_Cursor );
End;
-- PKG_B
Procedure CustomerSite_Get(p_Registry IN Varchar2
,p_CustomerNumber IN Varchar2
,p_Cursor IN OUT t_cursor) Is
Begin
Open p_Cursor For
SELECT S.LOCATION CustomerSite
,S.SITE_USE_ID CustomerSiteID
,C.CUSTOMER_NAME BillToName
FROM RA_CUSTOMERS C
,RA_ADDRESSES A
,RA_SITE_USES S
,UWA_REGISTRY R
,UWA_REGISTRY_BILL_TO B
WHERE C.CUSTOMER_ID = A.CUSTOMER_ID
AND A.ADDRESS_ID = S.ADDRESS_ID
AND S.SITE_USE_ID = B.SITE_USE_ID
AND R.REGISTRY_ID = B.REGISTRY_ID
AND B.TRIP_BILLING != 'N'
AND R.DELETE_FLAG != 'Y'
AND R.Registry = p_Registry
AND R.CUSTOMER_NUM = p_CustomerNumber
Order BY S.LOCATION;
End CustomerSite_Get;regards,
Christian Balz -
How can I execute this procedure in sql developer, cursortype is refcursor
PROCEDURE GET_CNTRY(CNTRY_NME_IN IN VARCHAR2 DEFAULT NULL,
QRY_RSLT_OUT OUT CURSORTYPE) AS
BEGIN
OPEN QRY_RSLT_OUT FOR
select
CNTRY_NME,
FRGN_CNTRY_CDE,
INV_VEH_CNTRY_CDE,
FRGN_CNCY_CDE,
WTHH_PCT_COLA_CDE
FROM
CNTRY
WHERE
CNTRY_NME = NVL(CNTRY_NME_IN,CNTRY_NME);
END GET_CNTRY;In SQL Developer run the following code as script (You need to hit F5 to run it as script).
var rc refcursor
exec get_cntry (<give your cntry_nme_in>, :rc)
print :rc -
Looping through a refcursor to get list of dates as a string
hi,
i have a simple procedure which gives me list of from dates and to dates
i need to get the dates a comma separated dates
i am not sure if this can be done directly by doing a for loop on the refcursor or i have to fetch it into a record/array and then concatenate with comma or is there anything else that can be done.
i tried out some stuff like below
ps help me out
the procedure that retruns the list of dates is
CREATE OR REPLACE procedure SALUSER.prm_sp_rpt_payslip_lop_dates(p_empid in int,p_tran_year in int,p_tran_month in integer,o_dates out sys_refcursor)
as
begin
open o_dates for select to_char(PHL_LOP_FROM,'DD-Mon-YYYY'),to_char(PHL_LOP_TO,'DD-Mon-yyyy')
from prm_h_lop
where phl_emp_id=p_empid
and phl_tran_year=p_tran_year
and phl_Tran_month=p_tran_month;
end;
/i need my o/p as
dates :<date1>,<date2>...etcregards,Maybe sth. like
SQL> var cur refcursor
SQL> declare
cr sys_refcursor;
procedure prm_sp_rpt_payslip_lop_dates (cr in out sys_refcursor)
as
begin
open cr for select hiredate from emp;
end prm_sp_rpt_payslip_lop_dates;
begin
prm_sp_rpt_payslip_lop_dates(cr);
open :cur for select 'Dates: ' || column_value dates from xmltable('string-join(//text(), ", ")' passing xmltype(cr));
end;
PL/SQL procedure successfully completed.
SQL> print cur
DATES
Dates: 17-Dec-1980, 20-Feb-1981, 22-Feb-1981, 02-Apr-1981, 28-Sep-1981, 01-May-1
981, 09-Jun-1981, 19-Apr-1987, 17-Nov-1981, 08-Sep-1981, 23-May-1987, 03-Dec-198
1, 03-Dec-1981, 23-Jan-1982
1 row selected. -
How to read the data from a refcursor
Hi all,
Here my program . I'm calling pr_test into another program there i need to read the values from refcursor of pr_test program . I dont want use all the values in my second program I need to pass empno and job only.
pls help me out how to read this?
package pg_test
is
type curvartype is ref cursor;
procedure pr_test(p_empno in number, o_curvar_out curvartype);
end;
package pg_test is
procedure pr_test( o_curvar_out curvartype)
is
begin
open o_curvar_out for
select * from emp;
end loop;
end;
end;Thanks,
Venkat.I dont want use all the values in my second program I need to pass empno and job only.Since your cursor gets all the columns (using the * is not a good way to code the cursor), that is what your other program will get when it calls pr_test procedure. You will have to FETCH all the columns in that other procedure and discard the ones you do not need.
Alternatively, change the code of cursor to select only the columns you would actually need. -
Issue with IN parameter of Oracle Procedure returning two RefCursors...
Hi all,
I'm having a nightmare with an Oracle procedure that takes one input parameter and returns two RefCursors as outputs. I recently got help in this forum getting a procedure to work that took no inputs but returned two refcursors and that's still working fine. So, for my current issue I have a procedure defined as follows:
PROCEDURE getQueueInfo(domainKey char, importQueues OUT ODPNet.refcur, exportQueues OUT ODPNet.refcur) IS
BEGIN
OPEN importQueues FOR SELECT
source_key, source_applid,
import_status(source_key) as status,
time_added, time_processed
FROM wm_import_source_header
WHERE source_id = domainKey
ORDER BY source_key DESC;
OPEN exportQueues FOR SELECT
h.source_key, d.source_applid,
export_status(h.source_key) as status,
d.source_wire_code, d.destination_wire_code, h.time_added,
h.time_transmitted
FROM wm_export_source_header h, wm_export_source_data d
WHERE h.source_key = d.source_key
and d.source_id = domainKey
ORDER BY h.source_key DESC;
END getQueueInfo;This is defined within a package called ODPNet as with my previous procedure and all works fine (I can execute within Oracle SQL Developer and it returns the expected results). Within my .NET application my code is as follows:
try
using (OracleConnection conn = new OracleConnection(connString))
using (OracleCommand comm = new OracleCommand())
comm.CommandText = "ODPNet.getQueueInfo";
comm.CommandType = CommandType.StoredProcedure;
comm.Connection = conn;
OracleParameter domainKey = new OracleParameter();
OracleParameter importQueues = new OracleParameter();
OracleParameter exportQueues = new OracleParameter();
domainKey.OracleDbType = OracleDbType.Char;
importQueues.OracleDbType = OracleDbType.RefCursor;
exportQueues.OracleDbType = OracleDbType.RefCursor;
domainKey.Value = "UKBD72";
domainKey.Direction = ParameterDirection.Input;
importQueues.Direction = ParameterDirection.Output;
exportQueues.Direction = ParameterDirection.Output;
comm.Parameters.Add(domainKey);
comm.Parameters.Add(importQueues);
comm.Parameters.Add(exportQueues);
conn.Open();
comm.ExecuteNonQuery();
OracleDataReader dr1 = ((OracleRefCursor)importQueues.Value).GetDataReader();
OracleDataReader dr2 = ((OracleRefCursor)exportQueues.Value).GetDataReader();
if (dr1.HasRows)
while (dr1.Read())
result6 += dr1["source_applid"].ToString() + "<br>";
else
result6 += "No Rows";
if (dr2.HasRows)
while (dr2.Read())
result7 += dr2["source_applid"].ToString() + "<br>";
else
result7 += "No Rows";
catch (Exception ex)
result6 = ex.ToString();
}The value I want to submit as the IN parameter of the procedure is "UKBD72". but I'm really not sure how to apply this and then return my two refcursors into separate datareaders (except for the input parameter stuff the code above is exactly what I did with the other procedure that returned two ref cursors and still works fine). When I run this code I get no errors, I just get told that each DataReader has no rows returned, which shouldn't be right.
Any help with this would be hugely appreciated.
Cheers,
SebSorry folks, after staring at this over and over, eventually going to sleep and coming back to it with some fresh eyes I realised I was just being a complete idiot - I was feeding the procedure different data in the .NET app than I was when testing in Oracle SQL Developer. Low and behold once I gave it the right data it worked!
Silly me... -
Problem with IN OUT Number, OUT RefCursor for EF Model StoredProcedure call
When I call a stored procedure using the EF Model and implicit binding via App.config which has three parameters i.e. 'IN Number', 'IN OUT Number' and 'OUT sys_refcursor', the 'IN OUT Number' is not set correctly on return from the procedure.
The 'IN OUT Number' is for an error code and is set to 12345 on input and is then set to 54321 by stored proceedure for return.
The correct value is returned when the call is via OracleCommand using implicit binding via App.config but remains unchanged when the call is via EF Model and implicit binding via App.config.
The ODP documentaion says you cannot have two OUT RefCursors when using EF Model but does not say you cannot have OUT RefCursor and other non-RefCursor OUT parameters.
The idea behind this type of procedure is to have multiple input parameters to configure and filter the stored procedure and an output result set that consists of an error code and a collection of result rows in a RefCursor.
I am using 11g R2 database and ODP 11g Release 2 (11.2.0.2.30) and ODAC Entity Framework beta.
The query uses Scott/tiger schema with parameters department code, error code and list of employees for department.
code:
PROCEDURE TEST_PARAMETERS
DEPT IN NUMBER,
ERROR_CODE IN OUT NUMBER,
DEPT_EMPLOYEES OUT sys_refcursor
AS
BEGIN
DBMS_OUTPUT.PUT_LINE('DEPT = [' || DEPT || ']');
DBMS_OUTPUT.PUT_LINE('ERROR_CODE = [' || ERROR_CODE || ']');
OPEN DEPT_EMPLOYEES for SELECT empno, ename from emp where deptno = DEPT;
-- set ERROR_CODE for return
ERROR_CODE := 54321;
END TEST_PARAMETERS;
The App.config for implicit RefCursor binding is as follows ...
<oracle.dataaccess.client>
<settings>
<add name="SCOTT.TEST_PARAMETERS.RefCursor.DEPT_EMPLOYEES"
value="implicitRefCursor bindinfo='mode=Output'" />
<add name="SCOTT.TEST_PARAMETERS.RefCursorMetaData.DEPT_EMPLOYEES.Column.0"
value="implicitRefCursor metadata='ColumnName=EMPNO;
BaseColumnName=EMPNO;BaseSchemaName=SCOTT;BaseTableName=EMP;
NATIVE_DATA_TYPE=number;ProviderType=Int32;
PROVIDER_DB_TYPE=Int32;DataType=System.Int32;
ColumnSize=4;NumericPrecision=10;
NumericScale=3;AllowDBNull=false;IsKey=true'" />
<add name="SCOTT.TEST_PARAMETERS.RefCursorMetaData.DEPT_EMPLOYEES.Column.1"
value="implicitRefCursor metadata='ColumnName=ENAME;
BaseColumnName=ENAME;BaseSchemaName=SCOTT;BaseTableName=EMP;
NATIVE_DATA_TYPE=varchar2;ProviderType=Varchar2;
PROVIDER_DB_TYPE=String;DataType=System.String;
ColumnSize=10;AllowDBNull=true'" />
</settings>
</oracle.dataaccess.client>
When the call is via OracleCommand both outputs are correct i.e. ERROR_CODE gets set to 54321 and the correct emplyees for department 10 are returned
code:
private void TestParametersViaOracleCommand()
try
string constr = "DATA SOURCE=ORCL;PASSWORD=tiger;PERSIST SECURITY INFO=True;USER ID=SCOTT";
OracleConnection con = new OracleConnection(constr);
con.Open();
OracleCommand cmd = con.CreateCommand();
OracleDataAdapter adapter = new OracleDataAdapter(cmd);
DataSet ds = new DataSet();
cmd = con.CreateCommand();
cmd.CommandText = "SCOTT.TEST_PARAMETERS";
cmd.CommandType = CommandType.StoredProcedure;
cmd.BindByName = true;
OracleParameter dept = cmd.Parameters.Add("DEPT",
OracleDbType.Int32,
ParameterDirection.Input);
dept.Value = 10;
OracleParameter errorCode = cmd.Parameters.Add("ERROR_CODE",
OracleDbType.Int32,
ParameterDirection.InputOutput);
errorCode.Value = 12345;
// RefCursor output parameter implicitly bound via App.Config
adapter = new OracleDataAdapter(cmd);
adapter.Fill(ds);
// should be 54321 and is ...
Console.WriteLine("after call errorCode.Value = " + errorCode.Value);
Console.WriteLine("list size = {0}", ds.Tables[0].Rows.Count);
// only one table
DataTable deptEmployeesTable = ds.Tables[0];
for (int ii = 0; ii < deptEmployeesTable.Rows.Count; ++ii)
DataRow row = deptEmployeesTable.Rows[ii];
Console.WriteLine("EMPNO: " + row[0] + "; ENAME: " + row[1]);
catch (Exception ex)
// Output the message
Console.WriteLine(ex.Message);
if (ex.InnerException != null)
// If any details are available regarding
// errors in the app.config, print them out
Console.WriteLine(ex.InnerException.Message);
if (ex.InnerException.InnerException != null)
Console.WriteLine(
ex.InnerException.InnerException.Message);
output:
before call errorCode.Value = 12345
after call errorCode.Value = 54321 (should be 54321!)
list size = 3
EMPNO: 7782; ENAME: CLARK
EMPNO: 7839; ENAME: KING
EMPNO: 7934; ENAME: MILLER
However when call is via EF Model the correct employees are returned but the ERROR_CODE parameter is unchanged on return.
code:
private void TestParametersViaEFModel()
var context = new ScottEntities();
Decimal dept = 10;
ObjectParameter errorCodeParameter = new ObjectParameter("ERROR_CODE", typeof(decimal));
errorCodeParameter.Value = 12345;
Console.WriteLine("before call errorCodeParameter.Value = " + errorCodeParameter.Value);
// RefCursor output parameter implicitly bound via App.Config
var queryResult = context.TestParameters(dept, errorCodeParameter);
// should be 54321 and is ...
Console.WriteLine("after call errorCodeParameter.Value = " + errorCodeParameter.Value + " (should be 54321!)");
List<TestParameters_Result> deptEmployeesList = queryResult.ToList();
Console.WriteLine("list size = {0}", deptEmployeesList.Count);
for (int ii = 0; ii < deptEmployeesList.Count; ++ii)
TestParameters_Result result = deptEmployeesList[ii];
Console.WriteLine("EMPNO: " + result.EMPNO + "; ENAME: " + result.ENAME);
output:
after call errorCodeParameter.Value = 12345 (should be 54321!)
list size = 3
EMPNO: 7782; ENAME: CLARK
EMPNO: 7839; ENAME: KING
EMPNO: 7934; ENAME: MILLER
errorCodeParameter.Value IS NOT CORRECTLY RETURNED!
If there is no RefCursor then both outputs are identical i.e. the parameters are being passed in correctly and the problem is not with the 'IN OUT' parameter. Also same thing is true if ERROR_CODE is made an OUT parameter. Also tried changing the position of the parameter in the list but still get same problem i.e. works when OracleCommand but not when EF Model. Also note that the RefCursor results are correct for both types of call i.e. it is just a problem with the value of the 'IN OUT ERROR_CODE' parameter.
I have also enabled debug stepping from Visual Studio 2010 into Oracle PL/SQL as described in
"http://st-curriculum.oracle.com/obe/db/hol08/dotnet/debugging/debugging_otn.htm"
and have verified by inspection that the correct values are being passed into the stored procedure and that the stored procedure is definitely setting the ERROR_CODE to 54321 prior to return.
Most of our stored procedures have these type of parameters i.e. several IN params to configure the work of the stored procedure, an OUT NUMBER parameter for the Error_Code if any and a RefCursor for the result list.
Is this a bug or a feature? Am I doing something wrong?Just to clarify ....
If the ERROR_CODE parameter is made an 'OUT' parameter instead of an 'IN OUT' parameter the correct return value is given for the OracleCommand invocation but the WRONG value is still returned for the EF Model invocation i.e. just changing the parameter from 'IN OUT' to just 'OUT' does not fix the problem. -
Using Refcursor in Callable Statement without using the Oracle Drivers
Hello all,
Is there anyway to have a stored procedure (Oracle 8i) return a refcursor to my CallableStatement without using the Oracle Thin drivers (i'm now using jdbcodbc). I've tried registering my out parameter with every possible type i can think of...REF, JAVA_OBJECT, OTHER, etc. but with no luck.
Help!!!!Certainly...I connect to the database using the
jdbcodbc driver and when i execute any of the code, i
get the following error:
java.sql.SQLException: [Oracle][ODBC][Ora]ORA-06550:
line 1, column 7:
PLS-00306: wrong number or types of arguments in call
to 'PVISUAL_GET'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
It's bombing on the line that i attempt to register
OracleTypes.CURSOR. It works fine when i use the
oracle thin drivers, but i want to get this puppy
working with the JdbcOdbcDriver. Here's the code:
CallableStatement dbCall =
nt dbCall =
(CallableStatement)connection.prepareCall("{ call
PAK_VISUAL_GET.pvisual_get(?, ?, ?, ?, ?, ?) }");
dbCall.setString(1, sessionKey);
dbCall.setInt(2,
l.setInt(2, Integer.parseInt(storedVizID));
dbCall.registerOutParameter(3,
arameter(3, OracleTypes.CURSOR);
dbCall.registerOutParameter(4,
arameter(4, OracleTypes.NUMBER);
dbCall.registerOutParameter(5,
arameter(5, OracleTypes.VARCHAR);
dbCall.registerOutParameter(6,
arameter(6, OracleTypes.NUMBER);
dbCall.execute();when you don't use oracle thin driver, you cannot use the OracleTypes. but, instead use the java.sql.Types values.Replace dbCall.registerOutParameter(3, OracleTypes.CURSOR); with
dbCall.registerOutParameter(3,java.sql.Types.OTHER). things should be fine.
Ganesh -
How to pass a refcursor to a java stored proc
Hi all,
Please forgive me as I am new to Java and JDeveloper....
I want to pass a refcursor to a java stored proc. Does anyone know how to accomplish this?
Thanks,
dayneoHi,
As Avi has indicated, you can map ref cursor to java.sql.ResultSet
here are Call Specs and a code snippet from chapter 3 in my book.
procedure rcproc(rc OUT EmpCurTyp)
as language java
name 'refcur.refcurproc(java.sql.ResultSet[])';
function rcfunc return EmpCurTyp
as language java
name 'refcur.refcurfunc() returns java.sql.ResultSet';
* Function returning a REF CURSOR
public static ResultSet refcurfunc () throws SQLException
Connection conn = null;
conn = DriverManager.getConnection("jdbc:oracle:kprb:");
((OracleConnection)conn).setCreateStatementAsRefCursor(true);
Statement stmt = conn.createStatement();
((OracleStatement)stmt).setRowPrefetch(1);
ResultSet rset = stmt.executeQuery("select * from EMP order by empno");
// fetch one row
if (rset.next())
System.out.println("Ename = " + rset.getString(2));
return rset;
Kuassi -
How to call refcursor in oracle forms
How to fetch a column in oracle form by using DB prcedure's refcursor.
There was not isseu to create and call the procedure in oracle forms but when I was trying to fetch
a particular column and assing the value to text box, I got an error invalid reference.DECLARE
TYPE emp_ref_cur IS REF CURSOR;
v_emp_curs_qry emp_ref_cur;
v_sql VARCHAR2 (32767);
v_column1 VARCHAR2 (32767) := 'EMPNO';
v_column2 VARCHAR2 (32767) := 'ENAME';
TYPE emp_rec IS RECORD (
empno emp.empno%TYPE,
ename emp.ename%TYPE
TYPE emp_rec_ty IS TABLE OF emp_rec;
v_emps emp_rec_ty;
BEGIN
v_sql := 'select ' || v_column1 || ',' || v_column2 || ' from emp ';
OPEN v_emp_curs_qry FOR v_sql;
FETCH v_emp_curs_qry
BULK COLLECT INTO v_emps;
CLOSE v_emp_curs_qry;
FOR i IN v_emps.FIRST .. v_emps.LAST
LOOP
DBMS_OUTPUT.put_line ('Empno =' || v_emps (i).empno);
DBMS_OUTPUT.put_line ('Ename =' || v_emps (i).ename);
END LOOP;
END;
/i hope this is what you want .. -
Mapping refcursors with object types in a procedure
Hi all,
I need some help regarding the mapping of refcursors with object types .
Example: Procedure "A" has object types as input/output parameters which lies in the Web Method Application as a API.
We are creating a procedure "B" which has ref cursors as input/ouput parameters
which will map to the Procedure "A"'s object type parameters.
It will be highly needful for the solution.
Regards
SaugataYour pseudocode has a lot of steps in it, but you didn't say which step you need help with. Since I already covered going from a nested table type to a refcursor, I'll assume you want an example that goes the other way now, like from a refcursor to a nested table type. Here's one ...
SQL>
SQL>
SQL> set serveroutput on
SQL>
SQL> create type nested_table_type as table of varchar2(14) ;
2 /
Type created.
SQL> show errors
No errors.
SQL>
SQL>
SQL> create function func
2 ( p_cursor in sys_refcursor )
3 return nested_table_type
4 as
5 v_nested_table nested_table_type ;
6 begin
7
8 fetch p_cursor bulk collect into v_nested_table ;
9 return( v_nested_table );
10
11 end;
12 /
Function created.
SQL> show errors
No errors.
SQL>
SQL> select func( cursor( select dname from dept ) ) as nested_table from dual ;
NESTED_TABLE
NESTED_TABLE_TYPE('ACCOUNTING', 'RESEARCH', 'SALES', 'OPERATIONS')If your cursor selects objects instead of simple data types, the code is pretty much the same.
SQL> create type object_type as object ( c1 varchar2(14), c2 varchar2(13) );
2 /
Type created.
SQL> show errors
No errors.
SQL>
SQL> create type nested_table_type as table of object_type ;
2 /
Type created.
SQL> show errors
No errors.
SQL>
SQL>
SQL>
SQL> create function func
2 ( p_cursor in sys_refcursor )
3 return nested_table_type
4 as
5 v_nested_table nested_table_type ;
6 begin
7
8 fetch p_cursor bulk collect into v_nested_table ;
9 return( v_nested_table );
10
11 end;
12 /
Function created.
SQL> show errors
No errors.
SQL>
SQL> select
2 func( cursor( select object_type( dname, loc ) from dept ) ) as object_table
3 from dual ;
OBJECT_TABLE(C1, C2)
NESTED_TABLE_TYPE
( OBJECT_TYPE('ACCOUNTING', 'NEW YORK'),
OBJECT_TYPE('RESEARCH', 'DALLAS'),
OBJECT_TYPE('SALES', 'CHICAGO'),
OBJECT_TYPE('OPERATIONS', 'BOSTON')
)(NB I manually reformated the query results for clarity). -
Refcursor returning image (BLOB type) from database
Hi,
Process : Invoke activity takes ID as input parameter and passes it to partner link (db adapter) which executes stored proc returning a ref cursor. SQL statement in stored proc - ref cursor has a column with BLOB type.
Problem : Unable to return an image (defiined as BLOB type in database) through refcursor in BPEL.
Error : Unable to convert XSD element Column whose JDBC type is BLOB to a corresponding XML document element.
ORABPEL-11087
XSD :
<complexType name="RowSet">
<sequence>
<element name="Row" minOccurs="0" maxOccurs="unbounded" nillable="true">
<complexType>
<sequence>
<element name="Column" maxOccurs="unbounded" nillable="true">
<complexType>
<simpleContent>
<extension base="string">
<attribute name="name" type="string" use="required"/>
<attribute name="sqltype" type="string" use="required"/>
</extension>
</simpleContent>
</complexType>
</element>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
Need Solution : To get an image (of BLOB type) into BPEL using ref cursor.
Please let me know if you need any more information to get it working.
Thanks and Regards,
RakeshHi Rakesh,
There are some notes you might want to refer :
Note.423909.1 'java.lang.NumberFormatException' Signaled When Using Oracle LOB Family Column Types In ODI Datastores And Integration Interfaces:
Note.423982.1 An "ORA-17410 No More Data to Read From Socket" Error Has Been Signaled From An ODI (Sunopsis) Integration Interface:
Note.423768.1 Using Oracle Large Object (LOB) Datatype Columns In ODI Integration Interfaces:
Note.744101.1 ORA-22835 Message Signaled When Using The OdiSqlUnload Tool In ODI:
Note.424658.1 "ORA-00942" Message With Oracle Large Object (LOB) Datatype Fields In ODI Integration Interfaces:
Note.423992.1 Using Oracle LONG Datatype Columns In ODI(Sunopsis):
Note.424107.1 ODI Integration Interfaces And The Use Of Oracle Spatial Datatypes In Source And Target Datastores:
Hope this helps!
Cheers
Anirudh Pucha -
Error in calling Stored procedure returns REFCURSOR
Hi,
I've written a oracle stored procedure returning REFCURSOR. say,extractorderdespatchconfirmsp('','','','','','H1','ACG','','','','',:rc).
Following statement throwing error.
CallableStatement cs = con.PrepareCall("{extractorderdespatchconfirmsp('','','','','','H1','ACG','','','','',:rc)}");
rs = cs.executeQuery();
Could you rectify this problem and give me the currect code.
riyazYour naming convention leaves a little to be desired.
String command = "{CALL extractorderdespatchconfirmsp(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}";
CallableStatement cstmt = conn.prepareCall(command);
//set the variables here ie, dates need to be a timestamp format. use set timestamp.
cstmt.setInt(1, 2);
cstmt.setString(2, "a string");
cstmt.setInt(3, 0);
//for return values
cstmt.registerOutParameter(3, Types.INTEGER);
cstmt.registerOutParameter(2, Types.INTEGER);
cstmt.execute();
int status = cstmt.getInt(3);
int status2 = cstmt.getInt(2);
cstmt.close();
It took me awhile too to get JDBC to call these right.
Maybe you are looking for
-
"^1" showing up everywhere in iTunes
Hello, I have a pretty weird problem. I've been an iTunes user for years and years and have never encountered anything like this before. Last night, I was using iTunes like normal, listening to music. When I went to skip to the next track, suddenly m
-
Hi, I am using dbms_sqltune package for sql tuning in 10g. In DBMS_SQLTUNE.CREATE_TUNING_TASK one paramter is bind_list.i want to pass the parameter for sql.suppose two dates.Pls tell me how can i do. Thanks Reena
-
Missing plug in, upgrade plug in
Hello, I have CS4, and I mainly use Photoshop and InDesign. I tried to open an InDesign file the other day and I can't. I've never had trouble with this before. This is the message I get: The document "..." uses one or more plug-ins which are not cur
-
Is there option to lock notes in Address Book. Say that with a contact write a note, and after I can see this note only when enter the code? Maybe some master code for all the notes in address book? If not, it would be a great option for the upgrade.
-
Question about cisco nac agent
When I deploy Cisco NAC appliance, the main different between using cisco nac appliance with or without agent? I see Cisco NAC agent has two function: scan and remediation. If Cisco NAC appliance without agent, Cisco NAC server will scan device and r