Inputs on update query tuning
I'm doing follwoing update
update ide_fact_sales_base ide1
set log_del_ind = 'Y'
where work_grp_id in (2900,2901)
and crt_date_time <> (select max(crt_date_time) from ide_fact_sales_base ide2
where ide2.inv_sales_id = ide1.inv_sales_id
and ide2.conf_stk_mvt_id = ide1.conf_stk_mvt_id
and imi_trans_type_id not in (2,25))
and imi_trans_type_id not in (25,2)
and log_del_ind is null;
But it's taking so much time , Can i know how to tune this query ?
STATEMENT_ID TIMESTAMP REMARKS OPERATION OPTIONS OBJECT_NODE OBJECT_OWNER OBJECT_NAME OBJECT_INSTANCE OBJECT_TYPE OPTIMIZER SEARCH_COLUMNS ID PARENT_ID POSITION COST CARDINALITY BYTES OTHER_TAG PARTITION_START PARTITION_STOP PARTITION_ID OTHER DISTRIBUTION
11/11/2011 6:07 UPDATE STATEMENT CHOOSE 0 92191 92191 176390 5115310
11/11/2011 6:07 UPDATE DFNOWNER IDE_FACT_SALES_BASE 1 0 1
11/11/2011 6:07 FILTER 2 1 1
11/11/2011 6:07 TABLE ACCESS FULL DFNOWNER IDE_FACT_SALES_BASE 1 ANALYZED 3 2 1 92191 176390 5115310
11/11/2011 6:07 INDEX RANGE SCAN DFNOWNER IDE_FIX_IDX NON-UNIQUE ANALYZED 6 5 1 3 1
11/11/2011 6:07 TABLE ACCESS BY INDEX ROWID DFNOWNER IDE_FACT_SALES_BASE 2 ANALYZED 5 4 1 4 1 25
11/11/2011 6:07 SORT AGGREGATE 4 2 2 1 25
MERGE INTO ide_fact_sales_base ide1
USING (SELECT ide1.ROWID ri
FROM ide_fact_sales_base ide1
WHERE work_grp_id IN (2900, 2901)
AND crt_date_time IN (
SELECT MAX (crt_date_time)
FROM ide_fact_sales_base ide2
WHERE ide2.inv_sales_id = ide1.inv_sales_id
AND ide2.conf_stk_mvt_id = ide1.conf_stk_mvt_id
AND imi_trans_type_id NOT IN (2, 25))
AND imi_trans_type_id NOT IN (25, 2)
AND log_del_ind IS NULL) b
ON (ide1.ROWID = b.ri)
WHEN MATCHED THEN
UPDATE
SET log_del_ind = 'Y'
please post query explain plan
Similar Messages
-
Update query with prompt to input percentage
Hi I'm just starting out with Access I need to do an update query with a prompt asking the user to enter a percentage this what i have done "ProdSellPrice+ProdSellPrice *[Enter a Percentage] and I've all so done this "[ProdSellPrice]+[ProdSellPrice]
*[Enter a Percentage]" but still not working.The expression to add a percentage to a value is v*(1+(p/100)) where v is the value and p is the percentage. e.g. in the debug window:
v = 52
p= 10
? v *(1+(p/100))
57.2
So the SQL statement would be:
UPDATE tblProduct
SET ProdSellPrice = ProdSellPrice * (1+([Enter a Percentage]/100));
Ken Sheridan, Stafford, England -
Update query not working from edit page
Next incident with the guestbook saga:
Successful execution of gb_entry_mstr_det_e.cfm with URL:
http://www.benoitsystems.com/ww/bd/gb/gb_entry_mstr_det_e.cfm?call_number=14 all have database current info...this is good, but:
textboxes
Problem 1:
the SELECT field does not does not reflect/display the correct option I know exists in the database
the database field whence this SELECT object is supposed to display is a number, not text.
now,...
Problem 2:
Clicked on "Update Your Entry" button at bottom of edit page (to update by going to gb_confirm_update.cfm)
<INPUT
TYPE="submit"
NAME="submit"
VALUE="Update Your Entry">
then, arriving at the gb_confirm_update.cfm page, ...
Got an error (below) executing the page: gb_confirm_update.cfm with resulting URL:
http://www.benoitsystems.com/ww/bd/gb/gb_confirm_update.cfm?call_number=#gb_entryID#
--- snippet from template gb_confirm_update.cfm
<CFQUERY DATASOURCE="9130.ww" NAME="ww_gb_ud">
UPDATE gb_entries
SET
gb_entry_stts_='form.gb_entry_stts_',
gb_entry_nm_f='form.gb_entry_nm_f',
gb_entry_nm_l='form.gb_entry_nm_l',
gb_entry_nm_l_dspl_x=form.gb_entry_nm_l_dspl_x,
gb_entry_tce='form.gb_entry_tce',
gb_entry_tce_dspl_x=form.gb_entry_tce_dspl_x,
gb_entry_cy='form.gb_entry_cy',
gb_entry_stt='form.gb_entry_stt',
gb_entry_instr='form.gb_entry_instr',
gb_entry_m='form.gb_entry_m',
gb_entry_del_x=form.gb_entry_del_x
WHERE gb_entryID=form.gb_entryID
</CFQUERY>
--- end snippet ---
=================================================
Error Executing Database Query.
[Macromedia][SequeLink JDBC Driver][ODBC Socket][Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 4.
The error occurred in E:\benoitsystems.com\wwwroot\ww\bd\gb\gb_confirm_update.cfm: line 2
1 : <!--- <CFUPDATE DATASOURCE="9130.ww" TABLENAME="gb_entries"> --->
2 : <CFQUERY DATASOURCE="9130.ww" NAME="ww_gb_ud">
3 : UPDATE gb_entries
4 : SET
SQL UPDATE gb_entries SET gb_entry_stts_='form.gb_entry_stts_', gb_entry_nm_f='form.gb_entry_nm_f', gb_entry_nm_l='form.gb_entry_nm_l', gb_entry_nm_l_dspl_x=form.gb_entry_nm_l_dspl_x, gb_entry_tce='form.gb_entry_tce', gb_entry_tce_dspl_x=form.gb_entry_tce_dspl_x, gb_entry_cy='form.gb_entry_cy', gb_entry_stt='form.gb_entry_stt', gb_entry_instr='form.gb_entry_instr', gb_entry_m='form.gb_entry_m', gb_entry_del_x=form.gb_entry_del_x WHERE gb_entryID=form.gb_entryID
DATASOURCE 9130.ww
VENDORERRORCODE -3010
SQLSTATE 07002
Please try the following:
Check the ColdFusion documentation to verify that you are using the correct syntax.
Search the Knowledge Base to find a solution to your problem.
Browser Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
Remote Address 71.233.234.226
Referrer http://www.benoitsystems.com/ww/bd/gb/gb_entry_mstr_det_e.cfm?call_number=14
Date/Time 21-Jul-10 03:11 PM
=================================================
I have every NAME of each object matching, verbatum, in the UPDATE query, and every database field name correct in teh query also.I was encouraged to send snippets in an another submission, and now I believe it is best that I "lay my cards on the table"
Here's my hand:
Pages in question for your review:
http://www.benoitsystems.com/ww/bd/gb/gb_mstr.cfm click on the pencil (the toilet will delete the record.
http://www.benoitsystems.com/ww/bd/gb/gb_entry_mstr_det_e.cfm?call_number=21 go to bottom of webpage and click “Update Your Entry”
http://www.benoitsystems.com/ww/bd/gb/gb_confirm_update.cfm?call_number=#gb_entryID#
In your review of the above (should you choose) before clicking on the pencil, look at the status on the master listing record you will be editing, and feel free to edit. Most statuses will be “Hold”
Two dummy MS Access database tables:
Table 1: "gb_entries" (Guestbook)
field 1: gb_entries_ID (Autonumber - Long Integer)
field 2: gb_entries_dt (date/time)
field 3: gb_entries_nm_f (Text)
field 4: gb_entries_nm_l (Text)
field 5: gb_entries_nm_stts_ (Number field - Byte (not bit)) (fed by gb_sttsID)
couple other text fields
field 6: gb_entries_em (Text)
field 7: gb_entries_cy (Text)
field 8: gb_entries_stt (Text)
field 9: gb_entries_nm_l_dspl (Yes/No or True/False)
field 10: gb_entries_m (Memo type)
Table 2: "gb_stts_rf" (Guestbook Status Reference)
field 1: gb_sttsID (Autonumber - Long Integer)
field 2: gb_stts (Text)
Two Templates:
This is the edit page (where a person with administrative access may edit the status or change the spelling for someone, etc.):
<!--- This query fills the form with the chosen record data (except for the darned SELECT object) ---> <CFQUERY NAME="edit_entry" DATASOURCE="9130.ww"> SELECT * FROM gb_entries WHERE #call_number#=gb_entryID </CFQUERY>
<!--- This query is for the select dropdown of guestbook status options (set to default on “Hold” from gb_nw.cfm) ---> <CFQUERY NAME="q_stts" DATASOURCE="9130.ww"> SELECT * FROM gb_stts_rf </CFQUERY>
<HTML>
<HEAD>
<TITLE>Woodwindology Guestbook Entry Edit Page</TITLE> <CFOUTPUT QUERY="incl_css_bd">#incl_code#</CFOUTPUT>
</HEAD>
<BODY
BGPROPERTIES="fixed">
<DIV ALIGN="center">
<IMG
SRC="<CFOUTPUT>#baseurl#</CFOUTPUT>md/img/ut/ttl/pg/guestbook.gif"
BORDER="0">
<BR>
<IMG
SRC="<CFOUTPUT>#baseurl#</CFOUTPUT>md/img/ut/ttl/sub/edit_entry.gif"
BORDER="0">
<BR>
Developer View
</DIV>
<TABLE>
<TR>
<TD>
<TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="5"
CELLSPACING="0">
<TR>
<TD VALIGN="top">
<FORM
NAME="f_gb_entry_mstr"
ACTION="gb_confirm_update.cfm?call_number=#gb_entryID#"
METHOD="post">
<CFOUTPUT QUERY="edit_entry">
<B>Entry ID:</B>
#gb_entryID#
<INPUT
TYPE="hidden"
NAME="gb_entryID"
VALUE="#gb_entryID#">
<P>
<B>Entry Date and Time:</B>
#DateFormat("#gb_entry_dt#","mmmm d, yyyy")# #TimeFormat("#gb_entry_dt#","h:mm tt")#
<P>
<B>Entry Status:</B>
<SELECT
NAME="gb_entry_stts_"
VALUE="#gb_entry_stts_#">
</CFOUTPUT>
<CFOUTPUT QUERY="q_stts">
<OPTION VALUE="#gb_sttsID#">#gb_stts#</OPTION>
</CFOUTPUT>
</SELECT>
<P>
<CFOUTPUT QUERY="edit_entry">
<B>Guest's First Name:</B>
<INPUT
TYPE="text"
NAME="gb_entry_nm_f"
VALUE="#gb_entry_nm_f#">
<P>
<B>Guest's Last Name:</B>
<INPUT
TYPE="text"
NAME="gb_entry_nm_l"
VALUE="#gb_entry_nm_l#">
<BR>
Display Last Name:
<INPUT
TYPE="radio"
NAME="gb_entry_nm_l_dspl_x"
VALUE="Yes">
Do Not Display Last Name:
<INPUT
TYPE="radio"
NAME="gb_entry_nm_l_dspl_x"
VALUE="no">
<P>
<B>Your Email Address:</B><BR>
<INPUT
TYPE="text"
NAME="gb_entry_tce"
VALUE="#gb_entry_tce#"
SIZE="40"
MAXLENGTH="40">
<BR>
Uncheck the box to keep email private:
<INPUT
TYPE="checkbox"
NAME="gb_entry_tce_dspl_x"
VALUE="#gb_entry_tce_dspl_x#">
<P>
<SPAN CLASS="emph01">*</SPAN> Your City:
<INPUT
TYPE="text"
NAME="gb_entry_cy"
VALUE="#gb_entry_cy#"
SIZE="30">
<P>
<SPAN CLASS="emph01">*</SPAN> Your State:
<INPUT
TYPE="text"
NAME="gb_entry_stt"
VALUE="#gb_entry_stt#"
SIZE="30">
<BR>
<B>Instruments Played:</B>
<BR>
<TEXTAREA
COLS="45"
MAX="50" -
I want single update query without use the function.
I want to update sells_table selling_code field with max date product_code from product table.
In product table there is multiple product_code date wise.
I have been done it with below quey with the use of function but can we do it in only one update query
without use the function.
UPDATE sells_table
SET selling_code = MAXDATEPRODUCT(ctd_vpk_product_code)
WHERE NVL(update_product_flag,0) = 0 ;
CREATE OR REPLACE FUNCTION HVL.maxdateproduct (p_product IN VARCHAR2) RETURN NUMBER
IS
max_date_product VARCHAR2 (100);
BEGIN
BEGIN
SELECT NVL (TRIM (product_code), 0)
INTO max_date_product
FROM (SELECT product_code, xref_end_dt
FROM product
WHERE TO_NUMBER (p_product) = pr.item_id
ORDER BY xref_end_dt DESC)
WHERE ROWNUM = 1; -- It will return only one row - max date product code
EXCEPTION
WHEN OTHERS
THEN
RETURN 0;
END;
RETURN max_date_product;
END maxdateproduct;
Thanks in Advance.Hi,
Something like this.
update setlls_table st
set selling_code =(select nvl(trim(product_code)) from
(select product_code
, rank() over (partition by item_id order by xref_end_dt DESC) rn
from product
) pr
where rn =1
and pr.item_id = st.ctd_vpk_product_code
) where NVL(update_product_flag,0) = 0 ;As such not tested due to lack of input sample.
Regards
Anurag Tibrewal. -
Hi,
I want to update the salary to 5000,for all the employees to whom the highest number of people report.
Could any one help me on this.I agree with the solutions above...
But, we dont know how your emp table is structured, I want to make a guess about your table structure and the query you might be looking for:
This is open for discussion though...
CREATE TABLE emp
emp_id NUMBER,
emp_name VARCHAR2 (100),
emp_supv_id NUMBER,
emp_salary NUMBER
INSERT INTO SCOTT.EMP
(EMP_ID, EMP_NAME, EMP_SALARY)
VALUES
(1, 'King', 1000);
INSERT INTO SCOTT.EMP
(EMP_ID, EMP_NAME, EMP_SUPV_ID, EMP_SALARY)
VALUES
(2, 'emp1', 1, 100);
INSERT INTO SCOTT.EMP
(EMP_ID, EMP_NAME, EMP_SUPV_ID, EMP_SALARY)
VALUES
(4, 'emp2', 1, 100);
INSERT INTO SCOTT.EMP
(EMP_ID, EMP_NAME, EMP_SUPV_ID, EMP_SALARY)
VALUES
(5, 'emp3', 1, 100);
INSERT INTO SCOTT.EMP
(EMP_ID, EMP_NAME, EMP_SUPV_ID, EMP_SALARY)
VALUES
(6, 'Minister', 1, 200);
INSERT INTO SCOTT.EMP
(EMP_ID, EMP_NAME, EMP_SUPV_ID, EMP_SALARY)
VALUES
(7, 'Soldier', 6, 10);
INSERT INTO SCOTT.EMP
(EMP_ID, EMP_NAME, EMP_SALARY)
VALUES
(3, 'Queen', 1000);
INSERT INTO SCOTT.EMP
(EMP_ID, EMP_NAME, EMP_SUPV_ID, EMP_SALARY)
VALUES
(8, 'Maid', 3, 10);
INSERT INTO SCOTT.EMP
(EMP_ID, EMP_NAME, EMP_SUPV_ID, EMP_SALARY)
VALUES
(9, 'Maid1', 3, 10);
INSERT INTO SCOTT.EMP
(EMP_ID, EMP_NAME, EMP_SUPV_ID, EMP_SALARY)
VALUES
(10, 'Maid2', 3, 10);
INSERT INTO SCOTT.EMP
(EMP_ID, EMP_NAME, EMP_SUPV_ID, EMP_SALARY)
VALUES
(11, 'Soldier1', 6, 100);
INSERT INTO SCOTT.EMP
(EMP_ID, EMP_NAME, EMP_SUPV_ID, EMP_SALARY)
VALUES
(12, 'Maid3', 3, 10);
COMMIT;input :
emp_id emp_name emp_supv_id emp_salary
1 King 1000
2 emp1 1 100
4 emp2 1 100
5 emp3 1 100
6 Minister 1 200
7 Soldier 6 10
3 Queen 1000
8 Maid 3 10
9 Maid1 3 10
10 Maid2 3 10
11 Soldier1 6 100
12 Maid3 3 10The update query follows...
UPDATE emp
SET emp_salary = 5000
WHERE emp_id IN
(WITH tmp AS
( SELECT LPAD (' ', 2 * (LEVEL - 1)) || emp_id emp_id
FROM emp
START WITH emp_supv_id IS NULL
CONNECT BY PRIOR emp_id = emp_supv_id),
tmp1 AS
(SELECT a.*,
DENSE_RANK ()
OVER (PARTITION BY 1
ORDER BY REGEXP_COUNT (emp_id, ' ') ASC)
rnk
FROM tmp a)
SELECT emp_id
FROM tmp1
WHERE rnk = 1);
commit; output :
emp_id emp_name emp_supv_id emp_salary
1 King 5000
2 emp1 1 100
4 emp2 1 100
5 emp3 1 100
6 Minister 1 200
7 Soldier 6 10
3 Queen 5000
8 Maid 3 10
9 Maid1 3 10
10 Maid2 3 10
11 Soldier1 6 100
12 Maid3 3 10Cheers,
Manik -
Query Tuning! - Need your help
Hi Guys,
I have got a problem in Query Tuning.
I have a query, in which I am accesing tables from different users. Example:
2 tables are from my own schema, 3 tables from other users and 3 tables from yet another user.
I am using DISTINCT on this select statement. The 1st two columns in teh select list are concatenated with each other.
There is yet another select in the from clause to get few other records from other tables.
Thee query returns 163 records and takes around 14 seconds.
I referred PLAN_TABLE, its showing NESTED LOOPS and CARTESIAN JOIN in the SORT OPERATION.
Can anyone of you please suggest areas where I can concentrate?
Thanks in advance
Himanshu DabirDISTINCT always do an inherent sort.
SQL> EXPLAIN PLAN FOR
2 SELECT DISTINCT principal_due,outstand_balance
3 FROM outstanding_ledger
4 WHERE dnum=1030003931
5 /
Explained.
SQL> SET LINE 200
SQL> SELECT * FROM TABLE(dbms_xplan.display)
2 /
PLAN_TABLE_OUTPUT
Plan hash value: 1765098853
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 17 | 272 | 1 (100)| 00:00:01 |
| 1 | SORT UNIQUE | | 17 | 272 | 1 (100)| 00:00:01 |
| 2 | TABLE ACCESS BY INDEX ROWID| OUTSTANDING_LEDGER | 17 | 272 | | |
|* 3 | INDEX SKIP SCAN | DLINE_COM_DDATE_DNUM_PK | 17 | | | |
PLAN_TABLE_OUTPUT
Predicate Information (identified by operation id):
3 - access("DNUM"=1030003931)
filter("DNUM"=1030003931)
16 rows selected.
SQL> DELETE plan_table
2 /
4 rows deleted.
SQL> commit
2 /
Commit complete.
SQL> EXPLAIN PLAN FOR
2 SELECT principal_due,outstand_balance
3 FROM outstanding_ledger
4 WHERE dnum=1030003931
5 /
Explained.
SQL> SELECT * FROM TABLE(dbms_xplan.display)
2 /
PLAN_TABLE_OUTPUT
Plan hash value: 3157896501
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)|
| 0 | SELECT STATEMENT | | 17 | 272 | 0 (0)|
| 1 | TABLE ACCESS BY INDEX ROWID| OUTSTANDING_LEDGER | 17 | 272 | |
|* 2 | INDEX SKIP SCAN | DLINE_COM_DDATE_DNUM_PK | 17 | | |
Predicate Information (identified by operation id):
PLAN_TABLE_OUTPUT
2 - access("DNUM"=1030003931)
filter("DNUM"=1030003931)
15 rows selected.
SQL>
Can anyone of you please suggest areas where I can concentrate?Paste yours plan with updated stats.
Khurram -
Update query is slow with merge replication
Hello friend,
I have a database with enabling merge replication.
Then the problem is update query is taking more time.
But when I disable the merge triggers then it'll update quickly.
I really appreciate your
quick response.
Thanks.Hi Manjula,
According to your description, the update query is slow after configuring merge replication. There are some proposals for you troubleshooting this issue as follows.
1. Perform regular index maintenance, update statistics, re-index, on the following Replication system tables.
•MSmerge_contents
•MSmerge_genhistory
•MSmerge_tombstone
•MSmerge_current_partition_mappings
•MSmerge_past_partition_mappings
2. Make sure that your tables involved in the query have suitable indexes. Also do the re-indexing and update the statistics for these tables. Additionally, you can use
Database Engine Tuning Advisor to tune databases for better query performance.
Here are some related articles for your reference.
http://blogs.msdn.com/b/chrissk/archive/2010/02/01/sql-server-merge-replication-best-practices.aspx
http://technet.microsoft.com/en-us/library/ms177500(v=sql.105).aspx
Thanks,
Lydia Zhang -
hello all
my one of query is returning result in 1-2 mins only for 1 lakh record but i am not sure if it showed me complete rows or not because when I an trying to get count of result ..its taking lot of time .when I am using this query on plsql code ..code is running slow so just wanted to confirm on query tuning point of view if its fine or not ..please look onto it and let me know if query is fine or not by explain plan .my oracle version is 11g
this is my query
SELECT ROWNUM , TRUNC(rownum/5000) + 20000 ,'FOR_UPDATE', sku_org.NAME ,
acct_promo_sku.src_num , acct_promo_sku.sub_type ,
promo_actual.sku_actual_pos
FROM siebel.s_src acct_promo_hdr,
siebel.s_src acct_title_format,
siebel.s_src acct_promo_sku,
siebel.s_src_x acct_promo_hdrx,
siebel.s_src_x acct_promo_skux,
siebel.s_prod_int prod,
siebel.s_bu promo_hdr_org,
siebel.s_bu sku_org,
siebelwb.stg_sbl_acct_promo_actuals2 promo_actual
WHERE acct_promo_hdr.sub_type = 'PLAN_ACCOUNT_PROMOTION'
AND acct_promo_hdr.row_id = acct_title_format.par_src_id
AND acct_title_format.sub_type = 'PLAN_ACCT_PROMOTION_CATEGORY'
AND acct_title_format.row_id = acct_promo_sku.par_src_id
AND acct_promo_sku.sub_type = 'PLAN_ACCOUNT_PROMOTION_PRODUCT'
AND acct_promo_hdr.row_id = acct_promo_hdrx.par_row_id
AND acct_promo_sku.row_id = acct_promo_skux.par_row_id(+)
AND acct_promo_sku.prod_id = prod.row_id
AND acct_promo_hdr.bu_id = promo_hdr_org.row_id
AND acct_promo_sku.bu_id = sku_org.row_id
AND prod.x_prod_material_num = promo_actual.material_number
and prod.X_PROD_SALES_ORG=promo_actual.sales_org
AND acct_promo_hdr.row_id = promo_actual.acct_promo_id
and nvl(acct_promo_hdr.pr_accnt_id,0)=nvl(promo_actual.acct_siebel_rowid,0)
and nvl(acct_promo_hdr.x_indirect_id,0)=nvl(promo_actual.indirect_acct_siebel_rowid,0)
AND promo_actual.load_date >= TRUNC(SYSDATE)
AND promo_actual.load_date < TRUNC(SYSDATE + 1)
explain plan
PLAN_TABLE_OUTPUT
Plan hash value: 3864590768
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 1 | 298 | 2300 (1)| 00:00:28 |
| 1 | COUNT | | | | | |
|* 2 | FILTER | | | | | |
| 3 | NESTED LOOPS | | | | | |
| 4 | NESTED LOOPS | | 1 | 298 | 2300 (1)| 00:00:28 |
| 5 | NESTED LOOPS OUTER | | 1 | 273 | 2298 (1)| 00:00:28 |
| 6 | NESTED LOOPS | | 1 | 263 | 2296 (1)| 00:00:28 |
| 7 | NESTED LOOPS | | 1 | 236 | 2295 (1)| 00:00:28 |
| 8 | NESTED LOOPS | | 1 | 165 | 2292 (1)| 00:00:28 |
| 9 | NESTED LOOPS | | 1 | 117 | 2289 (1)| 00:00:28 |
| 10 | NESTED LOOPS | | 1 | 109 | 2289 (1)| 00:00:28 |
| 11 | NESTED LOOPS | | 1 | 99 | 2287 (1)| 00:00:28 |
|* 12 | TABLE ACCESS FULL | STG_SBL_ACCT_PROMO_ACTUALS2 | 1 | 49 | 2285 (1)| 00:0
|* 13 | TABLE ACCESS BY INDEX ROWID| S_SRC | 1 | 50 | 2 (0)| 00:00:01 |
|* 14 | INDEX UNIQUE SCAN | S_SRC_P1 | 1 | | 1 (0)| 00:00:01 |
|* 15 | INDEX RANGE SCAN | S_SRC_X_U1 | 1 | 10 | 2 (0)| 00:00:01 |
|* 16 | INDEX UNIQUE SCAN | S_BU_P1 | 1 | 8 | 0 (0)| 00:00:01 |
|* 17 | TABLE ACCESS BY INDEX ROWID | S_SRC | 1 | 48 | 3 (0)| 00:00:01 |
|* 18 | INDEX RANGE SCAN | S_SRC_F2 | 2 | | 2 (0)| 00:00:01 |
|* 19 | TABLE ACCESS BY INDEX ROWID | S_SRC | 1 | 71 | 3 (0)| 00:00:01 |
|* 20 | INDEX RANGE SCAN | S_SRC_F2 | 2 | | 2 (0)| 00:00:01 |
| 21 | TABLE ACCESS BY INDEX ROWID | S_BU | 1 | 27 | 1 (0)| 00:00:01 |
|* 22 | INDEX UNIQUE SCAN | S_BU_P1 | 1 | | 0 (0)| 00:00:01 |
|* 23 | INDEX RANGE SCAN | S_SRC_X_U1 | 1 | 10 | 2 (0)| 00:00:01 |
|* 24 | INDEX UNIQUE SCAN | S_PROD_INT_P1 | 1 | | 1 (0)| 00:00:01 |
|* 25 | TABLE ACCESS BY INDEX ROWID | S_PROD_INT | 1 | 25 | 2 (0)| 00:00:
Predicate Information (identified by operation id):
2 - filter(TRUNC(SYSDATE@!)<TRUNC(SYSDATE@!+1))
12 - filter("PROMO_ACTUAL"."LOAD_DATE">=TRUNC(SYSDATE@!) AND "PROMO_ACTUAL"."LOAD_DATE"<TRUNC(SYSD
13 - filter("ACCT_PROMO_HDR"."SUB_TYPE"='PLAN_ACCOUNT_PROMOTION' AND
NVL("ACCT_PROMO_HDR"."PR_ACCNT_ID",'0')=NVL("PROMO_ACTUAL"."ACCT_SIEBEL_ROWID",'0') AND
NVL("ACCT_PROMO_HDR"."X_INDIRECT_ID",'0')=NVL("PROMO_ACTUAL"."INDIRECT_ACCT_SIEBEL_ROWID",'0'
14 - access("ACCT_PROMO_HDR"."ROW_ID"="PROMO_ACTUAL"."ACCT_PROMO_ID")
15 - access("ACCT_PROMO_HDR"."ROW_ID"="ACCT_PROMO_HDRX"."PAR_ROW_ID")
16 - access("ACCT_PROMO_HDR"."BU_ID"="PROMO_HDR_ORG"."ROW_ID")
17 - filter("ACCT_TITLE_FORMAT"."SUB_TYPE"='PLAN_ACCT_PROMOTION_CATEGORY')
18 - access("ACCT_PROMO_HDR"."ROW_ID"="ACCT_TITLE_FORMAT"."PAR_SRC_ID")
19 - filter("ACCT_PROMO_SKU"."PROD_ID" IS NOT NULL AND
"ACCT_PROMO_SKU"."SUB_TYPE"='PLAN_ACCOUNT_PROMOTION_PRODUCT')
20 - access("ACCT_TITLE_FORMAT"."ROW_ID"="ACCT_PROMO_SKU"."PAR_SRC_ID")
22 - access("ACCT_PROMO_SKU"."BU_ID"="SKU_ORG"."ROW_ID")
23 - access("ACCT_PROMO_SKU"."ROW_ID"="ACCT_PROMO_SKUX"."PAR_ROW_ID"(+))
24 - access("ACCT_PROMO_SKU"."PROD_ID"="PROD"."ROW_ID")
25 - filter("PROD"."X_PROD_MATERIAL_NUM" IS NOT NULL AND
"PROD"."X_PROD_MATERIAL_NUM"="PROMO_ACTUAL"."MATERIAL_NUMBER" AND
"PROD"."X_PROD_SALES_ORG"="PROMO_ACTUAL"."SALES_ORG")
55 rows selected.
thanksHi,
the plan you posted has the cost of 2300, i.e. 2300 single-block reads or equivalent number f multi-block reads. Even if none of the blocks is found in cache, 2300 reas shouldn't take more than a couple of minutes, beacause for most of the hard drives available today a disk read is typically within 5-10 ms.
This means that if there is a problem, we will never find out about it by looking in the plan. And it's quite likely that there is, in fact, a problem, because the plan contains a bunch of nested joins, and the cost of each nested join is directly proportional to the cardinality of the previous nested loop. I.e. it suffices to make one bad mistake in estimating the number of rows coming fom one of the nested rows to screw up the entire plan and get all remaining estimates (including the total cost of the query) completely wrong.
In order for us to be able to tell more, we need to see the plan with rowsource statistics, and please don't forget to use tags to preserve formatting (use the preview tab to make sure the posted plan is actually readable).
Best regards,
Nikolay -
Not able to input data in query analyzer
Hi buddies,
I am working on IP.I have created a input ready query.For few values of company code there is no transaction data available,but it should show us blank so that I can atleast punch data.I am able to punch data for company codes for which transaction data is avilable .For remaining company codes for which transaction data is not availbale it is showing yellow coloured rows not allowing to input data.
Solutions would be really appreciated.This is high priority issue.
With regards,
LalithaHi,
1) if you have no transaction data, it will not show you the company codes, unless you select in your query definition "master data' instead of posted values in the query properties (for company code)
2) yellow lines are subtotals.... To enable it input ready
- set query to input ready in query properties
- set row to plannable in query properties
- very important: make sure each characteristic of your aggregation level has a unique value either in the filter definition or in the definition of your rows or columns. If not, your query will not be plannable
D -
I was wondering if you could have a cfif statement inside of a update query. See example below. Is there a better way of doing it? thanks.
<cfquery DATASOURCE="xxx" name="update">
UPDATE plant_gen_info
SET levels_complete = #URL.var0#
<cfif IsDefined("URLvar13">
,Q1_answer = #URL.var13#
</cfif>
WHERE ID = #session.member_id#
</cfquery>TheScarecrow,
Yes, dynamic query statements can be assembled using <cfif>. I would suggest you switch your IsDefined() to a StructKeyExists() and strongly suggest you make good use of <cfqueryparam>:
<cfquery DATASOURCE="xxx" name="update">
UPDATE plant_gen_info
SET levels_complete = <cfqueryparam value="#URL.var0#" cfsqltype="****">
<cfif StructKeyExists(URL, "var13")>
,Q1_answer = <cfqueryparam value="#URL.var13#" cfsqltype="****">
</cfif>
WHERE ID = <cfqueryparam value="#session.member_id#" cfsqltype="****">
</cfquery>
I put a "****" placeholder for cfsqltype attributes because I'm not sure which would be appropriate for your variables. See the help docs for more on the cfqueryparam and cfsqltype.
-Carl V. -
Insert and update query to calculate the opening and closing balance
create table purchase(productid number(5) ,dateofpurchase date,
qty number(5));
create table inventory(invid number(5),productid number(5),
idate date,openingqty number(5),closingqty number(5));
Records in inventory:
1,1,'01-jan-2009', 10, 20
2,1,'03-jan-2009', 20, 30
3,1,'04-jan-2009', 40, 50
when I enter the purchase invoice for 15 qty on 02-jan-2009
after say '15-jan-09' , a new record should get inserted
with opening balance = (closing balance before 02-jan-2009)
and all the opening and closing balance for that product should
get affected.
If the invoice for 20 qty is entered for the existing date say
'03-jan-2009' in inventory , then the closing balance
for 03-jan-2009 should get updated and all the following records
should get affected.
I need the insert for the first one and update query for the
second one.
Vinodh<strike>You can do this in one statement by using the merge statement</strike>
Hmm, maybe I spoke too soon.
Edited by: Boneist on 25-Sep-2009 13:56
Thinking about it, why do you want to design your system like this?
Why not simply have your purchases table hold the required information and then either work out the inventory on the fly, or have a job that calls a procedure to add a row for the previous day?
If you continue with this design, you're opening yourself up to a world of pain - what happens when the data doesn't match the purchases table? Also when is the inventory cut-off to reset the opening/closing balances? Monthly? Annually? Weekly? If it's set to one of those, what happens when the business request the inventory for a particular week?
Edited by: Boneist on 25-Sep-2009 13:59 -
Hello,
I was hoping anyone could provide ideas on the best way to do an update query based on an if then else statement I am using Oracle 11 on a linux server. I am writing within a perl script. I've researched online and saw some examples using case. Below is the basic query logic I am trying to implement. I would really appreciate any suggestions.
Thanks,
JC
If the MAINT_CENTER IN ('ENOC1CENTER','PMCTGAAHSDC','ATTCSPCRT01','ATTCSPCWS01','NTNLWHS4NSA') AND CAC1=’S’ and substring(CKT_ID,4,2) IN ('KQ','KR','KS','KP','L1','L2','L3','VL') and askme_temp.CKT_ID = heci.CKT_ID then SUBPRODUCT =’IPAG’
ELSE If the MAINT_CENTER IN ('ENOC1CENTER','PMCTGAAHSDC','ATTCSPCRT01','ATTCSPCWS01','NTNLWHS4NSA') AND CAC1=’S’ and substring(CKT_ID,4,2) IN ('KQ','KR','KS','KP','L1','L2','L3','VL') AND REGION=’SE’ then SUBPRODUCT =’METRO_E’
ELSE If the MAINT_CENTER IN ('ENOC1CENTER','PMCTGAAHSDC','ATTCSPCRT01','ATTCSPCWS01','NTNLWHS4NSA') AND CAC1=’S’ and substring(CKT_ID,4,2) IN ('KQ','KR','KS','KP','L1','L2','L3','VL') then SUBPRODUCT =’OPT_E_MAN’Hi,
Welcome to the forum!
CASE sounds like a good idea to me.
For example:
UPDATE table_x
SET subproduct = CASE
WHEN askme_temp.CKT_ID = heci.CKT_ID
THEN 'IPAG'
WHEN region = 'SE'
THEN 'METRO_E'
ELSE 'OPT_E_MAN'
END
WHERE maint_center IN ( 'ENOC1CENTER'
, 'PMCTGAAHSDC'
, 'ATTCSPCRT01'
, 'ATTCSPCWS01'
, 'NTNLWHS4NSA'
AND cac1 = 'S'
AND SUBST (ckt_id, 4, 2) IN ('KQ', 'KR', 'KS', 'KP', 'L1', 'L2', 'L3', 'VL')
AND ...
;CASE expressions are evaluated in the order in which you write them, so if askme_temp.ckt_id = heci.ckt_id (whatever those things are), subproduct will be set to 'IPAG'. It won't matter whether region is 'METRO_E' or not; if the 1st condition is TRUE, the first THEN value is returned, and the other WHEN expressions aren't even evaluated.
What do you want to do if none of those conditions are met?
Any conditions that are common to all the rows being UPDATEd can be put in the WHERE clause; they don't have to be repeated in the CASE expression.
Remember, MERGE is often more convenient to use than UPDATE.
Edited by: Frank Kulash on Jul 27, 2011 3:23 PM -
Hello :),
I am a MS SQL Server expert [;)]. trying to learn ORACLE.
I tried to assign some value to a variable in an update query. I got error message that virtual columns are not allowed. This is very important to get rolling effect.
Can some one please guide me about how to get rolling effect if we can not assign a value to a variable in an update query.
Thanx in advance.
Nishuhello sgalaxy and gintsp, thanx for ur reply.
My reply is so late because for some reason I was not able to log on to this site.
There is some good reason why I need this. I am giving code and error messages below, please guide me.
==============================
I am trying this thing in procedure. I am using ORACLE DATABASE EXPRESS EDITION
Here is the code.
create or replace procedure "PROC1"
is
TYPE Bal_Collect IS TABLE OF NUMBER;
Collt Bal_Collect := Bal_Collect(100);
begin
Update empAccount Set Bal = Collt(Collt.Last) Returning Bal BULK COLLECT INTO Collt;
end;
Error message
Compilation failed,line 6 (02:20:45)
PLS-00425: in SQL, function argument and return types must be SQL type
Compilation failed,line 6 (02:20:45)
PL/SQL: ORA-00904: : invalid identifier
Compilation failed,line 6 (02:20:45)
PL/SQL: SQL Statement ignored
BUT FOLLOWING UPDATE STATEMENT WORKS
Update empAccount Set Bal = Collt(1) Returning Bal BULK COLLECT INTO Collt; -
Sender jdbc adapter - no update query
hi ,
i am using pi 731 single stack.
the scenario is - PI has to pick data from view of a hana database. i am using jdbc sender for it.
pi will not have access to update the table,only pi can read the view of database.So,PI can't use UPDATE query.
If in jdbc sender channel ,I use SELECT query only and no UPDATE query - will it work ? what will happen if there are 100 records in the view and PI failed after fetching 43 records..will it pick from 44th record next time OR it will start from 0 again ?
rgdsHi SAP PI,
It has no sense to use the sender JDBC without update query because then always will be taken the same records.
If you cant update the source DB you only have the choice to talk with the DB administrators that they develop for you a stored procedure that it has to do the work to get different records in every PI access.
If the PI record process fail with impossible source database update update, the only way (afaik) is to do a PI alert and to communicate it to db sender administrators. There are another option like to store the data in a intermediate table, and so on but all possibilities that i can think now are not to enough good.
Regards. -
Update query not working in the JDBC sender Communication channel
Hi,
We are working on JDBC to File scenario. As per the configuration, XI should pick the data from SQL database every 20 secs and should update the corresponding flag. We are using subquery in the select and update statement as both header and detail tables are involved.
Now the issue is, select query is working fine but update statement is not working as expected. It is somehow updating some other records rather than doing for the ones selected by the adapter.
Moreover logSQLstatement is also not working. Hence we are unable to identify the records which are getting updated.
Please advise.Hi Rumi,
See Question 8. Transaction Handling (Sender) in [SAP Note 831162 - FAQ: XI 3.0 / PI 7.0 / PI 7.1 JDBC Adapter|https://websmp130.sap-ag.de/sap(bD1wdCZjPTAwMQ==)/bc/bsp/spn/sapnotes/index2.htm?numm=831162].
8. Transaction Handling (Sender)
Q: If I have the following configured in a JDBC Sender:
Select Query:
SELECT column FROM TABLENAME WHERE FLAG = "TRUE"
Update Query:
UPDATE TABLENAME SET FLAG = "FALSE" WHERE FLAG = "TRUE"
How do I know that the JDBC adapter will not update newly added rows (rows that were
added between the time that the SELECT and UPDATE queries were executed) that were
not read in the initial SELECT query?
A: The SELECT and the UPDATE are run in the same DB transaction, i.e. both statements
have the same view on the database.
Make sure that both statements use the same WHERE clause. An additional
requirement for the correct operation of this scenario is the configuration of
an appropriate transaction isolation level on the database
(i.e., repeatable_read or serializable). You might also consider using a
"SELECT FOR UPDATE" statement instead of a plain SELECT statement to
ensure proper locking on the database. "SELECT FOR UPDATE"
is not supported in MS SQL database. In this case please make use of an
appropriate transaction isolation level on the database. For more details
please contact your DB vendors.
After, see Transaction Handling Issues in [SAP Note 1039779 - JDBC Adapter issues(Escape character,Transaction handling)|https://websmp130.sap-ag.de/sap(bD1wdCZjPTAwMQ==)/bc/bsp/spn/sapnotes/index2.htm?numm=1039779].
Best Regards.
Pedro Baroni
Maybe you are looking for
-
Page break as part of a paragraph style?
Hello, is there a way to add page break as part of a paragraph style? I'd like for my "Heading 1" to always start on a blank page. Thanks!
-
Saving order of photos in an Aperture Album
I am new to Aperture and can't find a way to save the order of my photos in an album when I try to copy them to a web gallery. It seems this is the most basic thing anyone would want to do but every time I try to copy my album into a web gallery it c
-
Enhancing FI_GL_1
Hi friends I have a requiement to enhance the FI_GL_1 extractor. Now the extractor is bringing in only the local currencies. Now i neeed to populat the Group currencies as well . I looked into GLT0 table where these currencies are maitained and the e
-
Remove commas between double quotes in a comma seperated CSV
Hi All, I have text like this. ,335,9,,"XYZ, V ABC",838300,"Cityname, CA 95610",2167390,N,N,,, I want to replace the comma between quotes to semicolon. Please help me Thanks in advance Uma
-
Serious AVI media and MPG-2 file problem!!! Someone?
I have been working on a student video for a while now, and I decided to update my Quicktime files. Before, the project played back fine with the MPG2 and avi files I created, now FCP can't render the movies that had once accepted it! I tried deletin