Reg: PLS-00418: array bind type must match PL/SQL table row type error
I am trying to access a table of records through JDBC OracleCallableStatement. I am able to do it fine for all mappings except for the ones below
TYPE CAT_CD_TYPE IS TABLE OF A.B %TYPE INDEX BY BINARY_INTEGER;
TYPE ORG_CD_TYPE IS TABLE OF C.D %TYPE INDEX BY BINARY_INTEGER;
Column B is CHAR(1) and Column D is CHAR(2). I am trying to register the out parameters of Oraclecallablestatement as
cstmt.registerIndexTableOutParameter(2, 2000, OracleTypes.CHAR, 0);
cstmt.registerIndexTableOutParameter(3, 2000, OracleTypes.CHAR, 0);
All the other mappings work fine. These two fail with the error
SQLException in invokeDBPackage() : ORA-06550: line 1, column 32:
PLS-00418: array bind type must match PL/SQL table row type
ORA-06550: line 1, column 35:
PLS-00418: array bind type must match PL/SQL table row type
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
I tried other OracleTypes mappings too but no luck so far.
Any advice on this would be greatly appreciated.
Hi,
I'm not sure it's reasonable to expect someone to sift through that much stuff.
Which parameter is it having a problem with?
Can you modify the following to reproduce the behavior?
Thanks
Greg
create package mypack5 as
TYPE v2array is table of emp.ename%type index by BINARY_INTEGER;
PROCEDURE test_it(thearray IN v2array, numrecs out number);
END;
CREATE or replace PACKAGE BODY MYPACK5 AS
PROCEDURE test_it(thearray IN v2array, numrecs out number)
IS
begin
numrecs := thearray.count;
END;
END;
using System;
using System.Data;
using Oracle.DataAccess.Client;
public class indexby
public static void Main()
OracleConnection con = new OracleConnection("data source=orcl;user id=scott;password=tiger;");
con.Open();
OracleCommand cmd = new OracleCommand("mypack5.test_it", con);
cmd.CommandType = CommandType.StoredProcedure;
OracleParameter Param1 = cmd.Parameters.Add("param1", OracleDbType.Varchar2);
Param1.Direction = ParameterDirection.Input;
Param1.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
Param1.Size = 3;
string[] vals = { "foo", "bar", "baz" };
Param1.Value = vals;
OracleParameter Param2 = cmd.Parameters.Add("param2", OracleDbType.Int32, DBNull.Value, ParameterDirection.Output);
cmd.ExecuteNonQuery();
Console.WriteLine("{0} records passed in", Param2.Value);
con.Close();
}
Similar Messages
-
PLS-00418: array bind type must match PL/SQL table row type
If a PL/SQL table is indexed by CHAR and is a parameter
in a Stored Program, we are not able to call the stored
program from the Java code.
We get the following error code.
java.sql.SQLException: ORA-06550: line 1, column 62:
PLS-00418: array bind type must match PL/SQL table row type
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
But if we change the CHAR into VARCHAR2 then it works.
We are using Oracle9i Enterprise Edition Release 9.2.0.5.0 -64bit Production ,
JServer Release 9.2.0.5.0 - Production
and JDK1.4.
Thanks
Push..Hi,
I'm not sure it's reasonable to expect someone to sift through that much stuff.
Which parameter is it having a problem with?
Can you modify the following to reproduce the behavior?
Thanks
Greg
create package mypack5 as
TYPE v2array is table of emp.ename%type index by BINARY_INTEGER;
PROCEDURE test_it(thearray IN v2array, numrecs out number);
END;
CREATE or replace PACKAGE BODY MYPACK5 AS
PROCEDURE test_it(thearray IN v2array, numrecs out number)
IS
begin
numrecs := thearray.count;
END;
END;
using System;
using System.Data;
using Oracle.DataAccess.Client;
public class indexby
public static void Main()
OracleConnection con = new OracleConnection("data source=orcl;user id=scott;password=tiger;");
con.Open();
OracleCommand cmd = new OracleCommand("mypack5.test_it", con);
cmd.CommandType = CommandType.StoredProcedure;
OracleParameter Param1 = cmd.Parameters.Add("param1", OracleDbType.Varchar2);
Param1.Direction = ParameterDirection.Input;
Param1.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
Param1.Size = 3;
string[] vals = { "foo", "bar", "baz" };
Param1.Value = vals;
OracleParameter Param2 = cmd.Parameters.Add("param2", OracleDbType.Int32, DBNull.Value, ParameterDirection.Output);
cmd.ExecuteNonQuery();
Console.WriteLine("{0} records passed in", Param2.Value);
con.Close();
} -
Pl/sql table - row type records
Hi,
Is there any limit on the number of records that a pl/sql table (row type) can accomodate.Iam using oracle 10guser11200499 wrote:
I have gone thru that url, nothing on the maximum number of records that can be present in pl/sql table is given there. Will be very helpful if you can let me know if there is any such limitation.There is no such thing as a PL/SQL "+table+". A table, in Oracle terminology, means colums and rows and indexes and the ability to scale data, effectively read and process and filter and aggregate data.
A so-called PL/SQL "+table+" is nothing at all like this.
The correct term for it, and used in all other programming languages, are arrays (procedural term) and collections (object orientated term).
An array/collection is a local memory structure in the unit of code. In PL/SQL, that means PGA (process global area) memory. And as this uses server memory, you should not abuse it and only use as much that is truly needed.
Make a PL/SQL array/collection too large, and PGA grows.. and can have a very negative impact on performance. It can even cause the server to crawl to halt, where you will struggle to enter a commandline command on the server as it is spending 99% of CPU time trying to deal with memory requests and page swapping.
So what do we then use arrays/collections for in PL/SQL?
For the very same reason we use in any other programming language - dealing with managing local programming data in a more effective memory structure. Such as bulk processing when requiring a buffer variable that can be passed to and from the PL and SQL engines.
This does NOT mean using it as you would use it as if it is a SQL table. As it is not.
So to answer your question of how large a PL/SQL array or collection can be? That depends entirely on the problem you are trying to solve. If it is for example bulk processing, then typically a collection of a 100 rows provides the best balance between the amount of (expensive) PGA memory being used versus the increase in performance by reducing context switching between the PL and SQL engines.
If the rows are quite small, perhaps even a 1,000 row collection. More than that seldom decreases context switching enough to justify the increase in expensive PGA.
So what should then be used to store larger data structures in PL/SQL? GTT or Global Temporary Tables. As this is a proper SQL table structure. Can be indexed. Natively supports SQL. Can scale with data volumes.
And most importantly, it does not consume dedicated process memory and will not blow server memory. -
Oracle Portal 11g- PLS-00201 identifier 'PORTAL.WWSRC_API' must be declared
Happy Thursday Community!
Hopefuly this is the right place to ask for help, I am fairly new to Portal. I am getting below WARNING and can't move forward. I tried to give 'PORTAL.WWSRC_API' permissions to PUBLIC, still no go. I am using Oracle Designer to genearate the search results from Portal. Please, see code being used after the error list.
ERROR:
Server Generator 10.1.2.6 (Build 10.1.2.11.12) , Thu May 16 10:41:10 2013
Copyright (c) Oracle Corporation 1995, 2010. All rights reserved.
Executing generated DDL ...
Creating Procedure 'PG_SEARCH' ...
CDS-11307 Warning: (compilation error in PROCEDURE 'PG_SEARCH' at 8/22): PLS-00201: identifier 'PORTAL.WWSRC_API' must be declared
CDS-11307 Warning: (compilation error in PROCEDURE 'PG_SEARCH' at 8/22): PL/SQL: Item ignored
CDS-11307 Warning: (compilation error in PROCEDURE 'PG_SEARCH' at 10/21): PLS-00201: identifier 'PORTAL.WWSRC_API' must be declared
CDS-11307 Warning: (compilation error in PROCEDURE 'PG_SEARCH' at 10/21): PL/SQL: Item ignored
CDS-11307 Warning: (compilation error in PROCEDURE 'PG_SEARCH' at 11/17): PLS-00201: identifier 'PORTAL.WWSRC_API' must be declared
CDS-11307 Warning: (compilation error in PROCEDURE 'PG_SEARCH' at 11/17): PL/SQL: Item ignored
CDS-11307 Warning: (compilation error in PROCEDURE 'PG_SEARCH' at 24/1): PLS-00320: the declaration of the type of this expression is incomplete or malformed
CDS-11307 Warning: (compilation error in PROCEDURE 'PG_SEARCH' at 24/1): PL/SQL: Statement ignored
CDS-11307 Warning: (compilation error in PROCEDURE 'PG_SEARCH' at 27/1): PLS-00320: the declaration of the type of this expression is incomplete or malformed
CDS-11307 Warning: (compilation error in PROCEDURE 'PG_SEARCH' at 27/1): PL/SQL: Statement ignored
CDS-11307 Warning: (compilation error in PROCEDURE 'PG_SEARCH' at 44/16): PLS-00320: the declaration of the type of this expression is incomplete or malformed
CDS-11307 Warning: (compilation error in PROCEDURE 'PG_SEARCH' at 44/4): PL/SQL: Statement ignored
DDL execution complete
Processing Complete: 0 error(s), 12 warning(s)
BEGIN
DECLARE
l_rows number := 20 ;
l_pageId varchar2(100) ;
l_results portal.wwsrc_api.items_result_array_type;
l_count number;
l_scores portal.wwsrc_api.number_list_type;
l_pageGroups portal.wwsrc_api.number_list_type;
l_maxRows number;
l_text nvarchar2(30000) ;
l_url varchar2(250);
begin
-- set the response type
owa_util.mime_header('text/xml');
-- setting id of the pagegroup where your items lies
l_pageGroups(0) := 'MyPageGroup';
-- Use of the search API to get results.
l_results := portal.wwsrc_api.item_search(
p_page_groups => l_pageGroups,
p_rows => l_rows ,
p_out_count => l_count,
p_out_scores => l_scores );
-- generate response
htp.p('
<rss version="2.0">
<channel>
<generator>Oracle AS11g</generator>
<title>Some rss items</title>
<description>Description for this rss feed </description>
<language>US</language>
<buildDate>' || SYSDATE || '</buildDate>
for i in 1..l_results.count loop
htp.p('<item>');
htp.p('<title>' || l_results(i).display_name || '</title>');
htp.p('<link>http://server:port/portal/page/portal/pagegroup/page/' || l_results(i).display_name || '</link>');
htp.p('<description>' || l_results(i).description || '</description>');
htp.p('</item>');
end loop;
-- close the feed
htp.p('</channel></rss>');
end;
end; I also tried code from this URL: [http://docs.oracle.com/cd/E14571_01/portal.1111/e10238/pdg_cm_search.htm|http://docs.oracle.com/cd/E14571_01/portal.1111/e10238/pdg_cm_search.htm]
I still get the 'identifier 'WHATEVERTHEAPI' must be declared' error.
How do I avenge this one?
DököllWhat is <tt>MESSAGEUTIL</tt>?
use named parameters to keep track of the correct parameter count:"{ call MESSAGEUTIL.GET_IAF("
+ "V_PEID=> 'AVapp1lLQPakyVfqQ9UO1Q'"
+ ", V_START_TIME=> to_timestamp('21-Jan-11 01:00:00.0 AM','dd-MON-yy hh:mi:ss.F PM')"
...and leaving a space before <tt>call</tt> and before the final <tt>}</tt> meight also be a good idea...
There are some problems in here: your procedure defines out parameters that are not invoked by bind parameters in your java string. Since oracle tends to issue strange error messages this could be part of the problem. If you'r responsible for the procedure try to separate in parameters and out parameters.Defining a paramer to be both, IN and OUT is possible, but you should have a really, really good reason to do so.
BTW: the common naming convetion for parameters in PLSQL is <tt>p_...</tt>. <tt>v_...</tt> is for local variables inside a procedure.
BTW2: use java classes to pass parameters from java to PLSQL:CallableStatement cstmt = getCstmt("{ call MESSAGEUTIL.GET_IAF("
+ "V_PEID=> 'AVapp1lLQPakyVfqQ9UO1Q'"
+ ", V_START_TIME=> ? "
// how do you expect something like 'AVapp1lLQPakyVfqQ9UO1Q' beeing converted to an Integer?
cstmt.registerOutParameter(1,Types.INTEGER);
cstmt.registerOutParameter(2,Types.TIMESTAMP);
cstmt.execute();
java.sql.Timestamp timeStamp = cstmt.getTimestamp(2);bye
TPD -
Using array binding to perform multiple rowupdates in one pass
For the first time I am attempting to use array binding in VB.NET to update multiple rows via a single execution of a stored procedure. My subroutine is:
Friend Sub UpdateSolutionStatusUsingArrays(ByVal intNumBeingUpdated As Integer, ByVal arrScenarioID() As Integer, ByVal arrSolutionID() As Integer, ByVal arrInOrOut() As Integer, ByVal arrTimePeriod() As Integer)
Try
'Set up the Command object
Dim cmdUpdateSolutionStatus As OracleCommand
cmdUpdateSolutionStatus = New OracleCommand
cmdUpdateSolutionStatus.CommandType = CommandType.StoredProcedure
cmdUpdateSolutionStatus.CommandText = "ProcUpdateSolutionStatus"
cmdUpdateSolutionStatus.Connection = cnnORACLE
cmdUpdateSolutionStatus.ArrayBindCount = intNumBeingUpdated - 1
cmdUpdateSolutionStatus.CommandTimeout = CInt(tblOptions.Rows(intDatabaseIndex).Item("ConnectionTimeout"))
'Add ScenarioID array as parameter
Dim p_ScenarioID As New OracleParameter("ScenarioID", OracleDbType.Int32)
p_ScenarioID.Direction = ParameterDirection.Input
p_ScenarioID.Value = arrScenarioID
cmdUpdateSolutionStatus.Parameters.Add(p_ScenarioID)
'Add SolutionID array as parameter
Dim p_SolutionID As New OracleParameter("SolutionID", OracleDbType.Int32)
p_SolutionID.Direction = ParameterDirection.Input
p_SolutionID.Value = arrSolutionID
cmdUpdateSolutionStatus.Parameters.Add(p_SolutionID)
'Add InOrOut array as parameter
Dim p_InOrOut As New OracleParameter("InOrOut", OracleDbType.Int32)
p_InOrOut.Direction = ParameterDirection.Input
p_InOrOut.Value = arrInOrOut
cmdUpdateSolutionStatus.Parameters.Add(p_InOrOut)
'Add TimePeriod array as parameter
Dim p_TimePeriod As New OracleParameter("TimePeriod", OracleDbType.Int32)
p_TimePeriod.Direction = ParameterDirection.Input
p_TimePeriod.Value = arrTimePeriod
cmdUpdateSolutionStatus.Parameters.Add(p_TimePeriod)
'Open connection
cnnORACLE.Open()
'Run stored procedure
cmdUpdateSolutionStatus.ExecuteNonQuery()
'Tidy up
cmdUpdateSolutionStatus = Nothing
cnnORACLE.Close()
Catch ex As Exception
WriteLog("Subroutine UpdateSolutionStatusUsingArrays:" & ex.Message.ToString)
strState = "Error"
'Update Run Status to show error has occurred
cnnORACLE.Close()
UpdateRunStatusORACLE(7)
End Try
End Sub
When the routine tries to run cmdUpdateSolutionStatus.ExecuteNonQuery() I get the error message:
Unable to cast object of type 'System.Int32[]' to type 'System.IConvertible'.
I have tried all sorts of variants of the code but with no success. The arrays are being set up correctly. Anyoneone know what I'm missing?
StewartTry declaring the arrays as OracleNumber datatype instead of Integer. I've had this issue before, and I believe this is what I did to solve the problem.
-
User Defined Type - Array bind Query very slow
Hi.
I have following Problem. I try to use Oracle Instant Client 11 and ODP.NET to pass Arrays in SELECT statements as Bind Parameters. I did it, but it runs very-very slow. Example:
- Inittial Query:
SELECT tbl1.field1, tbl1.field2, tbl2.field1, tbl2.field2 ... FROM tbl1
LEFT JOIN tbl2 ON tbl1.field11=tbl2.field0
LEFT JOIN tbl3 ON tbl2.field11=tbl3.field0 AND tbll1.field5=tbl3.field1
...and another LEFT JOINS
WHERE
tbl1.field0 IN ('id01', 'id02', 'id03'...)
this query with 100 elements in "IN" on my database takes 3 seconds.
- Query with Array bind:
in Oracle I did UDT: create or replace type myschema.mytype as table of varchar2(1000)
than, as described in Oracle Example I did few classes (Factory and implementing IOracleCustomType) and use it in Query,
instead of IN ('id01', 'id02', 'id03'...) I have tbl1.field0 IN (select column_value from table(:prmTable)), and :prmTable is bound array.
this query takes 190 seconds!!! Why? I works, but the HDD of Oracle server works very hard, and it takes too long.
Oracle server we habe 10g.
PS: I tried to use only 5 elements in array - the same result, it takes also 190 seconds...
Please help!I recommend you generate an explain plan for each query and post them here. Based on what you have given the following MAY be happening:
Your first query has as static IN list when it is submitted to the server. Therefore when Oracle generates the execution plan the CBO can accurately determine it based on a KNOWN set of input parameters. However the second query has a bind variable for this list of parameters and Oracle has no way of knowing at the time the execution plan is generated what that list contains. If it does not know what the list contains it cannot generate the most optimal execution plan. Therefore I would guess that it is probably doing some sort of full table scan (although these aren't always bad, remember that!).
Again please post the execution plans for each.
HTH! -
Error - The file must match the template type. Upload one file per language
hi,
Error - The file must match the template type. Upload one file per language and territory combination.
i am getting above error while registering RTF template in oracle application e -business suite using XML publisher admistrator responsibility.
My work :
i generated xml output using concurrent program.
for this i used standard PO report,
the executable name: POXPRPOP.
i designed the template using MS Office word (for RTF template)
for this :
<?start: body?>
<? for-each: G_Headers?>
VENDOR:
<?POH_VENDOR_NAME?>
<?POH_VENDOR_COUNTRY?>
PURCHASEORDER NO.
<?POH_PO_NUM?>
SHIP TO:
<?C_COMPANY?>
<?POH_SHIP_ADDRESS_LINE1?>
<?POH_SHIP_COUNTRY?>
BILL TO:
<?C_COMPANY?>
<?POH_BILL_ADDRESS_LINE1?>
<?POH_BILL_COUNTRY?>
<?end for-each?>
<?end body?>
saved this file as "Purchasing.rtf" on desk top
i registered data definition
name:purchase order data definition.
code : short name of concurrent program.
i try to create template Or register the template in oracle e-business suite.
name: purchasing template
code: concurrent program short name
type : RTF.
file : browse from desk top (purchasing.rtf)
language:english
territory: US.
but i am getting above error
could any one help to come out of this problem.
thank you
regarding,
sai krishna@cavayaHi,
I am getting the error as
The file must match the template type. Upload one file per language and territory combination.
I have checked the template name. It doesn't exist already. Please help me.
Thanks in Advance,
Jeganathan -
Support for Array Binding and PL/SQL tables (IN, INOUT, or OUT)
I have attempted, unsuccessfully, to use array binding in stored procedure/function calls where the sp/sf has parameters that are PL/SQL tables. I have seen the topic floating around in this forum, but I have not seen the explicit questions:
- Does ODP.NET support PL/SQL tables as IN, INOUT or OUT parameters to stored procedures/functions?
- Will any planned ODP.NET release support PL/SQL tables as IN, INOUT or OUT parameters to stored procedures/functions?
I am aware that I can use REF CURSORS to handle the OUT situation, but I need to make a design decision concerning supporting parameters of IN and INOUT PL/SQL tables.
Thanks.
JamesYou really MUST do this!! - i.e. include support for PL/SQL table parameters (IN INOUT and OUT) in a future release of ODP.NET.
PL/SQL tables are a fundamental type in Oracle stored procedures and you will be preventing a huge number of existing projects from migrating to .NET if you don't acknowledge them as part and parcel of Oracle programming.
I sincerely hope support for PL/SQL table parameters is treated as a serious issue.
Think what a coup it would be for you over Microsoft (who don't currently support PL/SQL tables with their .NET native provider for Oracle and don't look as if they will at least in the short term)!
Please, please, please! -
PLS-00201: identifier 'MESSAGEUTIL.GET_IAF' must be declared
My DB Procedure:
PROCEDURE GET_IAF (
V_PEID IN OUT VARCHAR2,
V_START_TIME IN OUT TIMESTAMP,
V_END_TIME IN OUT TIMESTAMP,
V_BATCH_ID IN OUT INTEGER,
V_EPS_ID IN OUT INTEGER,
V_EVENT_ID IN OUT INTEGER,
V_USER_INPUT IN OUT VARCHAR2,
V_STARTINDEX IN NUMBER,
V_MAXROWS IN NUMBER,
V_ACCESSCOUNT IN NUMBER DEFAULT -1,
Service_Instance_Id IN VARCHAR2,
V_RESULTSCOUNT OUT NUMBER,
V_STATUS OUT VARCHAR2,
V_ERROR OUT VARCHAR2,
V_MESSAGE OUT VARCHAR2,
V_RECORDSET OUT SYS_REFCURSOR);
My Java Code:
private static final String sqlGetIAF =
"{call MESSAGEUTIL.GET_IAF('AVapp1lLQPakyVfqQ9UO1Q',to_timestamp('21-Jan-11 01:00:00.0 AM','dd-MON-yy hh:mi:ss.F PM'),to_timestamp('21-Feb-11 01:00:00.0 AM','dd-MON-yy hh.mi.ss.F PM'),0,0,3,'A',-1,10,-1,51479661,?,?,?,?,?)}";
CallableStatement cstmt = getCstmt(sqlGetIAF);
cstmt.registerOutParameter(1,Types.INTEGER);
cstmt.registerOutParameter(2,Types.VARCHAR);
cstmt.registerOutParameter(3,Types.VARCHAR);
cstmt.registerOutParameter(4,Types.VARCHAR);
cstmt.registerOutParameter(5, OracleTypes.CURSOR);
rs=cstmt.executeQuery();
I am getting the below error when i am trying to run the above sql.
The user has execute grant on the stored procdure.
Error I am getting:
Caused By: java.sql.SQLException: ORA-06550: line 1, column 7:
PLS-00201: identifier 'MESSAGEUTIL.GET_IAF' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:70)
at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:133)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:206)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:455)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:413)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:1035)
at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:191)
at oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:950)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1223)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3386)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3430)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1491)
at weblogic.jdbc.wrapper.PreparedStatement.executeQuery(PreparedStatement.java:128)
at com.cox.corp.crn.db.dao.IAFProcessDAO.getIAF(IAFProcessDAO.java:65)
at com.cox.corp.crn.mdb.IAFQueueEJBBean.onMessage(IAFQueueEJBBean.java:82)
at sun.reflect.GeneratedMethodAccessor1567.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.bea.core.repackaged.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at com.bea.core.repackaged.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:131)
at com.bea.core.repackaged.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:119)
at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at com.bea.core.repackaged.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at com.bea.core.repackaged.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:131)
at com.bea.core.repackaged.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:119)
at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at com.bea.core.repackaged.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy240.onMessage(Unknown Source)
at weblogic.ejb.container.internal.MDListener.execute(MDListener.java:466)
at weblogic.ejb.container.internal.MDListener.transactionalOnMessage(MDListener.java:371)
at weblogic.ejb.container.internal.MDListener.onMessage(MDListener.java:327)
at weblogic.jms.client.JMSSession.onMessage(JMSSession.java:4585)
at weblogic.jms.client.JMSSession.execute(JMSSession.java:4271)
at weblogic.jms.client.JMSSession.executeMessage(JMSSession.java:3747)
at weblogic.jms.client.JMSSession.access$000(JMSSession.java:114)
at weblogic.jms.client.JMSSession$UseForRunnable.run(JMSSession.java:5096)
at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:516)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)What is <tt>MESSAGEUTIL</tt>?
use named parameters to keep track of the correct parameter count:"{ call MESSAGEUTIL.GET_IAF("
+ "V_PEID=> 'AVapp1lLQPakyVfqQ9UO1Q'"
+ ", V_START_TIME=> to_timestamp('21-Jan-11 01:00:00.0 AM','dd-MON-yy hh:mi:ss.F PM')"
...and leaving a space before <tt>call</tt> and before the final <tt>}</tt> meight also be a good idea...
There are some problems in here: your procedure defines out parameters that are not invoked by bind parameters in your java string. Since oracle tends to issue strange error messages this could be part of the problem. If you'r responsible for the procedure try to separate in parameters and out parameters.Defining a paramer to be both, IN and OUT is possible, but you should have a really, really good reason to do so.
BTW: the common naming convetion for parameters in PLSQL is <tt>p_...</tt>. <tt>v_...</tt> is for local variables inside a procedure.
BTW2: use java classes to pass parameters from java to PLSQL:CallableStatement cstmt = getCstmt("{ call MESSAGEUTIL.GET_IAF("
+ "V_PEID=> 'AVapp1lLQPakyVfqQ9UO1Q'"
+ ", V_START_TIME=> ? "
// how do you expect something like 'AVapp1lLQPakyVfqQ9UO1Q' beeing converted to an Integer?
cstmt.registerOutParameter(1,Types.INTEGER);
cstmt.registerOutParameter(2,Types.TIMESTAMP);
cstmt.execute();
java.sql.Timestamp timeStamp = cstmt.getTimestamp(2);bye
TPD -
?Problem of :: "web-app" must match, help me?
hi,Experts,
Please do me a big favor, Does anybody know what is the exatly problem with my web.xml.
My tomcat version is Apache Tomcat/4.1.18.
here is the web.xml:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>newGUI</display-name>
<description>The Database</description>
<!--Filter Definitions-->
<filter>
<filter-name>theFilter</filter-name>
<filter-class>org.gui.myFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>theFilter</filter-name>
<url-pattern>/fetch.jsp</url-pattern>
</filter-mapping>
<filter>
<filter-name>theFilter</filter-name>
<filter-class>org.gui.myFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>theFilter</filter-name>
<url-pattern>/query.jsp</url-pattern>
</filter-mapping>
<!-- Taglib Definitions-->
<taglib>
<taglib-uri>
http://jsptags.com/tags/navigation/pager
</taglib-uri>
<taglib-location>
/WEB-INF/jsp/pager-taglib.tld
</taglib-location>
</taglib>
<taglib>
<taglib-uri>/jstl-c</taglib-uri>
<taglib-location>/WEB-INF/c.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/jstl-x</taglib-uri>
<taglib-location>/WEB-INF/x.tld</taglib-location>
</taglib>
</web-app>
The error message is :
SEVERE: Parse Error at line 66 column 11: The content of element type "web-app" must match "(icon?,display-name?,description?,distributable?,context-param*,filter*,filter-mapping*,listener*,
servlet*,servlet-mapping*,session-config?,mime-mapping*,welcome-file-list?,error-page*,taglib*,
resource-env-ref*,resource-ref*,security-constraint*,login-config?,security-role*,env-entry*,ejb-ref*,
ejb-local-ref*)".It is telling you either you have elements out of order, or elements that do not belong.
Try to do:
<filter>
<filter-name>theFilter</filter-name>
<filter-class>org.gui.myFilter</filter-class>
</filter>
<filter>
<filter-name>theFilter</filter-name>
<filter-class>org.gui.myFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>theFilter</filter-name>
<url-pattern>/fetch.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>theFilter</filter-name>
<url-pattern>/query.jsp</url-pattern>
</filter-mapping>Then double check spelling and such. -
PLS-00049: bad bind variable 'IN_DPC_CODE'
Hi,
I am gettig following errors while creating a stored procedure. please help me.
BEGIN
EXECUTE IMMEDIATE sql_stmt
INTO OUT_ROWNUM, OUT_DPC_CODE_ORIG, OUT_SENSOR_ID, OUT_HEADER_DATE,OUT_FIRST_BLOCK_NUMBER, LAST_BLOCK_NUMBER, OUT_RECORD_QUANTITY,OUT_FILE_ID, OUT_FILE_NAME, OUT_TRACE_SEQUENCE_NO, OUT_TRAILER_DATE, OUT_PROCESSED_DATE, OUT_ROW_NUMBER
USING :IN_DPC_CODE, :IN_SENSOR_ID, :IN_TRAILER_DATE, :IN_LAST_BLOCK_NUMBER;Hi,
Here i am sending total code. Please suggest me accordingly.
After executing this i am getting following errors.
ERROR at line 1:
ORA-06550: line 1, column 7:
PLS-00905: object NRUPWEIS.TAB_SELECT is invalid
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
SQL> show errors
Errors for PROCEDURE TAB_SELECT:
LINE/COL ERROR
92/19 PLS-00049: bad bind variable 'IN_DPC_CODE'
92/33 PLS-00049: bad bind variable 'IN_SENSOR_ID'
92/48 PLS-00049: bad bind variable 'IN_TRAILER_DATE'
92/66 PLS-00049: bad bind variable 'IN_LAST_BLOCK_NUMBER'
116/3 PLS-00103: Encountered the symbol "END"
code:
-- -- Input parameters:
-- -- ALBQ 602071 20050913153100 53290
-- -- exec tab_select('ALBQ', '602071', '053290', '20050912153100')
-- CREATE or REPLACE PROCEDURE tab_select IS
-- type curTyp is ref cursor;
-- tab_cv curTyp;
CREATE or REPLACE PROCEDURE tab_select (IN_DPC_CODE IN CHAR, IN_SENSOR_ID IN NUMBER, IN_LAST_BLOCK_NUMBER IN NUMBER,
IN_TRAILER_DATE IN CHAR) IS
sql_stmt varchar2(2000);
sql_stmt2 varchar2(2000);
IN_DPC_CODE CHAR(4);
IN_SENSOR_ID CHAR(6);
IN_TRAILER_DATE CHAR(14);
IN_LAST_BLOCK_NUMBER number;
OUT_ROWNUM number(8) := 0;
OUT_DPC_CODE_ORIG CHAR(4);
OUT_SENSOR_ID CHAR(6);
OUT_HEADER_DATE CHAR(14);
OUT_FIRST_BLOCK_NUMBER number(9) := 0;
OUT_LAST_BLOCK_NUMBER number(9) := 0;
OUT_RECORD_QUANTITY number(8) := 0;
OUT_FILE_ID CHAR(10);
OUT_FILE_NAME CHAR(30);
OUT_TRACE_SEQUENCE_NO number(5) := 0;
OUT_TRAILER_DATE CHAR(14);
OUT_PROCESSED_DATE CHAR(14);
OUT_ROW_NUMBER number(8) := 0;
BEGIN
DBMS_OUTPUT.DISABLE;
DBMS_OUTPUT.ENABLE(1000000);
DBMS_OUTPUT.PUT_LINE('**** ' );
DBMS_OUTPUT.PUT_LINE('**** BEFORE sql_stmt Line: ' || ' ' ||
IN_DPC_CODE || ' ' ||
IN_SENSOR_ID || ' ' ||
IN_TRAILER_DATE || ' ' ||
IN_LAST_BLOCK_NUMBER);
DBMS_OUTPUT.PUT_LINE('**** ' );
sql_stmt := 'SELECT rNum, dpcCode, sID, hDate, fBlock, ' ||
'lBlock, recQty, fID, fName, ' ||
'tSeqNo, sType, tDate, fStatCode, pDate, recCount, r ' ||
'FROM (SELECT rownum rNum, DPC_CODE_ORIG dpcCode, ' ||
'SENSOR_ID sID, ' ||
'to_char(HEADER_DATE, ''YYYYMMDDHH24MISS'') hDate, ' ||
'FIRST_BLOCK_NUMBER fBlock, ' ||
'LAST_BLOCK_NUMBER lBlock, ' ||
'RECORD_QUANTITY recQty, ' ||
'FILE_ID fID, ' ||
'substr(FILE_NAME,1,30) fName, ' ||
'TRACE_SEQUENCE_NO tSeqNo, ' ||
'SENSOR_TYPE sType, ' ||
'to_char(TRAILER_DATE, ''YYYYMMDDHH24MISS'') tdate, ' ||
'NVL(FILE_STATUS_CODE, ''NL'') fStatCode, ' ||
'to_char(PROCESSED_DATE, ''YYYYMMDDHH24MISS'') pDate, '||
'NVL(RECIRCULATE_COUNT, 0) recCount, ' ||
'ROW_NUMBER() ' ||
'OVER(ORDER BY LAST_BLOCK_NUMBER, TRAILER_DATE) r ' ||
'FROM logfc10t ' ||
'WHERE DPC_CODE_ORIG = :IN_DPC_CODE ' ||
'AND SENSOR_ID = :IN_SENSOR_ID ' ||
'AND (((TRAILER_DATE >= TO_DATE(:IN_TRAILER_DATE, ''YYYYMMDDHH24MISS''))' ||
'AND (LAST_BLOCK_NUMBER > :IN_LAST_BLOCK_NUMBER)) ' ||
' OR (TRAILER_DATE > TO_DATE(:IN_TRAILER_DATE, ''YYYYMMDDHH24MISS'')))) ' ||
'WHERE r = 1 ';
DBMS_OUTPUT.PUT_LINE('**** ' );
DBMS_OUTPUT.PUT_LINE('**** BEFORE execute immediate Line: ');
-- p(sql_stmt);
-- Put_Xl_line(sql_stmt);
DBMS_OUTPUT.PUT_LINE('**** ' );
BEGIN
EXECUTE IMMEDIATE sql_stmt
INTO OUT_ROWNUM, OUT_DPC_CODE_ORIG, OUT_SENSOR_ID, OUT_HEADER_DATE,
OUT_FIRST_BLOCK_NUMBER, OUT_LAST_BLOCK_NUMBER, OUT_RECORD_QUANTITY,
OUT_FILE_ID, OUT_FILE_NAME, OUT_TRACE_SEQUENCE_NO, OUT_TRAILER_DATE,
OUT_PROCESSED_DATE, OUT_ROW_NUMBER
USING :IN_DPC_CODE, :IN_SENSOR_ID, :IN_TRAILER_DATE, :IN_LAST_BLOCK_NUMBER;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('**** ' );
DBMS_OUTPUT.PUT_LINE('**** IMMED ' || sqlcode || ' ' || substr(sqlerrm,1,200));
DBMS_OUTPUT.PUT_LINE('**** ' );
END;
DBMS_OUTPUT.PUT_LINE('**** ' );
DBMS_OUTPUT.PUT_LINE('**** AFTER execute immediate Line: ');
DBMS_OUTPUT.PUT_LINE('**** ' );
DBMS_OUTPUT.PUT_LINE ('*** Next Line: ' || OUT_ROWNUM || OUT_DPC_CODE_ORIG || OUT_SENSOR_ID ||
OUT_HEADER_DATE || OUT_FIRST_BLOCK_NUMBER || OUT_LAST_BLOCK_NUMBER ||
OUT_RECORD_QUANTITY || OUT_FILE_ID || OUT_FILE_NAME ||
OUT_TRACE_SEQUENCE_NO || OUT_TRAILER_DATE || OUT_PROCESSED_DATE || OUT_ROW_NUMBER);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('**** ' );
DBMS_OUTPUT.PUT_LINE('**** ERROR ' || sqlcode || ' ' || substr(sqlerrm,1,200));
DBMS_OUTPUT.PUT_LINE('**** ' );
end;
end tab_select;
set serveroutput on
exec tab_select('OMAN', '612628', '993610', '20070214141700')
--exec tab_select('OMAN', '612628', '6434', '20070214144700')
--exec tab_select('OMAN', '612628', '13098', '20070214150200')
--exec tab_select('OMAN', '612628', '19874', '20070214151700')
--exec tab_select('OMAN', '612628', '33398', '20070214154700')
-- quit -
Exception Handling for Array Binding
Hi
1)
I am using a Stored Procedure.
I am using array binding and if i am sending an array of count 10 to be inserted in a table and only 9 got inserted,i deliberatly inserted one errorneous record in array, the count returned by ExecuteNonQuery() is 10.Why ?
How can i come to know exact number of rows inserted in table, how can i use Output variables, because the array bind count is 10 so if i add an output parameter it gives error ArrayBind count is wrong....
2)
Is it possible to roll back all the inserts if error occurs in any of the insert by Oracle engine.What it does is it inserts all correct records and leaves the errorneous record and doesn't even throw any exception or any message.
Answer - This can be achieved by using OracleTransaction and don't use Exception handling in procedure otherwise there wont be any exception thrown by procedure which is necessary to detect if an error occured during insert.If you use exception handling OracleEngine will insert correct rows and leave errorneous record and return count of inserted + non inserted records which is wrong.
Please help.
Message was edited by:
user556446
Message was edited by:
user556446You'll need to encapsulate your validation within it's own block as described below:
-- this will die on the first exception
declare
TYPE T_BADDATA_TEST IS TABLE OF VARCHAR2(1000) INDEX BY binary_integer ;
tbt T_BADDATA_TEST ;
aBadTypeFound exception ;
begin
tbt(0) := 'a';
tbt(1) := 'b';
tbt(2) := 'c';
for idx in tbt.first..tbt.last loop
if tbt(idx) = 'b' then
raise aBadTypeFound ;
else
dbms_output.put_line(tbt(idx));
end if ;
end loop ;
end ;--encapsulate the exception area in a begin/end block to handle the exception but continue on
declare
TYPE T_BADDATA_TEST IS TABLE OF VARCHAR2(1000) INDEX BY binary_integer ;
tbt T_BADDATA_TEST ;
aBadTypeFound exception ;
begin
tbt(0) := 'a';
tbt(1) := 'b';
tbt(2) := 'c';
for idx in tbt.first..tbt.last loop
BEGIN
if tbt(idx) = 'b' then
raise aBadTypeFound ;
else
dbms_output.put_line(tbt(idx));
end if ;
EXCEPTION
WHEN aBadTypeFound THEN
dbms_output.put_line(tbt(idx) || ' is bad data');
WHEN OTHERS THEN
dbms_output.put_line('exception');
END ;
end loop ;
end ;
output:
a
b is bad data
c
***/ -
. NET to call Oracle stored procedure, use an array of types of parameters
. NET to call Oracle stored procedure, use an array of types of parameters
Step1:(In the Oracle database define an array of types)
CREATE OR REPLACE TYPE STRING_VARRAY AS VARRAY (1000) OF NVARCHAR2(255)
Step2:
CREATE OR REPLACE PROCEDURE Test
(i_test in string_varray,o_result out int)
IS
BEGIN
o_result:=i_test.count;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
NULL;
WHEN OTHERS
THEN
o_result:=0;
END arraytest;
Step3:
Use System.Data.OracleClient
C# Code:
OracleConnection conn = new OracleConnection("User Id=test;Password=test;Data Source=test");
OracleCommand cmd = new OracleCommand("Test", conn);
cmd.CommandType = CommandType.StoredProcedure;
string[] str = new string[] { "11", "22" };
OracleParameter p1 = new OracleParameter("i_test", OracleType.NVarChar);
p1.Direction = ParameterDirection.Input;
p1.Value = str;
cmd.Parameters.Add(p1);
OracleParameter p2 = new OracleParameter("o_result", OracleType.Int32);
p2.Direction = ParameterDirection.Output;
cmd.Parameters.Add(p2);
int i = 0;
try
conn.Open();
cmd.ExecuteNonQuery();
i =(int) p2.Value;
catch (Exception ex)
finally
conn.Close();
Error:
Execution Failed:ORA-06550:Line 1,Column 7:
PLS-00306:Test parameters when calling the number or types of errors
ORA-06550:Line 1,Column 7:
PL/SQL:Statement ignored
Edited by: user10133982 on Jun 4, 2009 7:13 AM. NET to call Oracle stored procedure, use an array of types of parameters
The use of ODP.net(Oracle 10g), the error is still the same
Step1:(In the Oracle database define an array of types)
CREATE OR REPLACE TYPE STRING_VARRAY AS VARRAY (1000) OF NVARCHAR2(255)
Step2:
CREATE OR REPLACE PROCEDURE Test
(i_test in string_varray,o_result out int)
IS
BEGIN
o_result:=i_test.count;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
NULL;
WHEN OTHERS
THEN
o_result:=0;
END arraytest;
Step3:
ODP.NET(Oracle 10g)
OracleConnection conn = new OracleConnection("User Id=test;Password=test;Data Source=test");
OracleCommand cmd = new OracleCommand("Test", conn);
cmd.CommandType = CommandType.StoredProcedure;
string[] str = new string[2] { "11", "222" };
cmd.ArrayBindCount=2;
OracleParameter p1 = new OracleParameter("i_test", OracleDbType.NVarChar);
p1.Direction = ParameterDirection.Input;
p1.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
p1.Value = str;
p1.ArrayBindSize=new int[2]{2,3};
p1.ArrayBindStatus = new OracleParameterStatus[2]{
OracleParameterStatus.Success,
OracleParameterStatus.Success
cmd.Parameters.Add(p1);
OracleParameter p2 = new OracleParameter("o_result", OracleDbType.Int32);
p2.Direction = ParameterDirection.Output;
P2.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
p2.Value=0;
cmd.Parameters.Add(p2);
int i = 0;
try
conn.Open();
cmd.ExecuteNonQuery();
i =(int) p2.Value;
catch (Exception ex)
finally
conn.Close();
Error:
Execution Failed:ORA-06550:Line 1,Column 7:
PLS-00306:Test parameters when calling the number or types of errors
ORA-06550:Line 1,Column 7:
PL/SQL:Statement ignored
Edited by: user10133982 on Jun 5, 2009 7:48 AM -
Passing array of Types to java class
I am trying to pass a user defined type (that is an array) from PL/Sql to a javaclass. Here are the definitions that make-up the parameter to pass from PL/Sql to Java (uri_digest_array):
CREATE OR REPLACE TYPE uri_digest as object (uri VARCHAR2(256),
digest_value CLOB);
CREATE OR REPLACE TYPE uri_digest_array AS VARRAY(10) OF uri_digest;
In Oracle-land, java classes are published to PL/Sql by way of the following definition. Note that the intent here is to have compatible data-types.
CREATE OR REPLACE FUNCTION SIGNRETURNINGXML (p_array IN uri_digest_array)
RETURN LONG
AS LANGUAGE JAVA
NAME 'SignReturningXml.main(oracle.sql.Array) return java.lang.String';
Here is a fragment of the java class code:
class SignReturningXml {
public static String main(String [] [] signItems ) // I have no idea what datatype to use here!
{ . . . . The code in here would process the passed array normally from first entry to last.
Currently I get the following error:
PLS-00311: the declaration of
"SignReturningXml.main(oracle.sql.Array) return
java.lang.String" is incomplete or malformed
I could use some suggestions on resolving the datatype conflicts. Any ideas? Has anyone tried this kind of thing?
Thanks,
MichaelMichael,
At the risk of another [non] useful response, I meant that you should try searching the "Ask Tom" Web site, because usually you will find an answer to your question that has already been asked by someone else. Perhaps these will be helpful:
[url=http://asktom.oracle.com/pls/ask/f?p=4950:8:1320383202207153292::NO::F4950_P8_DISPLAYID,F4950_P8_CRITERIA:8908169959941
]Can I Pass a nested table to Java from a pl/sql procedure
[url=http://asktom.oracle.com/pls/ask/f?p=4950:8:::::F4950_P8_DISPLAYID:712625135727
]passing arrays into pl/sql stored procedures
Good Luck,
Avi. -
Insert SDO_GEOMETRY using array binding
Hi,
does anyone know howto insert the elem_info array and the ordinates array of a SDO_GEOMETRY object using array binding and ODP or if there is a way to insert the SDO_GEOMETRY object using the same technique.
/AndersThe current releases of ODP.NET do not support object types, hence no "proper" SDO_GEOMETRY support. You can retrieve the data as an XML-type as illustrated here:
Re: ODP.Net + Spatial
I know of no way to insert an SDO_GEOMETRY object using array binding at this time.
If someone else has a solution, please do post!
- Mark
Maybe you are looking for
-
Creating multiple entries in ztable with the same name
Dear sir / madam, iam new in sap-abap , i have created ztable in se11, table name zrajesh and fields i have created zemp_name and zempid which has data element and domain also. and zprice. when iam creating entries in table mataince generator eg: zem
-
Hello All, Has anybody here used Paying Company codes? I have two company codes 3000 and 9123. The Paying company code for 9123 is 3000 (this can be setup in transaction FBZP->All company codes). I created two Non-PO invoices (FB60) for each compa
-
What are the steps to downlaod video from youtube?
i wish to downlaod movies from youtube site but couldn't due to i am new on firefox website.
-
I need to transfer CS4 from my old MacBook to my new one, but get error 150:30.
Have the discs, have the serial number, have the programs transferred to my external drive and even installed on the new Mac, but when I double-click to open any of the programs, I get error code 150:30 and cannot get the program open. What I'd like
-
Photoshop 6 - slow saving process to server
Suddenly, after working with Photoshop 6 a few weeks, it takes 2-5 minutes to save a photoshop document to our server. Saving the file directly to the desktop just takes a second. The files are not heavy, only 60-100 mb. I´m not 100% sure, but I thin