XMLSerialize and case statement
Hi all,
I try using case statement on select like that
SELECT
xmlserialize(DOCUMENT
xmlroot(XMLELEMENT(kdpwdocument,XMLATTRIBUTES(
'xxxxxxxx' AS sndr,
'xxxxxxxx' AS rcvr,
'xxxxxxxx' AS "xmlns",
'xxxxxxxx' AS "xmlns:xsi",
'xxxxxxxx' AS "xsi:schemaLocation"
CASE WHEN REPO_STATUS=1 THEN
xmlagg(
XMLELEMENT("regio",
XMLELEMENT("Inf",
XMLELEMENT("Id",
XMLELEMENT("PmryId",'1111'),
XMLELEMENT("ScndryId",'1111')
ELSE
xmlagg(
XMLELEMENT("regio",
XMLELEMENT("Inf",
XMLELEMENT("Id",
XMLELEMENT("PmryId",'0000'),
XMLELEMENT("ScndryId",'0000')
END
VERSION '1.0" encoding="UTF-8'
) AS CLOB)
FROM REPO
WHERE 1=1
but i'm getting error:
00937. 00000 - "not a single-group group function"
Any idea how I can change my query to get results? When I'm using group by repo_status, I'm getting two rows, but that isn't a good result for me
Solution:
SELECT
xmlserialize(DOCUMENT
xmlroot(XMLELEMENT(document,XMLATTRIBUTES(
'xxxxxxxx' AS sndr,
'xxxxxxxx' AS rcvr,
'xxxxxxxx' AS "xmlns",
'xxxxxxxx' AS "xmlns:xsi",
'xxxxxxxx' AS "xsi:schemaLocation"
xmlagg(
CASE WHEN repo_status=1 THEN
XMLELEMENT("regio",
XMLELEMENT("Inf",
XMLELEMENT("Id",
XMLELEMENT("PmryId",'1111'),
XMLELEMENT("ScndryId",'1111')
ELSE
XMLELEMENT("regio",
XMLELEMENT("Inf",
XMLELEMENT("Id",
XMLELEMENT("PmryId",'0000'),
XMLELEMENT("ScndryId",'0000')
END
, VERSION '1.0" encoding="UTF-8'
) AS CLOB)
FROM REPO
WHERE 1=1
RESULT:
"<?xml version="1.0" encoding="UTF-8"?>
<DOCUMENT SNDR="xxxxxxxx" RCVR="xxxxxxxx" xmlns="xxxxxxxx" xmlns:xsi="xxxxxxxx" xsi:schemaLocation="xxxxxxxx">
<regio>
<Inf>
<Id>
<PmryId>0000</PmryId>
<ScndryId>0000</ScndryId>
</Id>
</Inf>
</regio>
<regio>
<Inf>
<Id>
<PmryId>1111</PmryId>
<ScndryId>1111</ScndryId>
</Id>
</Inf>
</regio>
</DOCUMENT>
Similar Messages
-
Diff b/w IF/ENDIF and CASE statement?
Hi all,
Plz let me know the difference between IF and CASE statements.Which one is better to be used in general...and are there any specific situations where we have to go for CASE insted of IF.
Rgds,
Reddy.Hi,
Case statement is good for performance wise because here we declare cases
and according to these cases program will be executed.
When we use if statement then the cursur goes to in the loop, when ever
the loop is not complete till then the programme will not execute.
Thats by in performance basis the case statement is good.
Let me try and explain using an example...
1) For IF statement...
Suppost you have a variable color..and you are checking it against color names.
then your code will be
IF COLOR == 'BLUE'.
statements
ELSEIF COLOR == 'BLACK'.
statements.
...and so on....
ENDIF.
But if you use CASE Statement
CASE COLOR.
when 'BLUE'.
statements.
when 'BLACK'.
statements.
so follows that CASE is easy to use and performance wise is also better.
Regards,
Priyanka. -
Decode and case statement in the update..
Its is more to it, but I want to check with you guys, the experts on this, this look busy to me, it should be a more simplify way of doing it, do you think will work
The government decide to change the ethnic codes, and we have to come with certain rules to in our report, anyway, do you think this will work? again It is more to it I declare my variables, this is just one part of the precedure.
BEGIN
UTL_FILE.fclose_all;
v_file_handle := UTL_FILE.fopen (v_out_path, v_out_file, 'a');
UTL_FILE.put_line (v_file_handle,
CHR (10) || TO_CHAR (SYSDATE, 'DD-MON-YYYY HH:MI:SS')
UTL_FILE.put_line (v_file_handle, 'Entering spbpers_update');
SELECT upd_spbpers_upd_cur IS
spriden_pidm,
szscapp_birth_state,
szscapp_birth_city,
DECODE(szscapp_hisp_or_latino_ind,Y,'2',N,'1'),
DECODE(szscapp_hisp_or_latino_options,XCM,'2',CUB,'2',MEX,'2',PRI,'2',XSM,'2',ESP,'2',XOH,'2'),
DECODE(szscapp_amer_indn_alaska_opt,XAN,'1','1',XCW,'1',XCH,'1',XCK,'1',XNV,'1',XSX,'1'),
DECODE(szscapp_amer_indn_alaska_other,XON,'1') (,IND,'1',JPN,'1',KOR,'1',PAK,'1',PHL,'1',VNM,'1',XEA,'1',XIS,'1',XSA,'1'),
DECODE(szscapp_asian_options,IND,'1',JPN,'1',KOR,'1',PAK,'1',PHL,'1',VNM,'1',XEA,'1',XIS,'1',XSA,'1'), ,
DECODE(szscapp_other_east_asia,(IND,'1',JPN,'1',KOR,'1',PAK,'1',PHL,'1',VNM,'1',XEA,'1',XIS,'1',XSA,'1'),
DECODE(szscapp_other_indian_subcont,XIS,'1'),
DECODE(szscapp_other_southeast_asia,XSA,'1'),
DECODE(szscapp_blk_or_afr_amer_opt,XAA,'1',XAF,'1',XCB,'1',XOA,'1'),
DECODE(szscapp_blk_or_afr_amer_other,XOA,'1'),
DECODE(szscapp_natve_hawaian_options,GUM,'1',XHI,'1',ASM,'1',XOP,'1'),
DECODE(szscapp_hawaiian_other,XOP,'1'),
DECODE(szscapp_white_options,XEU,'1',XME,'1',XOW,'1'),
DECODE(szscapp_white_other(XOW,'1')
FROM
saturn_midd.szscapp
WHERE
spriden_id = szscapp_id
AND spriden_ntyp_code = 'CAPL'
IF upd_spbpers_upd_cur%ISOPEN
THEN
CLOSE upd_spbpers_upd_cur;
END IF;
OPEN upd_spbpers_upd_cur;
LOOP
FETCH upd_spbpers_upd_cur
INTO v_pidm,v_birth_state,v_birth_city,v_latino_ind,v_latino_options,
v_indn_alaska_opt,v_indn_alaska_other,v_asian_options,
v_other_east_asia,v_other_indian_subcont,v_other_southeast_asia,
v_blk_or_afr_amer_opt,v_blk_or_afr_amer_other,v_natve_hawaian_options,
v_hawaiian_other,v_white_options,v_white_other;
EXIT WHEN upd_spbpers_upd_cur%NOTFOUND;
IF upd_spbpers_upd_cur%FOUND
UPDATE saturn.spbpers
set SPBPERS_ETHN_CODE = CASE
WHEN v_latino_ind IS NOT NULL THEN (spbpers_ethn_code = v_latino_ind,spbpers_activity_date = sysdate)
WHEN v_latino_options IS NOT NULL THEN (spbpers_ethn_code = v_latino_options,spbpers_activity_date = sysdate)
WHEN v_indn_alaska_opt IS NOT NULL THEN (spbpers_ethn_code = v_indn_alaska_opt,spbpers_activity_date = sysdate)
WHEN v_indn_alaska_other IS NOT NULL THEN (spbpers_ethn_code = v_indn_alaska_other,spbpers_activity_date = sysdate)
WHEN v_asian_options IS NOT NULL THEN (spbpers_ethn_code = v_asian_options,spbpers_activity_date = sysdate)
WHEN v_other_east_asia IS NOT NULL THEN (spbpers_ethn_code = v_other_east_asia,spbpers_activity_date = sysdate)
WHEN v_other_indian_subcont IS NOT NULL THEN (spbpers_ethn_code = v_other_indian_subcont,spbpers_activity_date = sysdate)
WHEN v_other_southeast_asia IS NOT NULL THEN (spbpers_ethn_code = v_other_southeast_asia,spbpers_activity_date = sysdate)
WHEN v_blk_or_afr_amer_opt IS NOT NULL THEN (spbpers_ethn_code = v_blk_or_afr_amer_opt,spbpers_activity_date = sysdate)
WHEN v_blk_or_afr_amer_other IS NOT NULL THEN (spbpers_ethn_code = v_blk_or_afr_amer_other,spbpers_activity_date = sysdate)
WHEN v_natve_hawaian_options IS NOT NULL THEN (spbpers_ethn_code = v_natve_hawaian_options,spbpers_activity_date = sysdate)
WHEN v_hawaiian_other IS NOT NULL THEN (spbpers_ethn_code = v_hawaiian_other,spbpers_activity_date = sysdate)
WHEN v_white_options IS NOT NULL THEN (spbpers_ethn_code = v_white_options,spbpers_activity_date = sysdate)
WHEN v_white_other IS NOT NULL THEN (spbpers_ethn_code = v_white_other,spbpers_activity_date = sysdate)
WHEN v_birth_state IS NOT NULL THEN (spbpers_stat_code_birth = v_birth_state,spbpers_activity_date = sysdate)
WHEN v_birth_city IS NOT NULL THEN (spbpers_city_birth = v_birth_city,spbpers_activity_date = sysdate)
WHERE spbpers_pidm = v_pidm;
END
END IF;
END LOOP;Did the procedure compile ?
Doesn't look like a right Decode syntax.
DECODE (col1,'VAL1','This','VAL2','That','ElseThis')
means
--Psuedocode
IF col1 = 'VAL1' THEN 'This'
IF col1 = 'VAL2' THEN 'That'
ELSE 'ElseThis'You can use CASE statement Instead of DECODE
CASE
when szscapp_amer_indn_alaska_other
in ('XON','IND','JPN','KOR','PAK' ..... ) THEN '1'
when szscapp_hisp_or_latino_options
in ('XCM','CUB','MEX','PRI','XSM','ESP','XOH' ...) THEN '2'
END SS -
Issue with TableAdapter Configuration Wizard and CASE statements
I am having an issue with using any CASE statements in the select clause for the Table Adapter Configuration Wizard (TCW). I can take any query without a CASE and it will run fine, but inserting any CASE statement in the Select such as:
SELECT
(CASE WHEN :ras_sort = 'D' THEN TO_CHAR(a.TRANS_DATE,'YYYYMMDD')
WHEN :ras_sort = 'C' THEN c.CLAIMDEP_NAME
WHEN :ras_sort = 'A' THEN TO_CHAR(a.ACCOUNT_NUMBER)
END) sort1
FROM xxxx
causes the TCW to error with "error in list of function arguments, 'THEN' not recognized" and several other errors. I have tried with and without parameters in the CASE and have tried both forms of the CASE statement. I have tried multiple queries, all that run with no problem outside of TCW and ODP, but this seems to be a real issue
Is this a known problem and are there any workarounds that will allow use of the TCW?
Thanks,
DaveHi Ashish,
perhaps you launch the Web service wizard from the wrong location (i.e. not selecting the SEI you want to use). Did you strictly follow the steps described in the <a href="http://help.sap.com/saphelp_nwce10/helpdata/en/44/f36fa8fd1d41aae10000000a114a6b/frameset.htm">documentation</a> for creating the web service? -
Hello All:
Is it possible to have the CASE Statement in the cursor? If so, could you please show me how to use it? I tried to use it as following but it did not work on Form Builder. I tried it on Oracle SQL *Plus and it worked there.
CURSOR tbl_chck_cur IS
SELECT chck_id,
NVL(sup_chck_id,'') sup_chck_id,
(CASE WHEN sup_chck_id = null THEN
(SELECT order_no from tbl_chck_lk where tbl_chck.chck_id = tbl_chck_lk.chck_id ) ELSE
(SELECT order_no from tbl_chck_lk
where tbl_chck.chck_id = tbl_chck_lk.chck_id ) END) order_no,
FROM tbl_chck;
Thanks in advance for any help.
KTFirst, get rid of that NVL on sup_chck_id. It does nothing. What do you want it to do, anyway???
And what is the second table "Tbl_chk_sub" in the from clause?
Ignoring tbl_chk_sub, this might work:SELECT T1.chck_id,
T1.sup_chck_id,
Decode(T1.sup_chck_id, null,LK1.order_no,Lk2.order_no) order_no
FROM tbl_chck T1,
tbl_chck_lk LK1,
tbl_chck_lk LK2
where LK1.chck_id(+) = T1.chck_id
and LK2.sup_chck_id(+) = T1.sup_chck_idIf the above does not work, you will have to find a work-around -- either do the lookup select in the post-query trigger, or create a stored function you can call from the select that returns the correct order_no based on the two columns, sup_chck_id and chck_id.
Do you know if we can use the SELECT statement inside the CASE statement?Sometimes Forms are several steps behind in adapting new sql features. So it looks like you cannot at this time. -
Excel and CASE statement.
Hello Experts,
I am using a CASE statement on CHAR column as follows:
CASE WHEN Sales.Ret='Y' THEN 'Returning' ELSE 'New' END
It gives an error: Odbc driver returned an error (SQLExecDirectW).
Whereas when I use another CASE statement with Numrical column it is working perfectly.
CASE WHEN Sales.Amount<40 THEN 40 ELSE 100 END
Am i missing some Excel data source setting related to CHAR data type?
My source is MS Excel 2003 and OBIEE is 10.1.3.4.1
Appreciate any comment, help.
~ Ash
PS: The error details are as follows:*
Error Codes: OPR4ONWY:U9IM8TAC:OI2DL65P
State: HY000. Code: 10058. [NQODBC] [SQL_STATE: HY000] [nQSError: 10058] A general error has occurred. [nQSError: 16001] ODBC error state: 37000 code: -3100 message: [Microsoft][ODBC Excel Driver] Syntax error (missing operator) in query expression 'case when T46.[Ret] = 'Y' then 'Returning' else 'New' end'.. [nQSError: 16014] SQL statement preparation failed. (HY000)
SQL Issued: SELECT Sales.Tran_date saw_0, CASE WHEN Sales.Ret='Y' THEN 'Returning' ELSE 'New' END saw_1, Network."Network Name" saw_2, Sales.Amount saw_3 FROM P4UD ORDER BY saw_0, saw_1, saw_2Hello Saichand,
I would like to reconfirm that the CASE statement with Numeric column is working with EXCEL as source.
The strange thing is that the CASE statement with CHAR column was also working! and from one fine day it it started throwing an error (i thought some source setting might got changed inadvertently ).
Thank you for your response but I would like to see comments/suggestions from other experts..
~ Ash
Edited by: OBIEE_Ash on Dec 20, 2010 10:27 PM -
Controlling program flow and case statements
Hey all, I was wondering, I if I have 40 nested case statements and I want the program to close after they are all done, is it sufficient to wire the "?" for both true and false of the outermost case to the close routine in order to guarantee that all of them will execute? Or is there an even better way using data flow methods?
-DobbsI'd recommend state machines better than that way or sequences, to controll dataflow better. Example is attached.
Attachments:
untitled.vi 33 KB -
APEX_ITEM.MD5_CHECKSUM and Case Statements
I have an updateable report
select apex_item.display_and_save(3,parameter) ||
APEX_ITEM.MD5_CHECKSUM(parameter,value_char,value_number,to_char(value_date,'dd.mm.yyyy'),param_set) ||
apex_item.hidden(2,rownum) parameter
,value_char value_char_current
,APEX_ITEM.TEXT(4,value_char,20,128) value_char_new
,case when parameter in ('OBJINCID', 'HISTTRANSFERID') then '<span style="color:#000000;font-weight:bold">'||value_number||'</span>'
else to_char(value_number) end value_number_current
,APEX_ITEM.TEXT(5,value_number,10) value_number_new
,case when parameter = 'TRANSFERDAY' then '<span style="color:#000000;font-weight:bold">'||to_char(value_date,'dd.mm.yyyy')||'</span>'
else to_char(value_date,'dd.mm.yyyy') end value_date_current
,APEX_ITEM.DATE_POPUP2(6,value_date,'DD.MM.YYYY','15','10','style=""',null,null,null,null,null,'both',null,'MONTH_AND_YEAR') value_date_new
,apex_item.display_and_save(7,param_set) param_set
,apex_item.display_and_save(8,param_type) param_type
,APEX_ITEM.TEXT(9,jobname) jobname
,system system
,config config
,APEX_ITEM.TEXT(10,parameter) parameter_hid
,APEX_ITEM.TEXT(11,value_number) vnhid
,APEX_ITEM.DATE_POPUP2(12,value_date,'DD.MM.YYYY','15','10','style=""',null,null,null,null,null,'both',null,'MONTH_AND_YEAR') vdhid
from etl_job_param
where config = substr(:P285_CONFIG,instr(:P285_CONFIG,'_')+1)
and system = :P285_SYSTEMI would like to change my sql for the value_date_new col to
,case when parameter = 'TRANSFERDAY' then
APEX_ITEM.DATE_POPUP2(6,NULL,'DD.MM.YYYY','15','10','style="" disabled="disabled"',null,null,null,null,null,'both',null,'MONTH_AND_YEAR')
else
APEX_ITEM.DATE_POPUP2(6,value_date,'DD.MM.YYYY','15','10','style=""',null,null,null,null,null,'both',null,'MONTH_AND_YEAR') end value_date_newI think I need to change my checksum so if parameter = 'TRANSFERDAY' then use the value from the vdhid column and not value_date_new.
It is not allowing me to use column alias in the checksum
How do I do this ?
GusWell, you could either put the CASE statement in the checksum parameter as well (duplicating logic = bad) or use a factored subquery with the case statment in and alias that column, then reference it in the main query (logic in one place = good).
Cheers
Ben -
How do I use switch and case statements to fill more than one other field?
Hi all,
I'm new to the community.
I'm trying to make an existing form more user friendly for my coworkers. I want to use a switch and case approach in a drop-down list field so that the selection fills two seperate other fields with different info related to the selection.
I can already do this with one field, but if I add a second target field under an existing case the text doesn't appear there when I make the selection from the dropdown.
Basically, I'm asking if I can do this:
switch
(sNewSel){
case "1": // Selection 1 Row2.Field1
= "text for field 1";
Row1.Field2 = "text for field 2";
break;
etc.
It works if the "row1.field2" option isn't there, but not when it is present.
Any takers?I'm not sure if I will be able to send you the form. There may be too much to redact.
Would this last bit of code in the cell affect anything?
if
(bEnableTextField)
{Row2.Field1.access
= "open"; // enable field
Row2.Field1.caption.font.fill.color.value= "0,0,0"; // set caption to black
That is, do I also need to repeat the same thing for the second target cell (Row1.Field2)?
What would be possible hang ups that would prevent it from working correctly?
Dave
By the way, I'm not sure if my other attachment posted. I am trying again. -
Dear All,
I got stuck with the following statement. The error "ORA-00904: "DOC"."CRED_RPT_RCPT_IND": invalid identifier" seems make no sense. I checked the column and it looks right to me. Can someone help? Thanks!
SQL> update zz_supplier_documentation A
2 set forma_dcmtn_rcpt_stus_cd =
3 (case
4 when loc.busns_type_cd ='1'
5 and doc.CASH_FLOW_RCPT_IND='Y'
6 and doc.BAL_SHEET_RCPT_IND='Y'
7 and doc.INCM_STMT_RCPT_IND='Y'
8 and doc.SCHDL_L_RCPT_IND='Y'
9 and doc.CRED_RPT_RCPT_IND='Y'
10 then '02' ---for complete
11 else '01' ---for incomplete
12 end
13 )
14 where A.suplr_id in
15 (select doc.suplr_id
16 from cbss.zz_supplier_location loc,
17 cbss.zz_supplier_documentation doc
18 where loc.suplr_id = doc.suplr_id);
and doc.CRED_RPT_RCPT_IND='Y'
ERROR at line 9:
ORA-00904: "DOC"."CRED_RPT_RCPT_IND": invalid identifier
Below is the table definition:
SQL> desc zz_supplier_documentation
Name Null? Type
SUPLR_ID NOT NULL NUMBER(38)
BIDDER_NUM CHAR(7)
NSC_NUM CHAR(10)
CASH_FLOW_RCPT_IND CHAR(1)
BAL_SHEET_RCPT_IND CHAR(1)
INCM_STMT_RCPT_IND CHAR(1)
SCHDL_L_RCPT_IND CHAR(1)
SCHDL_C_RCPT_IND CHAR(1)
CRED_RPT_RCPT_IND CHAR(1)
FORM_10K_RCPT_IND CHAR(1)
EXPNSN_LTR_RCPT_IND CHAR(1)
LGL_NTWRK_MBR_CNTRCT_RCPT_IND CHAR(1)
CRTFCTN_DCMTN_RCPT_IND CHAR(1)
FORMA_DCMTN_RCPT_STUS_CD CHAR(2)
LAST_CHG_USER_ID VARCHAR2(80)
LAST_CHG_DT DATE
FORMB_DCMTN_RCPT_STUS_CD CHAR(2)Joel,
This is statement that I got an error on. The invalid character error was on line 9:
and doc.CRED_RPT_RCPT_IND='Y'
I do not see any invalid character on this line. So, I am stuck now.
update zz_supplier_documentation A
set forma_dcmtn_rcpt_stus_cd =
(case
when loc.busns_type_cd ='1'
and doc.CASH_FLOW_RCPT_IND='Y'
and doc.BAL_SHEET_RCPT_IND='Y'
and doc.INCM_STMT_RCPT_IND='Y'
and doc.SCHDL_L_RCPT_IND='Y'
and doc.CRED_RPT_RCPT_IND='Y'
then '02' ---for complete
else '01' ---for incomplete
end
where A.suplr_id in
(select doc.suplr_id
from cbss.zz_supplier_location loc,
cbss.zz_supplier_documentation doc
where loc.suplr_id = doc.suplr_id); -
i am trying to use switch statement for drawing different shapes by clicking shapes buttons (eg line ,rectangle oval etc) . i have got a method called setDrawMode and i am passing shape value as parameter to this method but nothing happen .all it is doing is drawing with default value.
my code for clicking button:
String s = event.getActionCommand();
if (s.equalsIgnoreCase("LINE"))
{ mycanvas.setDrawMode(0);}
else if (s.equalsIgnoreCase("RECTANGLE"))
{ mycanvas.setDrawMode(1);}
else if (s.equalsIgnoreCase("OVAL"))
{ mycanvas.setDrawMode(2);}my setDrawMode method:
public void setDrawMode(int mode)
switch (mode)
case LINE :
case RECTANGLE:
case OVAL:
this.mode = mode;
break; default:
throw new IllegalArgumentException();
}my code for paint method:
public void paintComponent(Graphics g)
super.paintComponent(g);
if (numPoints>0)
for (int i=0; i<numPoints-1; i+=2)
switch (mode)
case LINE:
g.drawLine(p.x,p[i].y,p[i+1].x,p[i+1].y);
g.drawLine(p[numPoints-1].x,p[numPoints-1].y,cx,cy);
break;
case RECTANGLE:
g.drawRect(p[i].x,p[i].y,p[i+1].x,p[i+1].y);
g.drawRect(p[numPoints-1].x,p[numPoints-1].y,cx,cy);
break;
case OVAL:g.drawOval(p[i].x,p[i].y,p[i+1].x,p[i+1].y);
g.drawOval(p[numPoints-1].x,p[numPoints-1].y,cx,cy);
break;
values for shapes
int LINE = 0
int RECTANGLE = 1
int OVAL = 2
please help
khurramwhat is the point of this switch here?
public void setDrawMode(int mode)
switch (mode)
case LINE :
case RECTANGLE:
case OVAL:
this.mode = mode;
break;
default: throw new IllegalArgumentException();
} This dosn't do anything but asign mode to the global mode, which is why you get the same value every time. You need to do something in the switch and you don't have a break between them so they would all execute anyway. You can try this.
public void setDrawMode(int mode)
switch (mode)
case LINE : this.mode = 0;
break;
case RECTANGLE: this.mode = 1;
break;
case OVAL: this.mode = 2;
break;
default: throw new IllegalArgumentException();
}But if your just trying to set a global mode you could just ommit the switch because its redundant
public void setDrawMode(int mode)
this.mode = mode;
// then you could call paint however you call it
paintComponent(this.getGraphics);
} -
Hi, I'm working on a performance issue for a customer.
I'm tuning some suspect SQL that uses complex DECODE statements to perform IF/THEN/ELSE logic.
I've taken a statement and rewritten it using CASE however what I've noticed is the cost of the query execution plan has increased dramatically as a result. N.B. I haven't changed the WHERE clause of the query as yet, just replaced one DECODE with the equivalent CASE.
The db version is 9.2.0.4. Does anyone know of issues with the performance of CASE as opposed to DECODE. I'm wondering should I leave the DECODEs as is even though they're way too complicated.
Tks,
Paul.Here's an example of a DECODE:
nvl(count(distinct decode
(decode(sign(ords.dwh_created_date_id-:v_start_cycle_id),1,1,0,1,-1,0) *
decode(sign(:v_end_cycle_id-ords.dwh_created_date_id),1,1,0,1,-1,0),1,ords.dwh_order_id,NULL)),0) calc1
The equivalent CASE I've coded is:
NVL(COUNT(DISTINCT(CASE WHEN (ords.dwh_created_date_id BETWEEN :v_start_cycle_id AND :v_end_cycle_id)
THEN
ords.dwh_order_id
ELSE
NULL
END)),0) calc1
I've been doing further testing with an amended WHERE clause and did run both CASE and DECODE versions. The performance difference between the two was negligible. So it seems (as I'd hoped) that the amendment of the execution path doesn't appear to be affected by CASE even though Oracle reports the query cost of it is higher.
It is slightly confusing though. Is the query cost in this case a red herring ? -
Hi all,
could anyone would be able to tell me which statement is faster among decode and case and why?
thanx
Newbieuser531731 wrote:
The difference is in the syntax, and case statement is standards compliance and decode function is a user defined function.I guess you mean: CASE is an ANSI standard, while DECODE is an Oracle Specific function -
Excel..case statement prob..urgent..plz
Hi,
In our RPD we are using Excel as datasource..my problem is when Create a column in BMM layer with case statement and even in Answers Formula section also I am getting aerror in Answers like..
State: HY000. Code: 10058. [NQODBC] [SQL_STATE: HY000] [nQSError: 10058] A general error has occurred. [nQSError: 16001] ODBC error state: 37000 code: -3100 message: [Microsoft][ODBC Excel Driver] Syntax error (missing operator) in query expression 'case when T52.[GRADE] = 'ASE' and T71.[P1] = 'Y' then T71.[Subtopic_id] end'.. [nQSError: 16014] SQL statement preparation failed. (HY000)
SQL Issued: SELECT Employee.EMP_ID saw_0, Facts.ASE saw_1 FROM EMP ORDER BY saw_0, saw_1
what may be the issue..when I am doing consistency check it not giving any warnings or errors..and If I tried in Answers column formula section also it is giving the error ...please give me what is missing...
Note:In RPD i set features to "Restore to default"..
Edited by: User on Jun 18, 2012 6:18 AMHi all,
by referring this thread I got solution and my problem solved But can anybody tell what This "Ask DBMS" button will do when we cliked it what is this functionality..
Excel and CASE statement. -
Hello,
This is relating to one of the previous posts.
CASE STATEMENT PERFORMANCE
As it has been a discussion of case statement performance. I tried to compare both the filter function and case statement.
they both actually generate the same physical query.
So I just am trying to understand the difference.
thanks,
DeepHi Deep,
There would be some performance using CASE where as filter function would generate straight SQL that is WHERE clause is added into the SQL statement for better performance.
Have a look at this http://www.biconsultinggroup.com/obiee-tips-and-tricks/using-a-filter-function-instead-of-case-statements.html
http://prolynxuk.com/blog/?p=462
UPDATED POST
Can you paste both SQL's generated here.
hope answered
Cheers,
KK
Edited by: Kranthi.K on Apr 22, 2011 7:33 PM
Maybe you are looking for
-
I cannot create a catalog because everywhere I try on my computer, it comes up with cannot Lightroom cannot create a catalog on network volumes. And is there any way to contact Adobe directly? Would you be able to give me a phone number and/or emai
-
Photo steam & icloud problem.
My photo stream got deleted, but in icloud it still says all the data is there just like it did before my photo stream got deleted. How to i get them back in my photo stream from icloud?
-
Icloud keychain verification code
I don't have access to the old phone number to recieve the verification code i've clicked on "Don't have access to this phone?' but it didn't really help.
-
Deploying a New Forms .ear File in Oracle Applications Release 12-FATAL ERR
Hello everyone, I am applying a scurity patch 7605070 to our R12 applications. As part of the post-install step, I need to follow Metalink Note 397174.1 to deploy a new forms .ear file. However, I am getting following FATAL ERROR: :->$FND_TOP/bin/txk
-
ChaRM: approving of a change request by various list of end users
Dear, experts. Can I customize ChaRM so, that before initiating change request a support message should be approved by by various list of end users depending on component (component A - list 1, component B - list 2)? For example some end-user wants