Method for SQL statement
I have repeated resultset object execute statements and would like to put them in a method if possible.
The repeated part is:
Resultset rs = statement.executeQuery("select max(id) from TableMain");
rs.next();
Here is an example of what I am doing now:
Statement statement = connection.createStatement();
if((a == 0) && (b > 0))
Resultset rs = statement.executeQuery("select max(id) from TableMain");
rs.next();
a = rs.getInt(1);
//my insert sql is here to insert into another table the value of the max id....
else if((c > 0) && (d == 0))
Resultset rs = statement.executeQuery("select max(id) from TableMain");
rs.next();
c = rs.getInt(1);
//my insert sql is here to insert into another table the value of the max id....
else if((f == 0) && (g > 0))
Resultset rs = statement.executeQuery("select max(id) from TableMain");
rs.next();
f = rs.getInt(1);
///my insert sql is here to insert into another table the value of the max id....
}I need help on my attempt below because I am not sure how to do it:
public ResultSet getMaxId()
Resultset rs = statement.executeQuery("select max(id) from TableMain");
rs.next();
return rs;
}Call it like this:
else if((f == 0) && (g > 0))
getMaxId();
f = rs.getInt(1);
///my insert sql is here to insert into another table the value of the max id....
I don't see how it's repeated; all of those are mutually exclusive blocks, only one of them will run. The only thing you seem to be doing different is assigning the max id value to different variables.
Statement statement = connection.createStatement();
Resultset rs = statement.executeQuery("select max(id) from TableMain");
int tempValue = 0;
if ( rs.next() )
tempValue = rs.getInt(1);
if((a == 0) && (b > 0))
a = tempValue;
else if((c > 0) && (d == 0))
c = tempValue;
else if((f == 0) && (g > 0))
f = tempValue;
///my insert sql is here to insert into another table the value of the max id....----------------------------------------------------------------
People on the forum help others voluntarily, it's not their job.
Help them help you.
Learn how to ask questions first: http://faq.javaranch.com/java/HowToAskQuestionsOnJavaRanch
(Yes I know it's on JavaRanch but I think it applies everywhere)
EDIT: I don't know if you're doing it already but you should also use try-catch blocks and also, make sure you close your ResultSet, Statement and Connection in a finally block.
And where you have parameters for the query, use PreparedStatement instead of building the query yourself.
Edited by: nogoodatcoding on Oct 12, 2007 7:43 AM
Similar Messages
-
Date formats for SQL statements used by recordset object
Hi,
Date formatting appears to be quite problematic for Business One. I did a forum search for date issues and I don't think I saw any of them with an "answered" status. I have an issue with formatting a date for the creation of an SQL statement that the DI sends to SQL Server 2005. I need to format a date so that the localization parameters don't matter for either the client machine or SQL Server's machine. We don't have a problem as long as our machines are localized as USA.
I have PL 22 and I have a form - ours - where I use the Today() function to fill a date field. So this is a date that is not entered by the user. The result of this function is consistent with the localization parameters on my machine. We have two other date fields on the form where the user must type in the date.
As a test, I changed my machine to the UK parameters. I then set up the language parameters of Business One for English(United Kingdom). I changed the date format specifications in Business One so that its format is dd/mm/yy. I then brought up the form and the field that is formatted by the above function arrived in the form's field as dd/mm/yy. I then typed in the two other dates in the same format and added the record to the database. The form's table is user-defined.
I dismissed the form then brought it back up loaded with the new record. The date that was entered by the function appeared in USA format (mm/dd/yy). The dates that were typed in appeared in the Business One format (dd/mm/yy). This of course is not consistent.
When I looked at what got into the database, the formats were the opposite. Weird! To make matters really confusing, I run an SQL statement within SQL Server Mgt Studio, and use the WHERE clause to filter on the date that was based on the function. It didnt matter what format I used for the WHERE clause, the record came up. Does anyone have any idea about how I can ensure that I always use the correct date format for SQL statements passed by Business One to SQL Server regardless of where in the world the application is being run?
Thanks,
MikeIan,
Here's what I'm concerned about: Im using the date in a WHERE clause.
Assume the date is Aug 3, 2007.
"SELECT * FROM Table WHERE StartDate > 8/3/2007"
OR
"SELECT * FROM Table WHERE StartDate > 3/8/2007"
If the client machine is set up as USA, the today function will provide the date as formatted in the first query. If the database server is setup as lets say the UK, I believe that SQL Server query parser will interpret the date as Mar 8, 2007.
If the client machine is set up as UK, the today function will provide the date as formatted in the second query. If the database server is setup as lets say USA, I believe that SQL Server query parser will also interpret the date as Mar 8, 2007.
In both cases it would be wrong.
I know I could use the DATEPART function to get the three parts and this will make the code indifferent to the localization specs of the client machine. I need to then be able to concatenate those date parts for the WHERE clause so that the localization specifications of the database server dont matter.
Thanks,
Mike -
Buffer size for SQL statement using JDBC calls
I need to find out the buffer size for SQL statements in jave/JDBC because I need to insert or update a field that could be up to 4KB in size.
I'm not sure that I follow the question; I'm not sure which buffer size you're referring to.
If you have a field that can store up to 4k worth of data, you would create a VARCHAR2(4000) column in the Oracle database (assuming it is character data) or a BLOB column (if the data is binary). Either of those two fields can be populated from JDBC.
Justin
Distributed Database Consulting, Inc.
http://www.ddbcinc.com/askDDBC -
Need to take monthly report for SQL statements...Is there any possiblity?
Hi,
We have a requirement to find out the list of expensive sql statements in our ECC 6.0 system.
I am aware that we can see expensive sql statements which are being executed online in the TCode ST04 or DB02old.
But I want the list of statements on a monthly wise.
Is there any possibility to find out the list of expensive sql statements for the previous 3 to 4 months?If so, how do we do that?
Any report or Tcode with navigations.
Please help.
Regards,
Sudheer.Hi,
> We have a requirement to find out the list of expensive sql statements in our ECC 6.0 system.
nice.
> I am aware that we can see expensive sql statements which are being executed online in the TCode ST04 or DB02old.
expensive SQL in DB02, really?
> But I want the list of statements on a monthly wise.
> Is there any possibility to find out the list of expensive sql statements for the previous 3 to 4 months?
> If so, how do we do that?
Up to now there is no transaction available with such information. The databases partially offer solutions.
These are switched on by default of have to be setup before they could be used. So it depends on the
database and the database version which are you using.
On ORACLE 10g for example we have the AWR (Automatic Workload Repository) which should be switched on by default (depends again on the license). On ORACLE 9i statspack is available but has to be activated first.
On DB6 (latest database and SAP release) we have the so called performance warehouse.
On other databases there might be solutions too.
Besides that you can always built your own solution and grab the top 10 SQL statements from the SQL cache and
persist them in regular intervals. I have seen such solutions as well.
Kind regards,
Hermann -
Hi,
Need help to write sql statement.
create table t_dt ( dt_start date, dt_end date, amount number);
insert into t_dt values('1-Jan-10','10-Feb-10',12);
insert into t_dt values('11-Feb-10','10-Mar-10',10);
insert into t_dt values('11-Mar-10','20-Apr-10',8);
insert into t_dt values('21-Apr-10','28-Jun-10',10);
insert into t_dt values('29-Jun-10','20-Sep-10',10);
insert into t_dt values('21-Sep-10','10-Oct-10',10);
insert into t_dt values('11-Oct-10','31-Dec-10',8);
insert into t_dt values('1-Jan-11','10-Feb-11',8);
insert into t_dt values('11-Feb-11','10-Mar-11',7);
insert into t_dt values('11-Mar-11','20-Apr-11',6);
insert into t_dt values('21-Apr-11','28-Jun-11',6);
insert into t_dt values('29-Jun-11','20-Sep-11',6);
insert into t_dt values('21-Sep-11','10-Oct-11',4);
insert into t_dt values('11-Oct-11','31-Dec-11',8);
Result should be like below..
dt_start dt_end Amount
1-Jan-10 10-Feb-10 12
11-Feb-10 10-Mar-10 10
11-Mar-10 20-Apr-10 8
21-Apr-10 10-Oct-10 10
11-Oct-10 10-Feb-11 8
11-Feb-11 10-Mar-11 7
11-Mar-11 20-Sep-11 6
21-Sep-11 10-Oct-11 4
11-Oct-11 31-Dec-11 8
Just to explain the example, take a row with start date as 21-Apr-10 in the above insert statements, since it has the same amount for next two rows (i.e. with start date '29-Jun-10' and '21-Sep-10') these 3 rows should be converted to represent only 1 row in the result and the start date and end date should be changed per the result shown above.
Thanks.Hello
I think this gives yuo what you need....
SELECT
MIN(dt_start),
MAX(dt_end),
amount
FROM
( SELECT
dt_start,
dt_end,
MAX(marker) OVER(ORDER BY dt_start) marker,
amount
FROM
Select
dt_start,
dt_end,
amount,
CASE
WHEN LAG(amount) OVER(ORDER BY dt_start) <> amount THEN
ROW_NUMBER() OVER(ORDER BY dt_start)
END marker
from t_dt
GROUP BY
amount,
marker
order by
MIN(dt_start)
MIN(DT_START) MAX(DT_END) AMOUNT
01-JAN-2010 00:00:00 10-FEB-2010 00:00:00 12
11-FEB-2010 00:00:00 10-MAR-2010 00:00:00 10
11-MAR-2010 00:00:00 20-APR-2010 00:00:00 8
21-APR-2010 00:00:00 10-OCT-2010 00:00:00 10
11-OCT-2010 00:00:00 10-FEB-2011 00:00:00 8
11-FEB-2011 00:00:00 10-MAR-2011 00:00:00 7
11-MAR-2011 00:00:00 20-SEP-2011 00:00:00 6
21-SEP-2011 00:00:00 10-OCT-2011 00:00:00 4
11-OCT-2011 00:00:00 31-DEC-2011 00:00:00 8
9 rows selected.HTH
David
Edited by: Bravid on Feb 23, 2012 12:08 PM
Beaten to it by Frank! :-) -
Oracle + Unix question , Error validation for SQL statements in co process
Hi,
If I use co process in a shell script , what is the best way to do the error validation of the execution of any sql statements . I was trying to change the following code to make use of co process concept. When I tried echo $? after the execution of a "wrong statements"
it is still giving Zero output ( meaning success)
<<<<<<<<<<<<<<<<<<<<<<<<<<<
cat ${CFG_DIR}/srs_indx.lst | egrep -v '^#' | egrep -v '^[ ]*$' | while read x
do
echo " Processing values :: pre $pre tbl $tbl indx $indx tblspc $tblspc cols $cols param $param" >> ${LOGS_DIR}/srs_indx.log
sqlplus ${BIZSTG} << EOT >> ${LOGS_DIR}/srs_indx.log
set verify on timing on term on echo on feedback on serveroutput on
WHENEVER SQLERROR CONTINUE
drop index $indx;
WHENEVER SQLERROR EXIT FAILURE
alter session set query_rewrite_enabled = true;
create $pre index $indx on $tbl ($cols)
tablespace $tblspc
$param;
exit
EOT
RC=$?
if ( test $RC -ne 0 )
then
ERR_MSG="ERROR in creating index $indx for table $tbl from srs_indx.ksh of $ENVIR : $APP by `whoami`@`hostname` on `date` "
echo $ERR_MSG >> ${LOGS_DIR}/srs_indx.log
process_warning ${LOGS_DIR}/srs_indx.log
exitstat=1
else
echo "$indx created at `date`" >> ${LOGS_DIR}/srs_indx.log
fi
done
>>>>>>>>>>>>>>>>>>>>
Any help will be appreciated .
with thanks and regards
Ranjeesh K RHi,
Thanks for the response, I guess people misunderstood my question .
My question was about "error handling in case of CO PROCESS". For those who don't know about this, in case CO PROCESS you just need to login once to Oracle. In my above code It is logging in & out for each entry in the list. CO process statements may look Similar to SQL statements in pro*C. In PRO*C we use EXEC, but here print -p statements..
a sample is given for those who are new to co process.
sqlplus -s /nolog |& # Open a pipe to SQL*Plus
print -p -- 'connect user/password@instance'
print -p -- 'set feed off pause off pages 0 head off veri off line 500'
print -p -- 'set term off time off'
print -p -- "set sqlprompt ''"
print -p -- "select sysdate from dual;"
read -p SYSDATE
print -p -- "select user from dual;"
read -p USER
print -p -- "select global_name from global_name;"
read -p GLOBAL_NAME
print -p -- exit
echo SYSDATE: $SYSDATE
echo USER: $USER
echo GLOBAL_NAME: $GLOBAL_NAME
But I got stuck during error handling of these SQL statements, especially the $? / $* returns 0 even after an erroneus execution.
Regards -
Use param for SQL statement...
Hi, all,
Thanks for the help.
I have a select statement working in sqlplus:
SELECT A.addressid
FROM JOHNDOE.tb_Address A, JOHNDOE.tb_Address B
WHERE B.Addressid = 1
AND SDO_WITHIN_DISTANCE(A.Location, B.location, 'DISTANCE = 12.8 UNIT = MILE') = 'TRUE';
Now that I am coding in PL/SQL and to use a param to replace "12.8". Like the following:
var p_radius NUMBER;
exec :p_radius :=12.8;
print p_radius;
SELECT A.addressid
FROM JOHNDOE.tb_Address A, JOHNDOE.tb_Address B
WHERE B.Addressid = 1
AND SDO_WITHIN_DISTANCE(A.Location, B.location, 'DISTANCE = ' || p_radius || 'UNIT = MILE') = 'TRUE';
commit
Note that with "|| p_radius ||", this is NOT working. How should I put it?
Thanks a lot.
-xiaocaoTry putting a COLON in front of your reference to p_radius....
AND SDO_WITHIN_DISTANCE(A.Location, B.location, 'DISTANCE = ' || :p_radius || 'UNIT = MILE') = 'TRUE';
HTH
Jeff -
Alert not firing for SQL Statement Script
Hi All,
I have defined an alter which will trigger when a requisition is stuck with the requestor.
At the time i need to send an email to the requestor and update the status of the requisition to 'INCOMPLETE'.
i have defined two action sets one for email and another for update. The email part is working fine but the sql script which updates the status is not firing.
It is a standard script residing in PO directory sql.
It has two parameters
1) Requisition number 2) org_id
these two are the output of the mail alert query.
i have defined the application as 'Puchasing'
arguments as &SQL_REQ_NUMBER &SQL_ORG_ID
and gave the file name 'poresreq.sql' in the file location.
but the status is not updating.
how can i know the reason for not firing.
Regards,
JanaHi Jana;
What is your EBS and OS? Did you run query manualy? Did you get any error message?
Regard
Helios -
Interview question for sql statement
Hi Guys,
In a interview i was asked the following question considering i m using database 9i
Quote
If a client is running a query and that client complains you that query is stuck and he is not sure if that query is slow or it is not running at all, how a DBA can know the status of that query
Unquote
any responce will be appreciated
regards
Anscol sql_text format a50
col opname format a20
col machine format a10
col username format a10
col action format a10
set linesize 200
select /*+ ORDERED */
sl.username
,sl.opname
,sl.start_time
,sl.last_update_time
,sl.time_remaining
,sl.elapsed_seconds
,sa.sql_text
from v$sqlarea sa,v$session_longops sl
where sl.sql_hash_value = sa.hash_value
and sl.sql_address = sa.address
col sql_text format a45
col machine format a10
col username format a10
col action format a10
set linesize 200
SELECT /*+ ORDERED */
username
,S.LAST_CALL_ET
,to_char(LOGON_TIME,'DD/MM/YY HH24:MM:SS') Logon_Time
,s.action
,S.STATUS
,s.PROCESS
,s.sid
,s.serial#
, s.machine
, X.sql_text
FROM sys
.v_$session S
LEFT OUTER JOIN sys.v_$sqlarea X
ON s.sql_address = x.address
AND s.sql_hash_value = x.hash_value
WHERE s.type != 'BACKGROUND'
ORDER BY 2,1
/ -
ALDSP 3.0 -- schema owner for stored procedure or SQL Statement
Using ALDSP, I have a need to create a physical service based on a stored procedure or a SQL statement. I am wondering what will happen when I move to another deployment environment where the schema owner changes. In our QA and Prod environments, we have a different schema owner for all tables in the application (the DBAs believe this prevents unwanted updates to a prod environment). DSP elegantly supports this for normal table- and view-based physical services by mapping schemas through the DSP console after deployment. Will I get the same type of mapping capability for stored procedures and SQL statements? I noticed that I can add a SQL-based function to a physical service...is there a way to pass in the physical table name from that data service to the procedure or SQL statement?
Thanks,
JeffSchema name substitution should work for stored procedures just like it does for tables. If it doesn't - report a bug.
You don't get any help for sql-statement based data services - dsp doesn't parse the sql provided. One thing you could do is use the default schema (following the user of your connection pool), and not specify the schema in your sql-statement. -
SQL tuning Advisor for old statements
Hi all,
i've identified SQL ID (through snapshots AWR) that make me performance problem. This is a old select statement (Mar 10, 2008) and when i try to run sql tuning advisor, it shows me this error:
"There was a problem creating a SQL tuning task. ORA-13780: SQL statement does not exist. ORA-06512"
I've set AWR for retain 60 days of Snapshot Retention, why i can't run tuning advisor for this statement??
thanks very much for answers.
AndreaHi
The problem is that the information of AWR is based on Historical information that Oracle retrieve of historical tables . AWR means Automatic Workload Repository.
But when you execute the SQL tuning advisor task, Oracle needs retrieve the information of sql statement from SHARED POOL.
The Library Cache is a part of Shared pool and contains an area named SQLAREA that stored information of execution plan for sql statements. This memory area is managed by LRU alghoritm.(last recently used) and the error is produced because this sql statement not is stored in this memory area.
When the sql stament not reside in memory Oracle can't build the execution plan and then the error appear
Regards -
Powershell - SQL statement for WMI query
Need to input / update sql database, two main tables: server and diskDrive
The Primary key for server table is server_id which is also a foreign key in diskDrive table.
There is no primary key set in the diskDrive table.
I am able to insert all of the basic data in the server table no problem.
What I need help creating/understanding is how to account for the servers with multiple drives.
Here is my command for accounting for all drive information:
$diskDrive = gwmi -query "select * from Win32_Volume where DriveType='3' AND DriveLetter IS NOT NULL" | Select @{Name="Device";Expression={$_.DriveLetter}},`
@{Name="Capacity";Expression={[math]::round(($($_.Capacity)/1GB),2)}},`
@{Name="FreeSpace";Expression={[math]::round(($($_.FreeSpace)/1GB),2)}},`
@{Name="UsedSpace";Expression={[math]::round((($_.Capacity - $_.FreeSpace)/1GB),2)}},`
@{Name="PercentFree";Expression={[math]::round(($($_.FreeSpace)/$($_.Capacity)*100),2)}}
My thought is to create an exist statement to determine if I need to insert or update the Database:
$ServerExist = "Select server_id from server where server_name = '$ServerInfo.csname'"
if ($ServerExist) {
update statement
} else {
#Create SQL Insert Statement with your values
$insert_stmt = "INSERT INTO Server(server_name, domain_name, Manufacturer, Model, Memory)
VALUES ('$($Output.Name)','$($Output.Domain)','$($Output.Manufacturer)','$($Output.Model)','$($Output.TotalPhysicalMemory)')" -replace "\s+"," "
$cmd.CommandText = $insert_stmt
## Invoke the Insert statement
$cmd.ExecuteNonQuery()
I have tested the insert statement and that works fine. However I have not implemented the $diskDrive aspect of the insert.
Although there will be a slight difference between the insert and update statement for the diskDrive table, still need to work out the iteration aspect for sql statement.
Items that will need to be inserted/updated per drive:
Server_id
DriverLetter
Capacity
FreeSpace
UsedSpace
PercentFree
Given my $diskDrive query, I think there needs to be While($diskDrive) statement that will iterate through the drive info and then insert/update until While is finished.
However I’m not sure how that is accomplished and hoping to get some help.
Please let me know if any other information is needed.
Thanks,
Jr. AdminHello jrv,
The problem is my limited experience in powershell and how to iterate through the $diskDrive variable and pull the specific drive information including the server_id and inserting or updating the diskDrive table accordingly.
I was able to figure out how to do the insert for one specific wmi entry but in regards to the disk drive, i'm not sure how to work the scripting to run through each drive, insert/update and continue until all drives have been accounted for.
Please let me know if you need any other information. I will consider posting later on SQL forum.
Thanks,
Jr. Admin -
Hi guys,
if i'm not mistaken ,we usualy use the statement.executeQuery(sql) for sql statements such select
and the statement.executeUpdate(sql) for sql stat such update ,create, alter, drop...
what i want to do is to be able to execute any kind of sql statement and off course be able to get the ResultSet of this query ...
is there any method in java that do this job?
thanks for helping :-)Yeah, it's the execute(String) method of Statement. In the API docs for this method it says:
" The execute method executes an SQL statement and indicates the form of the first result. You must then use the methods getResultSet or getUpdateCount to retrieve the result, and getMoreResults to move to any subsequent result(s)."
You may find more useful information there.
PC² -
HOW TO: Post a SQL statement tuning request - template posting
This post is not a question, but similar to Rob van Wijk's "When your query takes too long ..." post should help to improve the quality of the requests for SQL statement tuning here on OTN.
On the OTN forum very often tuning requests about single SQL statements are posted, but the information provided is rather limited, and therefore it's not that simple to provide a meaningful advice. Instead of writing the same requests for additional information over and over again I thought I put together a post that describes how a "useful" post for such a request should look like and what information it should cover.
I've also prepared very detailed step-by-step instructions how to obtain that information on my blog, which can be used to easily gather the required information. It also covers again the details how to post the information properly here, in particular how to use the \ tag to preserve formatting and get a fixed font output:
http://oracle-randolf.blogspot.com/2009/02/basic-sql-statement-performance.html
So again: This post here describes how a "useful" post should look like and what information it ideally covers. The blog post explains in detail how to obtain that information.
In the future, rather than requesting the same additional information and explaining how to obtain it, I'll simply refer to this HOW TO post and the corresponding blog post which describes in detail how to get that information.
*Very important:*
Use the \ tag to enclose any output that should have its formatting preserved as shown below.
So if you want to use fixed font formatting that preserves the spaces etc., do the following:
\ This preserves formatting
\And it will look like this:
This preserves formatting
. . .Your post should cover the following information:
1. The SQL and a short description of its purpose
2. The version of your database with 4-digits (e.g. 10.2.0.4)
3. Optimizer related parameters
4. The TIMING and AUTOTRACE output
5. The EXPLAIN PLAN output
6. The TKPROF output snippet that corresponds to your statement
7. If you're on 10g or later, the DBMS_XPLAN.DISPLAY_CURSOR output
The above mentioned blog post describes in detail how to obtain that information.
Your post should have a meaningful subject, e.g. "SQL statement tuning request", and the message body should look similar to the following:
*-- Start of template body --*
The following SQL statement has been identified to perform poorly. It currently takes up to 10 seconds to execute, but it's supposed to take a second at most.
This is the statement:
select
from
t_demo
where
type = 'VIEW'
order by
id;It should return data from a table in a specific order.
The version of the database is 11.1.0.7.
These are the parameters relevant to the optimizer:
SQL>
SQL> show parameter optimizer
NAME TYPE VALUE
optimizer_capture_sql_plan_baselines boolean FALSE
optimizer_dynamic_sampling integer 2
optimizer_features_enable string 11.1.0.7
optimizer_index_caching integer 0
optimizer_index_cost_adj integer 100
optimizer_mode string ALL_ROWS
optimizer_secure_view_merging boolean TRUE
optimizer_use_invisible_indexes boolean FALSE
optimizer_use_pending_statistics boolean FALSE
optimizer_use_sql_plan_baselines boolean TRUE
SQL>
SQL> show parameter db_file_multi
NAME TYPE VALUE
db_file_multiblock_read_count integer 8
SQL>
SQL> show parameter db_block_size
NAME TYPE VALUE
db_block_size integer 8192
SQL>
SQL> show parameter cursor_sharing
NAME TYPE VALUE
cursor_sharing string EXACT
SQL>
SQL> column sname format a20
SQL> column pname format a20
SQL> column pval2 format a20
SQL>
SQL> select
2 sname
3 , pname
4 , pval1
5 , pval2
6 from
7 sys.aux_stats$;
SNAME PNAME PVAL1 PVAL2
SYSSTATS_INFO STATUS COMPLETED
SYSSTATS_INFO DSTART 01-30-2009 16:25
SYSSTATS_INFO DSTOP 01-30-2009 16:25
SYSSTATS_INFO FLAGS 0
SYSSTATS_MAIN CPUSPEEDNW 494,397
SYSSTATS_MAIN IOSEEKTIM 10
SYSSTATS_MAIN IOTFRSPEED 4096
SYSSTATS_MAIN SREADTIM
SYSSTATS_MAIN MREADTIM
SYSSTATS_MAIN CPUSPEED
SYSSTATS_MAIN MBRC
SYSSTATS_MAIN MAXTHR
SYSSTATS_MAIN SLAVETHR
13 rows selected.Here is the output of EXPLAIN PLAN:
SQL> explain plan for
2 -- put your statement here
3 select
4 *
5 from
6 t_demo
7 where
8 type = 'VIEW'
9 order by
10 id;
Explained.
Elapsed: 00:00:00.01
SQL>
SQL> select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
Plan hash value: 1390505571
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 1 | 60 | 0 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| T_DEMO | 1 | 60 | 0 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | IDX_DEMO | 1 | | 0 (0)| 00:00:01 |
Predicate Information (identified by operation id):
2 - access("TYPE"='VIEW')
14 rows selected.Here is the output of SQL*Plus AUTOTRACE including the TIMING information:
SQL> rem Set the ARRAYSIZE according to your application
SQL> set autotrace traceonly arraysize 100
SQL> select
2 *
3 from
4 t_demo
5 where
6 type = 'VIEW'
7 order by
8 id;
149938 rows selected.
Elapsed: 00:00:02.21
Execution Plan
Plan hash value: 1390505571
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 1 | 60 | 0 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| T_DEMO | 1 | 60 | 0 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | IDX_DEMO | 1 | | 0 (0)| 00:00:01 |
Predicate Information (identified by operation id):
2 - access("TYPE"='VIEW')
Statistics
0 recursive calls
0 db block gets
149101 consistent gets
800 physical reads
196 redo size
1077830 bytes sent via SQL*Net to client
16905 bytes received via SQL*Net from client
1501 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
149938 rows processed
SQL>
SQL> disconnect
Disconnected from Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing optionsThe TKPROF output for this statement looks like the following:
TKPROF: Release 11.1.0.7.0 - Production on Mo Feb 23 10:23:08 2009
Copyright (c) 1982, 2007, Oracle. All rights reserved.
Trace file: orcl11_ora_3376_mytrace1.trc
Sort options: default
count = number of times OCI procedure was executed
cpu = cpu time in seconds executing
elapsed = elapsed time in seconds executing
disk = number of physical reads of buffers from disk
query = number of buffers gotten for consistent read
current = number of buffers gotten in current mode (usually for update)
rows = number of rows processed by the fetch or execute call
select
from
t_demo
where
type = 'VIEW'
order by
id
call count cpu elapsed disk query current rows
Parse 1 0.00 0.00 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 1501 0.53 1.36 800 149101 0 149938
total 1503 0.53 1.36 800 149101 0 149938
Misses in library cache during parse: 0
Optimizer mode: ALL_ROWS
Parsing user id: 88
Rows Row Source Operation
149938 TABLE ACCESS BY INDEX ROWID T_DEMO (cr=149101 pr=800 pw=0 time=60042 us cost=0 size=60 card=1)
149938 INDEX RANGE SCAN IDX_DEMO (cr=1881 pr=1 pw=0 time=0 us cost=0 size=0 card=1)(object id 74895)
Elapsed times include waiting on following events:
Event waited on Times Max. Wait Total Waited
---------------------------------------- Waited ---------- ------------
SQL*Net message to client 1501 0.00 0.00
db file sequential read 800 0.05 0.80
SQL*Net message from client 1501 0.00 0.69
********************************************************************************The DBMS_XPLAN.DISPLAY_CURSOR output:
SQL> -- put your statement here
SQL> -- use the GATHER_PLAN_STATISTICS hint
SQL> -- if you're not using STATISTICS_LEVEL = ALL
SQL> select /*+ gather_plan_statistics */
2 *
3 from
4 t_demo
5 where
6 type = 'VIEW'
7 order by
8 id;
149938 rows selected.
Elapsed: 00:00:02.21
SQL>
SQL> select * from table(dbms_xplan.display_cursor(null, null, 'ALLSTATS LAST'));
PLAN_TABLE_OUTPUT
SQL_ID d4k5acu783vu8, child number 0
select /*+ gather_plan_statistics */ * from t_demo
where type = 'VIEW' order by id
Plan hash value: 1390505571
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | Reads |
| 0 | SELECT STATEMENT | | 1 | | 149K|00:00:00.02 | 149K| 1183 |
| 1 | TABLE ACCESS BY INDEX ROWID| T_DEMO | 1 | 1 | 149K|00:00:00.02 | 149K| 1183 |
|* 2 | INDEX RANGE SCAN | IDX_DEMO | 1 | 1 | 149K|00:00:00.02 | 1880 | 383 |
Predicate Information (identified by operation id):
2 - access("TYPE"='VIEW')
20 rows selected.I'm looking forward for suggestions how to improve the performance of this statement.
*-- End of template body --*
I'm sure that if you follow these instructions and obtain the information described, post them using a proper formatting (don't forget about the \ tag) you'll receive meaningful advice very soon.
So, just to make sure you didn't miss this point:Use proper formatting!
If you think I missed something important in this sample post let me know so that I can improve it.
Regards,
Randolf
Oracle related stuff blog:
http://oracle-randolf.blogspot.com/
SQLTools++ for Oracle (Open source Oracle GUI for Windows):
http://www.sqltools-plusplus.org:7676/
http://sourceforge.net/projects/sqlt-pp/Alex Nuijten wrote:
...you missed the proper formatting of the Autotrace section ;-)Alex,
can't reproduce, does it still look unformatted? Or are you simply kidding? :-)
Randolf
PS: Just noticed that it actually sometimes doesn't show the proper formatting although the code tags are there. Changing to the \ tag helped in this case, but it seems to be odd.
Edited by: Randolf Geist on Feb 23, 2009 11:28 AM
Odd behaviour of forum software -
Capture all SQL statements and archive to file in real time
Want to Capture all SQL statements and archive to file in real time?
Oracle Session Manager is the tool just you need.
Get it at http://www.wangz.net
This tools monitor how connected sessions use database instance resources in real time. You can obtain an overview of session activity sorted by a statistic of your choosing. For any given session, you can then drill down for more detail. You can further customize the information you display by specifying manual or automatic data refresh, the rate of automatic refresh.
In addition to these useful monitoring capabilities, OSM allows you to send LAN pop-up message to users of Oracle sessions.
Features:
--Capture all SQL statement text and archive to files in real time
--Pinpoints problematic database sessions and displays detailed performance and resource consumption data.
--Dynamically list sessions holding locks and other sessions who are waiting for.
--Support to kill several selected sessions
--Send LAN pop-up message to users of Oracle sessions
--Gives hit/miss ratio for library cache,dictionary cache and buffer cache periodically,helps to tune memory
--Export necessary data into file
--Modify the dynamic system parameters on the fly
--Syntax highlight for SQL statements
--An overview of your current connected instance informaiton,such as Version, SGA,License,etc
--Find out object according to File Id and Block Id
Gudu Software
http://www.wangz.netAnkitV wrote:
Hi All
I have 3 statements and I am writing some thing to a file using UTL_FILE.PUT_LINE after each statement is over. Each statement takes mentioned time to complete.
I am opening file in append mode.
statement1 (takes 2 mins)
UTL_FILE.PUT_LINE
statement2 (takes 5 mins)
UTL_FILE.PUT_LINE
statement3 (takes 10 mins)
UTL_FILE.PUT_LINE
I noticed that I am able to see contents written by UTL_FILE.PUT_LINE only after statement3 is over, not IMMEDIATELY after statement1 and statement2 are done ?
Can anybody tell me if this is correct behavior or am I missing something here ?Calling procedure must terminate before data is actually written to the file.
It is expected & correct behavior.
Maybe you are looking for
-
IPhone 4 - 4.2 upgrade killed visual voicemail
*iPhone 4 - 4.2 upgrade killed visual voicemail* Ok, I upgraded to 4.2 and deleted all previous backups, so I know I'm screwed untill the next update. I've synced, backed up, restored from backup and still no "Visual Voicemail". My voicemail only wor
-
Moving users from One Group to another
Hi Guys, I am looking for a script which will allow me to move users from One ADGroup to another ADGroup. I have checked ther scripts which are currently present. However, none of them if fixing my issue. Details: I have Different locations and users
-
Images not showing up...Please Help!
I am fairly new to web design. I recently uploaded my dreamweaver site to a hosting site using FTP. I can see all my files through the fill manager, but on the actual site everything is messed up. None of the images are showing up and the layout is c
-
Hi Experts, How can I get pension data for a given pernr. Where is this data stored. Is it in cluster B2 or in any infotype. I should create a report to get pension remuneration for given pernr. Thank you. Best Regards, Admir. Points will be rewar
-
Exception in method when trigger PDFObject WS
Hi, wonder anyone do before the PDFObject Tutorial. as i try to create a new Web Services the concept is about the same but different types... but somehow i encounter errors... as the WS has 4 methods createPdf (test.types.p1.CreatePdf parameters) ex