Calling procedure with 4 output varchar2 gets corrupted (via SQLExecDirect)
I have a procedure:
create or replace procedure
cme.GetNominalIndividualDetails(iNominalIndexID in
number,sSurname out varchar2,sForenames out varchar2,sCRONumber
out varchar2,dtDOB out date) AS
begin
select Surname,Forenames,CRONumber,DOB into
sSurname,sForenames,sCRONumber,dtDOB from v_NominalIndividual
where NominalIndexID = iNominalIndexID;
exception
when no_data_found then
begin
sSurname:=null;
sForenames:=null;
dtDOB:=null;
sCRONumber:=null;
end;
end;
When I call this procedure from code I always get corrupt
strings comming back (it looks like they are not null
terminated) using ODBC with VC++ using Bindparameters with
SQLExecDirect.
The latest odbc driver is no help..
If anyone has a solution please let me know... (it works fine
with our Sybase / MS SQL server databases).
I am persuming it is a bug in the oracle odbc ??
Matt.
Can you email at [email protected]
Thanks.
fyi
Related to the solution/workaround posted by Luc.
see "Do Oracle's JDBC drivers support PL/SQL tables/result sets/records/booleans? "
at http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-faq-090281.html#34_05
regards
Jan Vervecken
Similar Messages
-
Call procedure with named parameters
Call procedure with positional parameters works, but with named parameters gives an ORA-907.
This post seems similar: Re: Error with report - pkg and bind var
Run as a script:
set echo on
call dbms_stats.delete_table_stats ('ZZZMIG', 'CHAINED_ROWS', cascade_columns=>true, no_invalidate=>false);
call dbms_stats.delete_table_stats ('ZZZMIG', 'CHAINED_ROWS');
begin dbms_stats.delete_table_stats ('ZZZMIG', 'CHAINED_ROWS', cascade_columns=>true, no_invalidate=>false); end;
gives:
set echo on
call dbms_stats.delete_table_stats ('ZZZMIG', 'CHAINED_ROWS', cascade_columns=>true, no_invalidate=>false)
Error starting at line 2 in command:
call dbms_stats.delete_table_stats ('ZZZMIG', 'CHAINED_ROWS', cascade_columns=>true, no_invalidate=>false)
Error report:
SQL Error: ORA-00907: missing right parenthesis
00907. 00000 - "missing right parenthesis"
*Cause:
*Action:
call dbms_stats.delete_table_stats ('ZZZMIG', 'CHAINED_ROWS')
call dbms_stats.delete_table_stats succeeded.
begin dbms_stats.delete_table_stats ('ZZZMIG', 'CHAINED_ROWS', cascade_columns=>true, no_invalidate=>false); end;
anonymous block completed
I like the idea of using call, because the procedure name appears in the feedback - useful in longer scripts.
I'm using SQL Developer Version 1.5.1 Build MAIN-5440
on Windows XP SP3
with database EE 10.2.0.3CALL is a SQL command which executes a routine
(procedure/function)
http://download-uk.oracle.com/docs/cd/B19306_01/server
.102/b14200/statements_4008.htm
whereas EXECUTE is a SQL*Plus command which executes
a single PL/SQL statement
http://download-uk.oracle.com/docs/cd/B19306_01/server
.102/b14357/ch12022.htm#i2697931
Message was edited by:
Jens PetersenThank you very much, esp. for the links! -
Getting error while Calling Oracle Stored Procedure with output Parameter
HI All,
From long days i am working on this but i unable to solve it.
Even i have studied so many forums in SAP but i didn't find the solution.
I am calling Oracle Store procedure with 3 inputs and 1 output without cursor.
Store Procedure:-
CREATE OR REPLACE PROCEDURE PDS.send_rm
IS
proc_name VARCHAR2(64) := 'send_rm';
destination_system VARCHAR2(32) := 'RAWMAT';
xml_message VARCHAR2(4000);
status_code INTEGER;
status_message VARCHAR2(128);
debug_message VARCHAR2(128);
p_ret INTEGER;
BEGIN
DBMS_OUTPUT.PUT_LINE( proc_name || ' started' );
xml_message := '<RAW_MATERIAL>'||
'<BAR_CODE>10000764601</BAR_CODE>'||
'<MATERIAL>1101448</MATERIAL>'||
'<VENDOR_CODE/>'||
'<PRODUCTION_DATE>0000-00-00</PRODUCTION_DATE>'||
'<EXPIRE_DATE>0000-00-00</EXPIRE_DATE>'||
'<BATCH/>'||
'<PO_NUM/>'||
'<MATERIAL_DESCRIPTION>POWER SUPPLY</MATERIAL_DESCRIPTION>'||
'<SPEC_NAME/>'||
'<STOCK_CODE>BSW-JH</STOCK_CODE>'||
'<INSPECTION_LOT>00</INSPECTION_LOT>'||
'<USAGE_DECISION_CODE/>'||
'<MATERIAL_GROUP>031</MATERIAL_GROUP>'||
'</RAW_MATERIAL>';
dbms_output.put_line('XML '||xml_message);
-- vp_interface.load_rawmat@cnprpt1_pds(SYSDATE, destination_system,
-- xml_message, p_ret);
vp_interface.load_rawmat(SYSDATE, destination_system,
xml_message, p_ret);
dbms_output.put_line('Return Code '||p_ret);
COMMIT;
EXCEPTION
WHEN OTHERS THEN
status_code := SQLCODE;
status_message := SUBSTR(SQLERRM, 1, 64);
-- Extract_Error_Logger(proc_name, 'LOCAL', SYSDATE, -999,
-- status_message, 0, debug_message);
ROLLBACK;
END send_rm;
And while i am calling this Store procedure in MII, I am facing error.
I have tried different ways but didnt solved
In SQL Query, i kept mode as: FixedQueryOutput
Can anyone tell me or send code for calling above store procedure
And onemore thing, While creating store procedure in Oracle for MII. Do we need to Create output parameter as cursor or normal.
Thanks,
Kind Regards,
Praveen Reddy MHi Praveen
Our wrapper was created because we could not modify the procedure we call (it was not returning a cursor).
CREATE OR REPLACE PROCEDURE CHECK_PUT_IN_USE
(STRCMPNAME in varchar2,
STRSCANLABEL in varchar2,
RCT1 out SYS_REFCURSOR
AS
charDispo Char(1);
charStatus Char(1);
intCatNo Integer;
charCatDispo Char(1);
strCatQual VarChar2(2);
strCatDesc VarChar2(30);
strMsg VarChar2(128);
BEGIN
qa.check_put_in_use@AR(STRCMPNAME,
STRSCANLABEL,
charDispo,
charStatus,
intCatNo,
charCatDispo,
strCatQual,
strCatDesc,
strMsg);
OPEN RCT1
FOR Select charDispo,charStatus,charDispo,charStatus,intCatNo,charCatDispo,strCatQual,strCatDesc,strMsg from Dual;
END;
Hope this helps
Regards
Amrik
then with a FixedQueryWithOutput
call mixar.qasap.wrapper_update_put_in_use('[Param.1]','[Param.2]',[Param.3],?)
Hope this helps. -
Calling a Stored Procedure with output parameters from Query Templates
This is same problem which Shalaka Khandekar logged earlier. This new thread gives the complete description about our problem. Please go through this problem and suggest us a feasible solution.
We encountered a problem while calling a stored procedure from MII Query Template as follows-
1. Stored Procedure is defined in a package. Procedure takes the below inputs and outputs.
a) Input1 - CLOB
b) Input2 - CLOB
c) Input3 - CLOB
d) Output1 - CLOB
e) Output2 - CLOB
f) Output3 - Varchar2
2. There are two ways to get the output back.
a) Using a Stored Procedure by declaring necessary OUT parameters.
b) Using a Function which returns a single value.
3. Consider we are using method 2-a. To call a Stored Procedure with OUT parameters from the Query Template we need to declare variables of
corresponding types and pass them to the Stored Procedure along with the necessary input parameters.
4. This method is not a solution to get output because we cannot declare variables of some type(CLOB, Varchar2) in Query Template.
5. Even though we are successful (step 4) in declaring the OUT variables in Query Template and passed it successfully to the procedure, but our procedure contains outputs which are of type CLOB. It means we are going to get data which is more than VARCHAR2 length which query template cannot return(Limit is 32767
characters)
6. So the method 2-a is ruled out.
7. Now consider method 2-b. Function returns only one value, but we have 3 different OUT values. Assume that we have appended them using a separator. This value is going to be more than 32767 characters which is again a problem with the query template(refer to point 5). So option 2-b is also ruled out.
Apart from above mentioned methods there is a work around. It is to create a temporary table in the database with above 3 OUT parameters along with a session specific column. We insert the output which we got from the procedure to the temporary table and use it further. As soon the usage of the data is completed we delete the current session specific data. So indirectly we call the table as a Session Table. This solution increases unnecessary load on the database.
Thanks in Advance.
RajeshRajesh,
please check if this following proposal could serve you.
Define the Query with mode FixedQueryWithOutput. In the package define a ref cursor as IN OUT parameter. To get your 3 values back, open the cursor in your procedure like "Select val1, val2, val3 from dual". Then the values should get into your query.
Here is an example how this could be defined.
Package:
type return_cur IS ref CURSOR;
Procedure:
PROCEDURE myProc(myReturnCur IN OUT return_cur) ...
OPEN myReturnCur FOR SELECT val1, val2, val3 FROM dual;
Query:
DECLARE
MYRETURNCUR myPackage.return_cur;
BEGIN
myPackage.myProc(
MYRETURNCUR => ?
END;
Good luck.
Michael -
Calling stored procedure with output parameters in a different schema
I have a simple stored procedure with two parameters:
PROCEDURE Test1(
pOutRecords OUT tCursorRef,
pIdNumber IN NUMBER);
where tCursorRef is REF CURSOR.
(This procedure is part of a package with REF CURSOR declared in there)
And I have two database schemas: AppOwner and AppUser.
The above stored procedure is owned by AppOwner, but I have to execute this stored procedure from AppUser schema. I have created a private synonym and granted the neccessary privileges for AppUser schema to execute the package in the AppUser schema.
When I ran the above procedure from VB using ADO and OraOLEDB.Oracle.1 driver, I got the following error when connecting to the AppUser schema:
ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'TEST1'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
but when I was connecting to the AppOwner schema, everything is running correctly without errors.
Also, when I switch to the microsoft MSDAORA.1 driver, I can execute the above procedure without any problems even when connecting to the AppUser schema.
I got this error only when I am trying to execute a stored procedure with an output parameter. All other procedures with only input parameters have no problems at all.
Do you know the reason for that? Thanks!If anyone has figured this one out let me know. I'm getting the same problem. Only in my case I've tried both the "OraOLEDB.Oracle" provider and the "MSDAORA" provider and I get an error either way. Also my procedure has 2 in parameters and 1 out parameter. At least now I know I'm not the only one with this issue. :)
'*** the Oracle procedure ***
Create sp_getconfiguration(mygroup in varchar2, myparameter in varchar2, myvalue out varchar2)
AS
rec_config tblconfiguration.configvalue%type;
cursor cur_config is select configvalue from tblconfiguration where configgroup = mygroup and configparameter = myparameter;
begin
open cur_config;
fetch cur_config into rec_config;
close cur_config;
myvalue := rec_config;
end;
'** the ado code ****
dim dbconn as new adodb.connection
dim oCmd as new adodb.connection
dim ors as new adodb.recordset
dbconn.provider = "MSDAORA" 'or dbconn.provider = "OraOLEDB.Oracle"
dbconn.open "Data Source=dahdah;User ID=didi;Password=humdy;PLSQLRSet=1;"
set ocmd.activeconnection = dbconn
cmd.commandtext = "{call fogle.sp_getconfiguration(?,?)}"
'i've also tried creating a public synonym called getconfiguration and just refering to procedure by that.
' "{call getconfiguration(?, ?)}"
' "{call getconfiguration(?,?, {resultset 1, myvalue})}"
'and numerous numerous other combinations
set oPrm = cmd.createparameter("MYGROUP", advarchar, adparaminput, 50, strGrouptoPassIn$)
cmd.parameters.append oPrm
set oPrm = cmd.createParameter("MYPARAMETER", advarchar, adParamInput, 50, strParameterToPassIn$)
cmdParameters.append oPrm
set rs = cmd.execute -
Calling an oracle stored procedure with output parameter
Hi,
I am trying to execute a procedure with 2 input and 1 output parameters by using SQLQuery. I tried each mode (Command, FixedQuery & FixedQueryWithOutput) with following statements.
call cm_test_prod([Param.1],[Param.2],[Param.3])
Error:"missing expression "
call cm_test_prod([Param.1],[Param.2],?)
Error:"wrong number or types of arguments in call to 'CM_TEST_PROD'"
call cm_test_prod([Param.1],[Param.2],:var)
Error:"wrong number or types of arguments in call to 'CM_TEST_PROD' "
or
Error: "not all variables bound"
If I use without output parameter, in Command mode, It works fine.
call cm_test_prod([Param.1],[Param.2])
or
call cm_test_prod('[Param.1]','[Param.2]')
works without error.
SAP XMII: Version 12.0.5 Build(126)
Oracle 10G
Any help would be greatly appreciated.
Thanks,
Tunur.
Edited by: Namik Tunur on Dec 14, 2010 3:34 PM
Edited by: Namik Tunur on Dec 14, 2010 3:36 PMHi,
@Marcelo,
I used your package just by replacing 'varchar2' instead of 'varchar(100)''. I got the error message 'ORA-00900: invalid SQL statement'. I didn't understand how we handle output parameter with this:
Query = Call MYPKG.MyProcedure(1,'Test FixedQueryWithOutput',?)
What is Query in here? If we have two output parameters, how would we get the outputs?
My procedure is:
CREATE OR REPLACE
PROCEDURE XXXXX.CM_TEST_PROD_OUTPUT(v1 in number,v2 in number, v3 out number) IS
BEGIN
update test_table set no2 = (v1+v2);
commit;
v3 := v1+v2;
END;
declare
a number;
BEGIN
cm_test_prod_output(1,6,a);
END;
if I use this
call cm_test_prod_output([Param.1],[Param.2],?)
with FixedQueryWithOutput mode,
I get the following error:
ORA-06553: PLS-306: wrong number or types of arguments in call to 'CM_TEST_PROD_OUTPUT'
@Mike,
I already tried both with quotes and without quotes, also I tried both with number output and with string output.
As I mentioned before, if I use number inputs without output in Command mode,
call cm_test_prod(http://Param.1,http://Param.2)
or
call cm_test_prod('http://Param.1','http://Param.2')
works succesfully.
Regards,
Tunur -
Problem Calling MaxDB stored procedure with output from MII Query template
Hi,
I am using Max DB Database studio to write stored procedure, I am calling stored procedure from MII Query using CALL statement.
Can anyone guide me how to pass output values of stored procedure.
Examlpe::
call ProcName('[Param.1]','[Param.2]','[Param.3]','[Param.4]','[Param.5]', :isSuccess, :Trace)
In the above line of code I am not able to get the output values of stored procedure that is isSuccess and Trace values in Query template when executed. But same thing I get when executed in Database studio.
How do I call with outputs for any stored procedure in MII.
Any help would be appriciated.
Thanks,
PadmaMy call statement is like this
call RESULTDATA_INSERT('[Param.1]','[Param.2]','[Param.3]', :isSuccess, :Trace)
I am able to insert record in DB, But I am not getting output values in Query template.I have done this in Fixed Query, when I execute it throws me "Fatal error as Loaded content empty".
I tried giving select below call but it dont work.
Regards,
Rao -
Call procedure with MS SQL from linked Oracle server
I have a procedure on a remote server that I can call from SQL*PLUS
set serveroutput on
declare rez varchar2(99); msg varchar2(99); begin radar.test('AL25',rez,msg); dbms_output.put_line('Rez='||rez);
dbms_output.put_line('Msg='||msg);
end;
it gives me the neccessary result.
But I need to call the same procedure with MS SQL from a linked Oracle server, I'm trying to do it through openquery for a while, but no success yet.
Can someone tell me what is the right syntax for that query in OPENQUERY?Have you tried configuring Oracle Heterogenous Services/ Transparent Gateway? This would let you link Oracle to SQL Server via a database link which should solve your problem.
Justin
Distributed Database Consulting, Inc.
www.ddbcinc.com -
How to call procedure with Object types in java
Hi,
We have procedure declaration as follows
===============
TYPE TEST_TYPE AS OBJECT (NAME VARCHAR2(10));
TYPE TESTTYPE1 AS object (student1 TESTTYPE,student2 TESTTYPE,student3 TESTTYPE);
TYPE rect AS OBJECT
-- The type has 3 attributes.
length NUMBER,
width NUMBER,
area NUMBER,
-- Define a constructor that has only 2 parameters.
CONSTRUCTOR FUNCTION rect(length NUMBER, width NUMBER)
RETURN SELF AS RESULT
PROCEDURE G(obj1 in TESTTYPE1,obj2 out rect) as
n1 testtype;
n2 testtype;
n3 testtype;
n4 testtype;
begin
obj2 := NEW rect(10,20,200);
n1 := obj1.student1;
n2 := obj1.student2;
n3 := obj1.student3;
obj2.length :=20;
end;
=====================================================
I am not able to call the procedure in java code as I cannot figure out which out parameter type will it be registered using registeroutparameter. using cursor or struct type fails.
please let me know how I can pass values from stored procedure with objects to java.I'm not sure what you're trying to accomplish with your procedure, but in general, this is an example of how you could use oracle.sql.STRUCT.
First, prepare your java.sql.CallableStatement using java.sql.CallableStatement cStmt = java.sql.Connection.prepareCall({ call G(?, ?) });
Note that you don't have to use the OracleCallableStatement. The java.sql.CallableStatement will work just fine.
For the IN parameter, you need to create three TEST_TYPE objects. Then you need to create one TESTTYPE1 object.
These will all be instances of oracle.sql.STRUCT.
To create a oracle.sql.STRUCT object you need a descriptor and a set of attributes. For example, to create a TEST_TYPE object you would do the following
1. StructDescriptor sd = StructDescriptor.createDescriptor("TEST_TYPE", java.sql.Connection).
2. Add a VARCHAR2 attribute to an array of attributes (e.g. Object[] attributes = new Object[]{"Student Name"})
3. oracle.sql.STRUCT struct = new oracle.sql.STRUCT(sd, java.sql.Connection, attributes)
Then do something similar to create the TESTTYPE1 object, except that the attribute array will contain three instances of TEST_TYPE struct objects.
To bind the IN parameter you need to use the java.sql.CallableStatement.setObject(1, <Instance of TESTTYPE1 object>).
To register the OUT parameter, you need to call java.sql.CallableStatement.registerOutParameter(2, oracle.jdbc.OracleTypes.STRUCT, "RECT").
Then, execute your procedure using cStmt.execute();
Retrieve your OUT parameter using oracle.sql.STRUCT struct = (oracle.sql.STRUCT)cStmt.getObject(2).
Once you've done that, to get the values of the attributes of all of your STRUCT objects, you need their descriptors and their metadata. -
Problem calling Procedure with parameter from Dynamic Page
I received an error saying the Page not found
here's how to reproduce the error.
1. Create procedure in portal30 schema.
Create or Replace PROCEDURE PORTAL30.ADD_TWO_VALUES
v_one IN NUMBER,
v_two IN NUMBER,
v_result OUT NUMBER)
as
begin
v_result :=v_one+v_two;
end;
2. Create Dynamic Page with following code
<ORACLE>DECLARE
v_total NUMBER;
BEGIN
ADD_TWO_VALUES(:v_one,:v_two, v_total);
htp.p('The total is => ');
htp.p('<input type="TEXT" VALUE='||v_total||'>');
htp.para;
htp.anchor('http://<machine.domain:port#>/pls/portal30/PORTAL30.DYN_
ADD_TWO_VALUES.show_parms', 'Re-Execute Procedure');
END;</ORACLE>
3. I clicked on Customize Link and entered 2 numbers as values for v_one and v_two.
4. Got "The page cannot be found" error in I.E. or "The requested URL /pls/portal30/PORTAL30.DYN_SAMPLE_ADD.show was not found on this server." on Netscape
However when I subsitute "ADD_TWO_VALUES(:v_one,:v_two, v_total);" in the dynamic page for "ADD_TWO_VALUES(3,2, v_total);", it runs just fine.
What's wrong here? Can I not use a parameter from a dynamic page and call a procedure with it? Help is needed urgently and will be greatly appreciated.
-AhsunHi,
I tried with your code with few changes ,please try with them.
Create or Replace PROCEDURE <myschema>.ADD_TWO_VALUES
v_one IN NUMBER,
v_two IN NUMBER,
v_result OUT NUMBER)
as
begin
v_result :=v_one+v_two;
end;
I created the procedure in <mySchema> and granted that to <application_schema> and made some changes
<ORACLE>
DECLARE
v_total NUMBER;
BEGIN
<procedure_schema>.ADD_TWO_VALUES(:v_one,:v_two, v_total);
htp.p('The total is => ');
htp.p('<input type="TEXT" VALUE='||v_total||'>');
htp.para;
htp.anchor('http://<your_host>/pls/<portal_schema>/<application_schema>.DYN_FOR_OTN.SHOW_PARMS', 'Re-Execute Procedure');
END;
</ORACLE>
Hope this helps.
rahul -
Calling stored procedures with output parameters using RDO and VB
I have a simple test procedure defined as follows:
CREATE OR REPLACE PROCEDURE test_sp (inval1 IN VARCHAR2,
inval2 IN NUMBER, inval3 OUT VARCHAR2, inval4 OUT NUMBER) IS
BEGIN
inval3 := 'RETURN TEST';
inval4 := 10;
END;
I am attempting to call this procedure from VB 5.0 using RDO and the Oracle ODBC Driver 8.01.06:
dim rdoQd as rdoQuery
dim grdoCn as rdoConnection
strSQL = "{ call test_sp('SOMETHING',?,?,?) }"
Set rdoQd = grdoCn.CreateQuery("", strSQL)
rdoQd(0).Direction = rdParamInput
' get error# 40041 at above line
' "Object Collection: Couldn't ' find item indicated by text."
rdoQd(0).Type = rdTypeINTEGER
rdoQd(0).Value = 5
rdoQd(1).Direction = rdParamOutput
rdoQd(1).Type = rdTypeVARCHAR
rdoQd(2).Direction = rdParamOutput
rdoQd(2).Type = rdTypeINTEGER
Set rdoApp = rdoQd.OpenResultset()
MsgBox (CStr(rdoQd(1)))
MsgBox (CStr(rdoQd(2)))
When I run this VB code, I get the above mentioned error. If I use placeholders for all parameters (like "{ call test_sp (?,?,?,?) }" ), no error occurs.
I really need to use the first type of syntax from above and not have to use placeholders for all parameters. Is there a way to accomplish this?
TIA,
EstherAre you getting any warning while importing the stored procedure?
Please check the below datatypes:
While creating the stored procedure, if you have used varchar(MAX), please ALTER it to varchar(255) and reimport to DS.
Also, the datatype of $message (global variable or local variable) used inside DS should also be varchar(255)
Try a print statement in between.
ADMIN.DBO.SPJOBSUMMARY(69,$message,$rtCode,$rtVal);
print('Message is '||$message);
smtp_to('leighattest.com.au', 'Results of ' || job_name(), $rtCode || '//' || $rtVal || '~~' || $message || '//', 0,0);
and see in the job log if DS is able to retrieve the output from DB.
Regards,
Suneer -
Call procedure with return cursor
Dear All,
there is a cast with my job. i have procedure like below:
CREATE OR REPLACE PROCEDURE ISISALL.P_TEST (PARAM1 IN VARCHAR2,RETURN_TABLE OUT SYS_REFCURSOR) IS
BEGIN
OPEN RETURN_TABLE FOR
SELECT FIELD2,FIELD3 FROM MYTABLE
WHERE FIELD1=PARAM1;
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
WHEN OTHERS THEN
-- Consider logging the error and then re-raise
RAISE;
END P_TEST;
my question, How to call the procedure ? i want insert table with source from the procedure (P_TEST)..>
How to call the procedure ? i want insert table with source from the procedure (P_TEST)..
>
This code sample that you can test in the SCOTT schema should give you enough information
CREATE OR REPLACE TYPE SCOTT.local_type IS OBJECT (
empno NUMBER(4),
ename VARCHAR2(10));
CREATE OR REPLACE TYPE SCOTT.local_tab_type IS TABLE OF local_type;
CREATE OR REPLACE PACKAGE SCOTT.test_refcursor_pkg
AS
TYPE my_ref_cursor IS REF CURSOR;
-- add more cursors as OUT parameters
PROCEDURE test_proc(p_ref_cur_out OUT test_refcursor_pkg.my_ref_cursor);
END test_refcursor_pkg;
CREATE OR REPLACE PACKAGE BODY SCOTT.test_refcursor_pkg
AS
PROCEDURE test_proc(p_ref_cur_out OUT test_refcursor_pkg.my_ref_cursor)
AS
l_recs local_tab_type;
BEGIN
-- Get the records to modify individually.
SELECT local_type(empno, ename) BULK COLLECT INTO l_recs
FROM EMP;
-- Perform some complex calculation for each row.
FOR i IN l_recs.FIRST .. l_recs.LAST
LOOP
DBMS_OUTPUT.PUT_LINE(l_recs(i).ename);
END LOOP;
-- Put the modified records back into the ref cursor for output.
OPEN p_ref_cur_out FOR
SELECT * from TABLE(l_recs);
-- open more ref cursors here before returning
END test_proc;
END;
SET SERVEROUTPUT ON SIZE 1000000
DECLARE
l_cursor test_refcursor_pkg.my_ref_cursor;
l_ename emp.ename%TYPE;
l_empno emp.empno%TYPE;
BEGIN
test_refcursor_pkg.test_proc (l_cursor);
LOOP
FETCH l_cursor
INTO l_empno, l_ename;
EXIT WHEN l_cursor%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(l_ename || ' | ' || l_empno);
END LOOP;
CLOSE l_cursor;
END;
/Are you sure you wouldn't be better off using a PIPELINED function instead? Then you can just select from it as if it were a table and do whatever you want with the data
-- type to match emp record
create or replace type emp_scalar_type as object
(EMPNO NUMBER(4) ,
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7, 2),
COMM NUMBER(7, 2),
DEPTNO NUMBER(2)
-- table of emp records
create or replace type emp_table_type as table of emp_scalar_type
-- pipelined function
create or replace function get_emp( p_deptno in number )
return emp_table_type
PIPELINED
as
TYPE EmpCurTyp IS REF CURSOR RETURN emp%ROWTYPE;
emp_cv EmpCurTyp;
l_rec emp%rowtype;
begin
open emp_cv for select * from emp where deptno = p_deptno;
loop
fetch emp_cv into l_rec;
exit when (emp_cv%notfound);
pipe row( emp_scalar_type( l_rec.empno, LOWER(l_rec.ename),
l_rec.job, l_rec.mgr, l_rec.hiredate, l_rec.sal, l_rec.comm, l_rec.deptno ) );
end loop;
return;
end;
select * from table(get_emp(20)) -
Calling procedure with user defined IN & OUT parameters
I have procedure in a package which I need to call from the JDBC. My problem is, that procedure take user-defined data types as IN parameters & gives user-defined OUT paramters. How do I call a procedure like this. Do I need to write the wrapper class. If so from where do I start, I mean I don't have any idea about writing wrapper classes. Below is the package spec which might help you uderstand my question more clearly.
CREATE OR REPLACE PACKAGE FAM_AR_SUMMARY_PKG IS
TYPE ar_summ_rec_type IS RECORD (
CUST_NAME hz_parties.party_name%TYPE,
CUST_ACCT_NO hz_cust_accounts_all.ACCOUNT_NUMBER%TYPE,
CUST_ACCT_BAL NUMBER,
CUST_PAST_DUE_BAL NUMBER,
CUST_UNAPP_REC_BAL NUMBER,
CONTRACT_NO okc_k_headers_b.CONTRACT_NUMBER%TYPE,
ANN_DATE okc_k_headers_b.END_DATE%TYPE,
TOT_CONTRACT_VALUE okc_k_headers_b.ESTIMATED_AMOUNT%TYPE,
PAST_DUE_AMT NUMBER,
DAYS_PAST_DUE NUMBER,
INV_PAST_DUE NUMBER,
DEP_INV_BAL NUMBER,
AMT_CREDITED NUMBER);
TYPE ar_summ_tbl_type IS TABLE OF ar_summ_rec_type
INDEX BY BINARY_INTEGER;
PROCEDURE FAM_GET_AR_SUMMARY(p_cust_name IN hz_parties.party_name%TYPE,
p_chr_id IN okc_k_headers_b.ID%TYPE,
x_ar_summ_tbl OUT NOCOPY ar_summ_tbl_type,
x_excp_message OUT VARCHAR2);
END FAM_AR_SUMMARY_PKG;Hi,
U cant get the type record from the DB with java. I hope u r using oracle. Instead u can create a Type object and then make it as an OUT parameter. Try reading the oracle documentation for it (JDBC Developer's Guide and Reference).
Regards,
Chandru.M -
Executing the stored procedure with output which is a collection of objects
Hello,
I have the objects and collection of objects within an objects as below:
CREATE OR REPLACE TYPE SHARE_OUTST_T
AS OBJECT
SHR_OUTST_AMT number
CREATE OR REPLACE TYPE SECURITY_T
AS OBJECT
VOTE_PER_SHR number
, CUSIP varchar2(12)
, EXCHANGE varchar2(10)
, IV_TYPE_CD varchar2(10)
, SEC_TICKER_SYMB varchar2(20)
CREATE OR REPLACE TYPE ALTERNATE_ID_T
AS OBJECT
( ALT_ID_TYPE varchar2(20)
CREATE OR REPLACE TYPE ISSUE_MAINT_VERSION_T
AS OBJECT
IM_KEY_ID number
, IM_VER_NUM number
, EFF_TMSTMP timestamp
, EXP_TMSTMP timestamp
, NEXT_REVIEW_TMSTMP timestamp
, APPR_STATUS_REF_ID number
, VOTE number
, ADD_USR_ID varchar2(20)
, ADD_TMSTMP timestamp
, UPD_USR_ID varchar2(20)
, UPD_TMSTMP timestamp
, LOCK_LEVEL_NUM number
, ACTION VARCHAR2(1)
CREATE OR REPLACE TYPE ISSUE_SHARE_MAINT_T
AS OBJECT
IM_KEY_ID number
, IM_VER_NUM number
, SHR_OUTST_AMT number
, CURR_OUTST_AMT number
, ADD_USR_ID varchar2(20)
, ADD_TMSTMP timestamp
, UPD_USR_ID varchar2(20)
, UPD_TMSTMP timestamp
, LOCK_LEVEL_NUM number
, ACTION VARCHAR2(1)
CREATE OR REPLACE TYPE ISSUE_MAINT_COMMENT_T
AS OBJECT
IM_KEY_ID number
, IM_VER_NUM number
, COMMENT_TXT varchar2(400)
, ADD_USR_ID varchar2(20)
, ADD_TMSTMP timestamp
, UPD_USR_ID varchar2(20)
, UPD_TMSTMP timestamp
, LOCK_LEVEL_NUM number
, ACTION VARCHAR2(1)
CREATE OR REPLACE TYPE ISSUE_MAINT_COMMENT_COL_T AS TABLE OF ISSUE_MAINT_COMMENT_T;
CREATE OR REPLACE TYPE ISSUE_VERSION_T
AS OBJECT
SHARE_OUTST SHARE_OUTST_T
, SECURITY SECURITY_T
, ALTERNATE_ID ALTERNATE_ID_T
, ISSUER ISSUER_T
, ISSUE_MAINT_VERSION ISSUE_MAINT_VERSION_T
, ISSUE_SHARE_MAINT ISSUE_SHARE_MAINT_T
, ISSUE_MAINT_COMMENT_COL ISSUE_MAINT_COMMENT_T
CREATE OR REPLACE TYPE ISSUE_VERSION_COL_T AS TABLE OF ISSUE_VERSION_T;
And the stored procedure as :
=======================================
PROCEDURE get_all_issue_version_col
( pv_issue_version_col OUT issue_version_col_t
AS
CURSOR cur_issue_version
IS
SELECT
issue_version_t (
SHARE_OUTST_T (so.shr_outst_amt )
, SECURITY_T ( s.vote_per_shr
, s.sec_cusip
, s.PRI_MKT_EXCH_CD
, s.IV_TYPE_CD
, s.SEC_TICKER_SYMB )
, ALTERNATE_ID_T (a.ALT_ID_TYPE)
, ISSUER_T (i.ISSR_ID )
, ISSUE_MAINT_VERSION_T (imv.im_key_id
, imv.im_ver_num
, imv.eff_tmstmp
, imv.exp_tmstmp
, imv.next_review_tmstmp
, imv.appr_status_ref_id
, imv.vote
, imv.add_usr_id
, imv.add_tmstmp
, imv.upd_usr_id
, imv.upd_tmstmp
, imv.lock_level_num
, NULL )
, ISSUE_SHARE_MAINT_T (ism.im_key_id
, ism.im_ver_num
, ism.shr_outst_amt
, ism.curr_outst_amt
, ism.add_usr_id
, ism.add_tmstmp
, ism.upd_usr_id
, ism.upd_tmstmp
, ism.lock_level_num
, NULL)
, ISSUE_MAINT_COMMENT_T(imc.im_key_id
, imc.im_ver_num
, imc.comment_txt
, imc.add_usr_id
, imc.add_tmstmp
, imc.upd_usr_id
, imc.upd_tmstmp
, imc.lock_level_num
, NULL )
FROM
share_outst so
, security s
, alternate_id a
, issuer i
, issue_maintenance_version imv
, issue_share_maintenance ism
, issue_maintenance_comment imc
WHERE
s.sec_key_id = so.SEC_KEY_ID
and s.SEC_KEY_ID = a.SEC_KEY_ID
and s.MSTR_ISSR_KEY_ID = i.ISSR_KEY_ID
and s.SEC_CUSIP = imv.SEC_CUSIP (+)
and s.SEC_CUSIP = ism.SEC_CUSIP (+)
and imv.IM_KEY_ID = imc.IM_KEY_ID (+);
BEGIN
OPEN cur_issue_version ;
FETCH cur_issue_version BULK COLLECT INTO pv_issue_version_col ;
CLOSE cur_issue_version ;
END ;
PROCEDURE get_all_issue_col_v1
( pv_issue_version_col OUT NOCOPY issue_version_col_t
, pv_row_count IN number
, pv_issuer_id IN VARCHAR2
AS
CURSOR cur_issue_version
IS
SELECT
issue_version_t (
SHARE_OUTST_T (so.shr_outst_amt )
, SECURITY_T ( s.vote_per_shr
, s.sec_cusip
, s.PRI_MKT_EXCH_CD
, s.IV_TYPE_CD
, s.SEC_TICKER_SYMB )
, ALTERNATE_ID_T (a.ALT_ID_TYPE)
, ISSUER_T (i.ISSR_ID )
, ISSUE_MAINT_VERSION_T (imv.im_key_id
, imv.im_ver_num
, imv.eff_tmstmp
, imv.exp_tmstmp
, imv.next_review_tmstmp
, imv.appr_status_ref_id
, imv.vote
, imv.add_usr_id
, imv.add_tmstmp
, imv.upd_usr_id
, imv.upd_tmstmp
, imv.lock_level_num
, NULL )
, ISSUE_SHARE_MAINT_T (ism.im_key_id
, ism.im_ver_num
, ism.shr_outst_amt
, ism.curr_outst_amt
, ism.add_usr_id
, ism.add_tmstmp
, ism.upd_usr_id
, ism.upd_tmstmp
, ism.lock_level_num
, NULL)
, ISSUE_MAINT_COMMENT_T(imc.im_key_id
, imc.im_ver_num
, imc.comment_txt
, imc.add_usr_id
, imc.add_tmstmp
, imc.upd_usr_id
, imc.upd_tmstmp
, imc.lock_level_num
, NULL )
FROM
share_outst so
, security s
, alternate_id a
, issuer i
, issue_maintenance_version imv
, issue_share_maintenance ism
, issue_maintenance_comment imc
WHERE
s.sec_key_id = so.SEC_KEY_ID
and s.SEC_KEY_ID = a.SEC_KEY_ID
and s.MSTR_ISSR_KEY_ID = i.ISSR_KEY_ID
and s.SEC_CUSIP = imv.SEC_CUSIP (+)
and s.SEC_CUSIP = ism.SEC_CUSIP (+)
and imv.IM_KEY_ID = imc.IM_KEY_ID (+);
BEGIN
OPEN cur_issue_version ;
FETCH cur_issue_version BULK COLLECT INTO pv_issue_version_col ;
CLOSE cur_issue_version ;
END ;
====================
When I execute this stored procedure thru rapid sql, I get error
Error: ORA-06550: line 1, column 21:
PLS-00306: wrong number or types of arguments in call to 'GET_ALL_ISSUE_VERSION_COL'
ORA-06550: line 1, column 21:
PL/SQL: Statement ignored, Batch 1 Line 1 Col 21
What is that I am missing?
Any help would be greatly appreciated.I've never tried Rapid SQL, but my guess is that you can't pass objects through it. I'd write a test case on the server and try it there. It looks like it should work but I didn't build a test case. If it works on the server but not in the tool, it's like the tool. OCI8 doesn't support passing instantiated objects.
-
Call procedure with Spring and strange invalid index error.
Hi I call a procedure, from java in this way:
FlussiGiornalieriStoredProcedure proc = new FlussiGiornalieriStoredProcedure(dataSource);
String column_order="";
if (orderColumn!=null) {
column_order = orderColumn + " " + orderType;
} else {
column_order = " stato DESC "; //this is the invalid index column of the error
Map mappa = proc.execute(idGruppo, dataInizio, dataFine, startRow, endRow, column_order);
result = (List<VistaFlussiGiornalieri>) mappa.get("recordsetCursor");
numeroTotaleRighe = ((BigDecimal)mappa.get("countRow")).intValue();
response.setSize(numeroTotaleRighe);
response.setList((List<VistaFlussiGiornalieri>) result);
private class FlussiGiornalieriStoredProcedure extends StoredProcedure {
private static final String SQL = "mkt_flussi_giornalieri2";
public FlussiGiornalieriStoredProcedure(DataSource ds) {
super(ds, SQL);
declareParameter(new SqlParameter("idGruppo", Types.VARCHAR));
declareParameter(new SqlParameter("dataInizio", Types.DATE));
declareParameter(new SqlParameter("dataFine", Types.DATE));
declareParameter(new SqlParameter("startRow", OracleTypes.NUMBER));
declareParameter(new SqlParameter("endRow", OracleTypes.NUMBER));
declareParameter(new SqlParameter("column_order", OracleTypes.VARCHAR));
//declareParameter(new SqlParameter("order_name", OracleTypes.VARCHAR));
declareParameter(new SqlOutParameter("recordsetCursor", OracleTypes.CURSOR, VistaFlussiGiornalieriDaoImpl.this));
declareParameter(new SqlOutParameter("countRow", OracleTypes.NUMBER, VistaFlussiGiornalieriDaoImpl.this));
//declareParameter(new SqlOutParameter("QUERY_STM", OracleTypes.VARCHAR, VistaFlussiGiornalieriDaoImpl.this));
compile();
public Map execute(String idGruppo, Date dataInizio, Date dataFine, int startRow, int endRow, String column_order) {
Map inputs = new HashMap();
inputs.put("idGruppo", idGruppo);
inputs.put("dataInizio", dataInizio);
inputs.put("dataFine", dataFine);
inputs.put("startRow", startRow);
inputs.put("endRow", endRow);
inputs.put("column_order", column_order);
return execute(inputs);
}When The java class call the oracle procedure I receive this message:
>
Caused by: java.sql.SQLException: Invalid index column
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208)
at oracle.jdbc.driver.OracleResultSetImpl.getString(OracleResultSetImpl.java:385)
at it.edison.markettracker.dao.spring.VistaFlussiGiornalieriDaoImpl.mapRow(VistaFlussiGiornalieriDaoImpl.java:155)
at it.edison.markettracker.dao.spring.VistaFlussiGiornalieriDaoImpl.mapRow(VistaFlussiGiornalieriDaoImpl.java:1)
at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:92)
at org.springframework.jdbc.core.JdbcTemplate.processResultSet(JdbcTemplate.java:1124)
at org.springframework.jdbc.core.JdbcTemplate.extractOutputParameters(JdbcTemplate.java:1085)
at org.springframework.jdbc.core.JdbcTemplate$5.doInCallableStatement(JdbcTemplate.java:997)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:936)
... 26 more
If I call the procedure, from toad, in this way:
SET serveroutput ON
DECLARE
TROVATI SYS_REFCURSOR;
NUMERO_TROVATI NUMBER;
BEGIN
DBMS_OUTPUT.ENABLE(30000);
dbms_output.put_line('INIZIO');
Mkt_Flussi_Giornalieri2(1, trunc(sysdate), trunc(sysdate), 100, 50, 'stato DESC', TROVATI, NUMERO_TROVATI);
dbms_output.put_line('RECORD TROVATI:'||NUMERO_TROVATI);
END; I don't receive any error message. Why?
The procedure is:
CREATE OR REPLACE PROCEDURE Mkt_Flussi_Giornalieri2
( idGruppo IN VARCHAR2
, dataInizio IN DATE
, dataFine IN DATE
, startRow IN NUMBER
, endRow IN NUMBER
, column_order in varchar2
--, order_name in varchar2
, recordsetCursor OUT SYS_REFCURSOR
, countRow OUT NUMBER
) IS
order_clause varchar2(200) := ' ';
sql_stm varchar2(32000);
BEGIN
IF column_order IS NOT NULL
THEN
order_clause := column_order;
ELSE
order_clause := ' stato DESC ';
END IF;
dbms_output.put_line('clausola:'||order_clause);
sql_stm:='
SELECT idflusso, descrizioneFlusso, dataRiferimento, strDataRiferimento,
stato, dataElaborazione, ultimoMessaggio, livello, utentiRiferimento,
exec_seq, provider_description, log_info FROM
(SELECT idflusso, descrizioneFlusso, dataRiferimento, strDataRiferimento,
stato, dataElaborazione, ultimoMessaggio, livello, utentiRiferimento,
exec_seq, provider_description, log_info FROM
(SELECT
temp.flow_id AS idFlusso,
MKT_FLOW.flow_id || '' - '' || MKT_FLOW.flow_description || ''('' || temp.exec_seq || '')'' AS descrizioneFlusso,
TO_DATE(temp.date_id,''yyyymmddhh24miss'') AS dataRiferimento,
TO_CHAR(TO_DATE(temp.date_id,''yyyymmddhh24miss''),''dd/mm/yyyy'')||'' h. ''||TO_CHAR(TO_DATE(temp.date_id,''yyyymmddhh24miss''),''hh24:mi'') AS strDataRiferimento,
temp.status AS stato, temp.end_time AS dataElaborazione, DECODE(temp.status,3, ERROR_DESC, 1, TRACE_DES) AS ultimoMessaggio,
DECODE(temp.status,3, error_level, 1, fk_trace_level) AS livello,
Get_Group_Description(MKT_FLOW.flow_id) AS utentiRiferimento, temp.exec_seq AS exec_seq, mp.provider_description,
mp.provider_link, mfc.log_info
FROM (
SELECT v.*, tr.TRACE_ID, tr.TRACE_DES , tr.trace_date, tr.fk_trace_level, e.ERROR_ID, e.ERROR_CODE, NVL(e.ERROR_DESC, er.ERROR_DESC) AS ERROR_DESC, e.error_date, e.error_level,
MIN(e.error_id) OVER (PARTITION BY e.fk_exec_seq) eid,
MAX(tr.trace_id) OVER (PARTITION BY tr.fk_exec_seq) tid
FROM (
SELECT fc.*, MAX(exec_seq) OVER (PARTITION BY flow_id, flow_frequency, n_run, date_id) exsq
FROM mkt_flow_conf_view fc
WHERE TRUNC(end_time) >= :1
AND TRUNC(end_time) <= :2
) v, MKT_ERROR er, MKT_FLOW_ERROR e, MKT_FLOW_TRC tr
WHERE v.exec_seq = v.exsq
AND e.fk_exec_seq (+) = v.exec_seq
AND tr.fk_exec_seq (+) = v.exec_seq
AND er.error_id (+) = e.error_code
) temp
INNER JOIN MKT_FLOW
ON MKT_FLOW.flow_id = temp.flow_id AND MKT_FLOW.n_run = temp.n_run AND MKT_FLOW.flow_frequency = temp.flow_frequency
INNER JOIN MKT_FLOW_GROUP ON MKT_FLOW_GROUP.flow_id = MKT_FLOW.flow_id
LEFT OUTER JOIN
(SELECT DISTINCT flow_id, log_info
FROM mkt_flow_conf) mfc
ON mkt_flow.flow_id = mfc.flow_id
, mkt_provider mp
WHERE NVL(error_id, -1) = NVL(eid, -1)
AND NVL(trace_id, -1) = NVL(tid, -1)
AND MKT_FLOW_GROUP.group_id=:3
AND NVL (mkt_flow.fk_provider_id, '' '') =
NVL (mp.provider_id, '' '') )
WHERE ROWNUM <= :4
MINUS
(SELECT idflusso, descrizioneFlusso, dataRiferimento, strDataRiferimento,
stato, dataElaborazione, ultimoMessaggio, livello, utentiRiferimento,
exec_seq, provider_description, log_info FROM
(SELECT
temp.flow_id AS idFlusso,
MKT_FLOW.flow_id || '' - '' || MKT_FLOW.flow_description || ''('' || temp.exec_seq || '')'' AS descrizioneFlusso,
TO_DATE(temp.date_id,''yyyymmddhh24miss'') AS dataRiferimento,
TO_CHAR(TO_DATE(temp.date_id,''yyyymmddhh24miss''),''dd/mm/yyyy'')||'' h. ''||TO_CHAR(TO_DATE(temp.date_id,''yyyymmddhh24miss''),''hh24:mi'') AS strDataRiferimento,
temp.status AS stato, temp.end_time AS dataElaborazione, DECODE(temp.status,3, ERROR_DESC, 1, TRACE_DES) AS ultimoMessaggio,
DECODE(temp.status,3, error_level, 1, fk_trace_level) AS livello,
Get_Group_Description(MKT_FLOW.flow_id) AS utentiRiferimento, temp.exec_seq AS exec_seq, mp.provider_description,
mp.provider_link, mfc.log_info
FROM (
SELECT v.*, tr.TRACE_ID, tr.TRACE_DES , tr.trace_date, tr.fk_trace_level, e.ERROR_ID, e.ERROR_CODE, NVL(e.ERROR_DESC, er.ERROR_DESC) AS ERROR_DESC, e.error_date, e.error_level,
MIN(e.error_id) OVER (PARTITION BY e.fk_exec_seq) eid,
MAX(tr.trace_id) OVER (PARTITION BY tr.fk_exec_seq) tid
FROM (
SELECT fc.*, MAX(exec_seq) OVER (PARTITION BY flow_id, flow_frequency, n_run, date_id) exsq
FROM mkt_flow_conf_view fc
WHERE TRUNC(end_time) >= :5
AND TRUNC(end_time) <= :6
) v, MKT_ERROR er, MKT_FLOW_ERROR e, MKT_FLOW_TRC tr
WHERE v.exec_seq = v.exsq
AND e.fk_exec_seq (+) = v.exec_seq
AND tr.fk_exec_seq (+) = v.exec_seq
AND er.error_id (+) = e.error_code
) temp
INNER JOIN MKT_FLOW
ON MKT_FLOW.flow_id = temp.flow_id AND MKT_FLOW.n_run = temp.n_run AND MKT_FLOW.flow_frequency = temp.flow_frequency
INNER JOIN MKT_FLOW_GROUP ON MKT_FLOW_GROUP.flow_id = MKT_FLOW.flow_id
LEFT OUTER JOIN
(SELECT DISTINCT flow_id, log_info
FROM mkt_flow_conf) mfc
ON mkt_flow.flow_id = mfc.flow_id
, mkt_provider mp
WHERE NVL(error_id, -1) = NVL(eid, -1)
AND NVL(trace_id, -1) = NVL(tid, -1)
AND MKT_FLOW_GROUP.group_id=:7
AND NVL (mkt_flow.fk_provider_id, '' '') =
NVL (mp.provider_id, '' '') )
WHERE ROWNUM <= :8
) ) ORDER BY :9' ;
dbms_output.enable(30000);
dbms_output.put_line(sql_stm);
OPEN recordsetCursor FOR sql_stm USING dataInizio, dataFine, idGruppo, endRow, dataInizio, dataFine, idGruppo, startRow, order_clause;
SELECT COUNT(*) INTO countRow FROM
(SELECT
temp.flow_id AS idFlusso,
MKT_FLOW.flow_id || ' - ' || MKT_FLOW.flow_description || '(' || temp.exec_seq || ')' AS descrizioneFlusso,
TO_DATE(temp.date_id,'yyyymmddhh24miss') AS dataRiferimento,
TO_CHAR(TO_DATE(temp.date_id,'yyyymmddhh24miss'),'dd/mm/yyyy')||' h. '||TO_CHAR(TO_DATE(temp.date_id,'yyyymmddhh24miss'),'hh24:mi') AS strDataRiferimento,
temp.status AS stato, temp.end_time AS dataElaborazione, DECODE(temp.status,3, ERROR_DESC, 1, TRACE_DES) AS ultimoMessaggio,
DECODE(temp.status,3, error_level, 1, fk_trace_level) AS livello,
Get_Group_Description(MKT_FLOW.flow_id) AS utentiRiferimento, temp.exec_seq AS exec_seq, mp.provider_description,
mp.provider_link, mfc.log_info
FROM (
SELECT v.*, tr.TRACE_ID, tr.TRACE_DES , tr.trace_date, tr.fk_trace_level, e.ERROR_ID, e.ERROR_CODE, NVL(e.ERROR_DESC, er.ERROR_DESC) AS ERROR_DESC, e.error_date, e.error_level,
MIN(e.error_id) OVER (PARTITION BY e.fk_exec_seq) eid,
MAX(tr.trace_id) OVER (PARTITION BY tr.fk_exec_seq) tid
FROM (
SELECT fc.*, MAX(exec_seq) OVER (PARTITION BY flow_id, flow_frequency, n_run, date_id) exsq
FROM mkt_flow_conf_view fc
WHERE TRUNC(end_time) >= dataInizio
AND TRUNC(end_time) <= dataFine
) v, MKT_ERROR er, MKT_FLOW_ERROR e, MKT_FLOW_TRC tr
WHERE v.exec_seq = v.exsq
AND e.fk_exec_seq (+) = v.exec_seq
AND tr.fk_exec_seq (+) = v.exec_seq
AND er.error_id (+) = e.error_code
) temp
INNER JOIN MKT_FLOW
ON MKT_FLOW.flow_id = temp.flow_id AND MKT_FLOW.n_run = temp.n_run AND MKT_FLOW.flow_frequency = temp.flow_frequency
INNER JOIN MKT_FLOW_GROUP ON MKT_FLOW_GROUP.flow_id = MKT_FLOW.flow_id
LEFT OUTER JOIN
(SELECT DISTINCT flow_id, log_info
FROM mkt_flow_conf) mfc
ON mkt_flow.flow_id = mfc.flow_id
, mkt_provider mp
WHERE NVL(error_id, -1) = NVL(eid, -1)
AND NVL(trace_id, -1) = NVL(tid, -1)
AND MKT_FLOW_GROUP.group_id=idGruppo
AND NVL (mkt_flow.fk_provider_id, ' ') =
NVL (mp.provider_id, ' '));
END Mkt_Flussi_Giornalieri2;
/Please, could someone help me?
Thanks. Bye Bye.Hi,
I have solved the problem, I forgot a parameter in the select, so java tells the an error. But now I have another problem. The procedure doesn't execute the order by. I pass the couple column_name order_type in a string as ("provider_description desc") dinamically but the procedure doesn't execute the ordering. Why?
Thanks, bye bye.
Maybe you are looking for
-
How do I get Firefox to immediately delete finished entries in the download window?
I had to re-install today because of the idiotic Google homepage SNAFU. Previously, when a download finished, it disappeared from the Downloads window. Not it stays there and I have to manually remove it. This is SO annoying.
-
Explicitly installin java.policy problem
is there any one who knows how to explicitly install the java.policy. What i have been doing is set the policy of the RMI server through a file like java.policy which contains this grant { permission java.security.AllPermission "*:1024-65535","connec
-
Using a Temporary Variable in PCR
Hi All Please suggest for the following. How can I use a temporary variable in a PCR. Say if I need to transfer the AMT of WT 4100 to a variable like 'XYZ=4100' in PCR.....What variable I can use and what is the correct syntex for this. And how can I
-
Hi everybody, Is there a way to define a recursive dimension hierarchy in the Oracle BI Administration Tool??? Many thanks in advance!!! Jorge.
-
Project Server 2010 When using the Links list on a project site, the link always opens in the same window, replacing the project site. Is it possible to configure this list or an individual link, to open in a new window or tab?