Count of Rows Updated with prepared statement batch
I am using a batch of prepared statements for update operation. (pstmt.executeBatch())
Configuration I am using
WLS 6.1sp2 Connection pool - Oracle Thin driver - TX Datasource
DB - Oracle 8.1.7
The batch update works well i.e data gets updated and committed. BUT I am not
getting back the count of number of rows updated.
Is there any thing more required on WLS side ?
Thanks in Advance
The Oracle drivers do not return the updated row counts from batched updates.
Try running the attached program with the thin driver
java Batch oracle.jdbc.driver.OracleDriver jdbc:oracle:thin:@host:port:database user password
You will see that returns -2, which indicates that the number of rows updated is unknown.
This does meet the JDBC spec.
"Harshad Nanal" <[email protected]> wrote in message news:3f8a455f$[email protected]..
>
I am using a batch of prepared statements for update operation. (pstmt.executeBatch())
Configuration I am using
WLS 6.1sp2 Connection pool - Oracle Thin driver - TX Datasource
DB - Oracle 8.1.7
The batch update works well i.e data gets updated and committed. BUT I am not
getting back the count of number of rows updated.
Is there any thing more required on WLS side ?
Thanks in Advance[Batch.java]
Similar Messages
-
Error handling in prepared statement batch
Hi,
For a prepared statement batch, it is not possible to know which operation failed. ... You should always perform a ROLLBACK operation in this situation.
For a generic statement batch or callable statement batch, the update counts array is only a partial array containing the actual update counts up to the point of the error. ... You can either commit or roll back the successful operations in this situation, as you prefer.
-- http://otn.oracle.com/docs/products/oracle9i/doc_library/release2/java.920/a96654/oraperf.htm#1056233
But, I want to skip failed operations and continue to excecute the remains of the batch, also, I want to improve application performance, what should I do? Is there any choice?
Best Regards,
Kevin ZhaoAccording to the Oracle docs these are not the only possible values:
Oracle9i JDBC Developer's Guide and Reference
Release 2 (9.2) chapter 12
Performance Extensions
"For a prepared statement batch, it is not possible to know which operation failed. The array has one element for each operation in the batch, and each element has a value of -3. According to the JDBC 2.0 specification, a value of -3 indicates that an operation did not complete successfully. In this case, it was presumably just one operation that actually failed, but because the JDBC driver does not know which operation that was, it labels all the batched operations as failures."
It goes on to say that for a generic statement batch it is possible to know which failed. I would like to know if similar functionality will be available for prepared statement batches in the future. -
Autogenerated key with Prepared Statement...
Hi guys,
i've a question and i need help...
how can i retrieve autogenerated key with prepared Statement?
I see examples only about statements...please post me example code..where i've to put STATEMENT.RETURN_GENERATED_KEYS?
I need to use executeUpdate()...I didn't put it anywhere. I just called the getGeneratedKeys() method without using that constant anywhere and it just worked. -
Update record with prepared statement
Below is my prepared statement that I cannot get to work, I keep getting a stack trace error that I cannot understand.
//methodClass.class
public void updateUser(String pwd,String userid,Timestamp pwdtime)
String updateStatement = "update userSec set password=(?), passwordChanged=(?) where userId =(?)";
try
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
objConn = java.sql.DriverManager.getConnection("jdbc:odbc:sensorWeek","","");
PreparedStatement ps = objConn.prepareStatement(updateStatement);
ps.setString(1, pwd);
ps.setString(2, "YES");
ps.setString(3, userid);
ps.setTimestamp(4,pwdtime);
ps.executeUpdate();
ps.close();
objConn.close();
catch (SQLException s)
System.err.println("SQL Error in updateUser Prepared Statement");
s.printStackTrace();
catch (Exception e)
System.err.println("Error in updateUser Prepared Statement");
e.printStackTrace();
}I call the ps from the jsp like so:
java.util.Date currentDate = new java.util.Date();
java.sql.Timestamp ts = new java.sql.Timestamp(currentDate.getTime());
methodClass mc = new methodClass();
mc.updateUser(request.getParameter("pwd3").toString(),request.getParameter("userId").toString(),ts);Here is the stack trace:
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: sensorPac.methodClass.updateUser(Ljava/lang/String;Ljava/lang/String;Ljava/sql/Timestamp;)V
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:254)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:432)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:356)
at org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:430)
at org.apache.jsp.checkPwd_jsp._jspService(checkPwd_jsp.java:69)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:137)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:210)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2416)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:601)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:392)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619)
at java.lang.Thread.run(Thread.java:534)
root cause
javax.servlet.ServletException: sensorPac.methodClass.updateUser(Ljava/lang/String;Ljava/lang/String;Ljava/sql/Timestamp;)V
at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:536)
at org.apache.jsp.changePwd_jsp._jspService(changePwd_jsp.java:295)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:137)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:210)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:432)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:356)
at org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:430)
at org.apache.jsp.checkPwd_jsp._jspService(checkPwd_jsp.java:69)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:137)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:210)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2416)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:601)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:392)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619)
at java.lang.Thread.run(Thread.java:534)
Any Ideas?
Thanks!!Sorry, I mistyped the statement, here is the corrected statement:
public void updateUser(String pwd,String userid,Timestamp pwdtime)
String updateStatement = "update userSec set password=(?), passwordChanged=(?),passwordChTime = (?) where userId =(?)";
try
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
objConn = java.sql.DriverManager.getConnection("jdbc:odbc:sensorWeek","","");
PreparedStatement ps = objConn.prepareStatement(updateStatement);
ps.setString(1, pwd);
ps.setString(2, "YES");
ps.setTimestamp(3,pwdtime);
ps.setString(4, userid);
ps.executeUpdate();
ps.close();
objConn.close();
catch (SQLException s)
System.err.println("SQL Error in updateUser Prepared Statement");
s.printStackTrace();
catch (Exception e)
System.err.println("Error in updateUser Prepared Statement");
e.printStackTrace();
} -
Update with case statement problem.
Hi,
I have this statement
update tab_tr set col_rate =
case
when col_ern_type in ('031','035','036') then (1.5 * col_rate)
when col_ern_type in ('041','045','046') then (2 * col_rate)
end;this statement updated some 2 million rows in the table tab_tr. But the total count of rows for col_ern_type in ('031','035','036', '041','045','046') yeild only around 222642 rows.
select count(*) from tab_tr where col_ern_type in ('031','035','036', '041','045','046'); --> 222642 rowswhat is the problem with the above update statement.
Thank you,Hi,
DBA_1976 wrote:
... I thought the case statement conditions are counted as the where condition. But ......A CASE expression just takes the place of some other expression, such as a literal, a function, or a column.
For example, which rows do you think this should update?
UPDATE tab_tr
SET col_rate = 100;It would update all rows, of course.
How about this statement?
UPDATE tab_tr
SET col_rate = column_x;Will it only change the rows where column_x are a certain value, or not NULL, or in any way depend on column_x? No, of course not. It will update all rows.
How about this statement?
UPDATE tab_tr
SET col_rate = function_y (col_ern_type);Will it only change the rows where the fucntion returns a certain value? Will it depend on the value in col_ern_type? No, of course not. It calls the function for each row, and whatever the function returns (even if the function returns NULL), that's what goes into col_rate on each row.
A CASE expression is just something that you can substitute in place of any other expression, such as the literal 100, or the column column_x, or the function function_y in the statements above. Naturally, the value that gets put into col_rate will depend on what the CASE expression returns, but the behavior of the UPDATE statement as a whole will not. -
Problem with Prepared Statement & MS Access
Hi
I have tried to find some info about this but can't see anything specific to what I think the problem may be. Hopefully someone can point me in the right direction.I am trying to get information out of an MS Access database using a Prepared Statement but I am getting strange results.
When I run the query in the database it gives me the correct totals (�51) for 4 records. When I run the Prepared Statement ,I get 81. Has it got anything to do with the data type I am using( sorry if this is a really basic question). here is my code- the connection etc is elsewhere.
private void getReportMoneyTotal() throws SQLException
Calendar todayTotal =Calendar.getInstance() ;
SimpleDateFormat reportDateFormat = new SimpleDateFormat("dd MM yyyy");
PreparedStatement preparedT =context.getConnection().prepareStatement(
"SELECT Sum(tblSession.Fee) AS Total, Count(tblBooking.BookingID) AS CountOfBookingID FROM tblSession INNER JOIN "+
"(tblBooking INNER JOIN tblCustomer_Booking ON tblBooking.BookingID = tblCustomer_Booking.BookingID) ON tblSession.SessionID = tblBooking.SessionID "+
"WHERE (((tblBooking.EventDate)>DateAdd('m',-1,#"+reportDateFormat.format(todayTotal.getTime())+"#)) AND ((tblSession.Session)='Morning' Or (tblSession.Session)='Evening')) OR (((tblSession.Session)='Afternoon') AND ((tblBooking.Extension)=Yes))"
ResultSet resultTotal =preparedT.executeQuery();
resultTotal.next();
Double total =resultTotal.getDouble("Total");
Locale locale = new Locale("GBP");
NumberFormat gbpFormat = NumberFormat.getCurrencyInstance(locale);
System.out.println(gbpFormat.format(total));
preparedT.close();
}I do realise that my code probably isn't very elegant but I'm only learning!Hi Matt--
I am not clear if you are saving the url with the # # around
the text or if
the
data already contains the # marks.
When you insert a link, you want to make sure you insert is
insert into table ( link1) values ( <cfqueryparam
cfsqltype="cf_sql_varchar"
value='#linkvaluehere#'> )
remember to
1) enclose your data's value inside quotes (some databases
are picky about
single v. double quotes).
2) if it IS in quotes, swap doubles for singles and see if
that helps.
3) make sure your data being saved is NOT double hashed like
'##linkvalueher##'. Double ##'s tell
Coldfusion not to treat it as a variable.
hope his helps,
tami
"Mattastic" <[email protected]> wrote in
message
news:f9c7h0$8ub$[email protected]..
| Hi Folks,
|
| I'm storing a link in a nvarchar field in SQL server,
www.foo.co.uk, it
looks
| and works fine in SQL server. Problem occurs when I setup
an ADP in Access
and
| insert links. Certain links have a hash symbol around them.
so
|
http://www.foo.co.uk, would be #
http://www.foo.co.uk# which is
causing
problems.
|
| Can anyone tell me why this is happening? and how to stop
it?
|
| Thankyou
| -
Multiple prepared statements batch execution
Hi,
I have many different select SQLs I would like to execute in a batch.
Its not a problem if they are simple SQLs, you simply use the statement object and addBatch(sql) to it and then execute the entire batch.
But I would like these SQLs to be of a prepared statement format (meaning with ? and so on).
I know its possible if they are all of same prepared statement SQL and I can bind varabiles to then and write addBatch() and so on. but the the SQLs are different then one another (different tables and so on).
is it possible?The sqls are different.
However, when you create 1prepared statement, during its creation you give it, its sql.
that sql should be only 1 command.That doesn't make it clear. I can make one prepared statement that has multiple SQL statements in it.
There is no rule that states that it must only have one SQL statement.
if I enable a simple prepared statement to accept a sql which is build from several
commands it might mean that there was some sql injection there.Then I can only suppose that you are using prepared statements incorrectly. However, excluding building SQL statement itself, I have no idea how you would construct a prepared statement that would allow an injection attack. And building the SQL statement itself is exactly what prepared statements and a solution in terms of injection attacks prevent.
the solution of providing several sqls in the prepared statement constructor is not a valid option from my perspective.You might believe so. You might have a reason for that although I have no idea what it is. It certainly isn't due to injection attacks because that isn't a valid reason.
That doesn't mean that it can't be done. -
Problem in Wilcard Search (%) with Prepared Statement
Hello Everyone,
Im trying to search using the like operator within a prepared statement. The program compiles , but when I execute it I get an empty result set.
I tried the same query in Query Analyser in SQL Server 2000 and it worked flawlessly.
I searched on this forum also and I read recommendations suggesting
to put the ? in like '?' This gives me an error.
Ive tried all options I could get my hands on ,now I request you all to please provide me some guidance.
Thankyou
The code snippet is as follows :
String sDay= "%"+startDay+"%";
ps= con.prepareStatement("Select * from Testdb where days like ? ");
ps.setString(1,sDay);
As I said earlier, this query returns and empty result set.
Thankyou once again.Its next to impossible for me to switch to Statement from prepared S. because the Query has got way to many conditions and its next to impossible to handle all those in a statement.
I had originally started out with statement itself but then I switched to prepared statement as it was getting unmanageable.
I'll try finding a work around whereby I split the query into two parts using the manageable part and the Wilcard search in the statement and the other unmanageable part in the PS.
Else I will again have to attempt that. I had also had a feeling this was affecting it.
Thanks for the help.
If anyone has some solution please post it .
Thank you. -
Error 01006 with prepared statement
I have the 1006 error with the statement:
prepstmt = conn.prepareStatement
select col from table where col = '?'
The parameter is set with setString().
I tried with the oracle 815 and 817 drivers.where i've to put STATEMENT.RETURN_GENERATED_KEYS?
I need to use executeUpdate()...I didn't put it anywhere. I just called the getGeneratedKeys() method without using that constant anywhere and it just worked. -
Problems with Prepared Statement
Hi,
I am developing an Java Bean that reads from a database of Entertainments of my home city of Glasgow and displays that info to a text area. I want the User to input the type of Entertainment they want e.g. Bars or Clubs, and the name of the place they want to go and then the Java Bean displays the info of the specified place.
The program works fine if I set the Query to display the data from the database but I want the User to define the query by thier input.
So I used Prepared Statements, but I have error messages saying that
Syntax Error in FROM Clause
my code to query the database is shown below
String query ="SELECT * FROM ? WHERE Name=?";
PreparedStatement PresStatement=con.prepareStatement(query);
//my input to test Database.will change to variable
PreStatement.setString(1,"Pubs");
PreStatement.setString(2,"Admiral");
ResultSet rs=PreStatement.executeQuery();The Problem seems to the placholder after the FROM clause but I can't seem to fix it.
Any Help would be greatly appreciated.
Regards
Brianjust a guess here, but I'd imagine it's because of the way PreparedStatement handles Strings. Obviously, if you're using a String as part of your SQL query, you're going to want single quotes around the entire thing. Thus, the first setString() is probably trying to put single quotes around the table name, which could be causing problems.
You don't really lose anything if you just work around this by changing your code to..
tableName = "Pubs"; //or this is probably coming from your user
String query ="SELECT * FROM "+tableName+" WHERE Name=?";
PreparedStatement PresStatement=con.prepareStatement(query);
//my input to test Database.will change to variable
PreStatement.setString(1,"Admiral");
ResultSet rs=PreStatement.executeQuery(); -
Query tuning - update with join statement
Hi,
I have 2 tables (table1 and table 2) with following condition:
TABLE 1 - Need to selection a column say staus ! = 'C'
join emp_id and project_id of TABLE1 and TABLE2
From join I am selecting minimun and maximum of TABLE2.salary and updating TABLE3 respective column.
Now as per requirement I have to update required column on TABLE2.EMP_ID = TABLE3.EMP_ID
Following is the query I have written,
update TABLE3 T3
set (T3.MIN_salary, T3.MAX_salary) = (
select min(c.salary), max(c.salary)
from TABLE2 t2, TABLE1 t1
where t2.emp_id = t1.emp_id
and t2.project_id = t1.project_id
and t1.status != 'C'
and t2.emp_id = t3.emp_id)
The above query takes 7 min to update some 8 lakhs records. Can you please suggest some other optimized method to do so?
Thanks in advance
SandeepHi SBH
Required info for "Please provide oracle version, indexes on the 3 tables and also stats info for the table from user_tables"
1) Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit
2) Index is not there on TABLE3 (It is temporary table)
Composite index on TABLE 1 - column1, column2 - Index name say table1index1
Composite index on TABLE 2 - column1, column2 - Index name say table2index1
TABLE_NAME NUM_ROWS BLOCKS DEGREE INSTANCES SAMPLE_SIZE PARTITIONED
FXO_CFW 11767341 144930 1 1 11767341 NO
FXO_RSL_STBL 1 1 NO
FXO_TRN 4917778 230196 1 1 4917778 NO
execution plan is:
Execution Plan
Plan hash value: 3131833900
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | UPDATE STATEMENT | | 789K| 23M| 2397 (3)| 00:00:29 |
| 1 | UPDATE | TABLE3 | | | |
| 2 | TABLE ACCESS FULL | TABLE3 | 789K| 23M| 2397 (3)| 00:00:29 |
| 3 | SORT AGGREGATE | | 1 | 28 | | |
| 4 | TABLE ACCESS BY INDEX ROWID | TABLE2 | 1 | 17 | 3 (0)| 00:00:01 |
| 5 | NESTED LOOPS | | 1 | 28 | 12 (0)| 00:00:01 |
|* 6 | TABLE ACCESS BY INDEX ROWID| TABLE1 | 1 | 11 | 9 (0)| 00:00:01 |
|* 7 | INDEX RANGE SCAN | IDX_TABLE1INDEX1 | 6 | | 3 (0)| 00:00:01 |
|* 8 | INDEX RANGE SCAN | IDX_TABLE2INDEX1 | 1 | | 2 (0)| 00:00:01 |
Thanks for quick response,
Sandeep -
Getting SQL errors with prepared statement in JDeveloper 10.1.3.2
I'm using oracle JDBC driver and I connect and update just fine from the SQL Worksheet in JDeveloper.
1) When I have more than 1 placeholder in my SQL statement, the last one is dropped so I get "Invalid column index".
2) When I add an extra one, it prepares OK but gets "ORA-01745: invalid host/bind variable name" on execution if the placeholder is inside the SQL closing paren (this situation is showed below).
3) When an extra one is outside the SQL closing paren, I get "ORA-00933: SQL command not properly ended"
I'm probably missing something obvious but here is the code I'm using:
public void insertToDB(Comment inrecord) throws Exception {
int idx = 0;
try {
this.initialize();
pstmt = conn.prepareStatement(
"INSERT INTO COMMENTS (COMMENT_ID, " +
"LOG_BUS_PROC_CDE, TYPE_CDE, SUBTYPE_CDE, " +
"REF_TYP_CDE, CREATE_USER, CREATE_DATE, " +
"UPDATED_USER, UPDATED_DATE, COMMENT_TEXT) VALUES(" +
"TO_TIMESTAMP('?','YYYY-MM-DD HH24:MI:SS.FF3'), ?, ?, " +
"?, ?, ?, TO_DATE(?,'MM/DD/YYYY'), NULL, NULL, ? ?)");
pstmt.setString(++idx,inrecord.getCommentID());
pstmt.setString(++idx,inrecord.getLogBusProcCDE());
pstmt.setString(++idx,inrecord.getTypeCDE());
pstmt.setString(++idx,inrecord.getSubTypeCDE());
pstmt.setString(++idx,inrecord.getRefTypCDE());
pstmt.setString(++idx,inrecord.getCreateUser());
pstmt.setString(++idx,inrecord.getCreateDate());
pstmt.setString(++idx,inrecord.getCommentTXT());
pstmt.executeUpdate();
conn.commit();
this.terminate();
catch (Exception e) {
conn.rollback();
this.terminate();
throw e;
}Hi,
actually you increment the index
pstmt.setString(++idx,inrecord.getCommentID());
which means you never have an index of 0 but always start with 1
Frank -
Problems with prepared statement in MYSQL.
I 've this code:
String sql = "UPDATE dcr SET Fecha=?, Origen=?, Destino=?, Mensaje=?, Estado=? WHERE IDDCR=? AND IDUsuario=?";
PreparedStatement st = cn.prepareStatement(sql);
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
java.sql.Date sqlDate = java.sql.Date.valueOf(fmt.format(this.fecha));
st.setDate(1, sqlDate);
st.setString(2, this.origen);
st.setString(3, this.destino);
st.setString(4, this.mensaje);
st.setString(5, this.estado);
st.setString(6, this.primaryKey);
st.setString(7, this.usuario);
I receive a SQLException with this message "Callable statments not supported" when the line "PreparedStatement st = cn.prepareStatement(sql)" is executed.
My JDBC Driver is "mysql-connector-java-3.0.11-stable-bin" and my server is "*MySQL 4.0.17-max"*.
Anybody see where is the problem?
Tnaks in advance.
Ricardo.I've more information about this problem.
If I take my code and put it in a class with a main function it works fine.
The original code is a part of a DAO pattern object that is invoked by a servlet (is the storeObject function).
The servlet create a record, send a native TCP/IP transaction to a external system and whit this code update the record previously created with the result of the transaction.
The system uses connection pooling. But the conection used in create of the record is diferent from the used in this code. (It's returned to the Datasource) All objects of the database process are closed in a finaly block before return the connection. (Statements, PreparedStatements , ResultSets, etc...)
Thanks in advance.
Ricardo -
Problem with prepared statement where cluase when passing string value.Help
I am updating a table using the following code. I am using string parameter in where clause. if I use Long parameter in where clause with ps.setLong , this code is working. Is there any special way to pass string value? Am I doing anything wrong?
===================
updateMPSQL.append("UPDATE MP_Table SET ");
updateMPSQL.append("MPRqmt = ?,End_Dt = ? ");
updateMPSQL.append("where POS = ? ");
System.out.println(updateMPSQL.toString());
con = getConnection(false) ;
ps = con.prepareStatement(updateMPSQL.toString());
ps.setLong(1,MPB.getMPRqmt());
ps.setDate(2,MPB.getEnd_Dt());
ps.setString(3,MPB.getPos());
result = ps.execute();
System.out.println("Result : " + result);
==========
Please help me.
Thanks in advance.
Regards,
Sekhardoesn't Pos look like a number rather than a string variable?
if I use Long
parameter in where clause with ps.setLong , this code
is working.
updateMPSQL.append("where POS = ? ");
ps.setString(3,MPB.getPos()); -
Hello,
I want to use case in update statement.
For example I have a table whose name is Item. There are 20 fields in this table. StockHoldType, Quantity and Amount are three of them.
I want to update quantity or amount fields according to stockholdtype fields value. If stockholdtype is 1 , I will update quantity field,
if stockholdtype field is 2 I will update amount field.
How can I do this?upadte table_name
set Quantity = decode(stockholdtype,1,+new_value+,quantity),
amount = decode(stockholdtype,2,+new_value+,amount)
where stockholdtype in (1,2)
Maybe you are looking for
-
CPU alert w/ Firefox - computer slowing, stalling - why? fix?
Am getting Alert - high CPU usage generated by FireFox - system slowing down, stalling. Is there a quick fix? HELP
-
Development, Quality , Production server
Dear Experts, I am new to SAP HR , Can some one help to understand the following terms. 1. Development server , where it has more clients. I am not able to understand it , like why it is being used. 2. Quality server - What is the purpose of it ? 3.
-
Need to change my 2008 Brainshare Jacket
Is anybody out there who got 2008 a Brainshare jacket size M and is a bit oversized for it? Well, I got one size L and I'm a bit undersized for it. I didn't really use it and would like to change it for a jacket that fits.
-
Want to do mass processing for inspection lots with status SPRQ
Hello, My company using early lot creation for 04 inspection type. We have thousands of inspection lots with status "UD ICCO SPRQ PRII PRSI STUP". Now due to SPRQ status, system is not closing process orders associated with thousands of inspection
-
I have a sync account but it will not let me set it up
I dont seem to have this feature add a device. where is it?