Avoid Hard Parsing for executing dynamic SQL using DUAL table Oracle

I want to know if dynamic sql statements involving DUAL table can be modified to remove HARD PARSING.
We have several SQL statements are stored in configuration table, here is sample example
-- query 1 before replacing index values as stored in config table ---
select count(*) from dual where  'REPLACE_VALUE_OF_INDEX_3' IN ('K')
AND (('REPLACE_VALUE_OF_INDEX_13' IN ('1053','1095','1199') ) OR ('REPLACE_VALUE_OF_INDEX_13' IN ('1200') ))
AND 'REPLACE_VALUE_OF_INDEX_2' IN ('6')
AND 'REPLACE_VALUE_OF_INDEX_15' IN ('870001305')
-- query 1 after replacing index values--
select count(*) from dual where  'REPLACE_VALUE_OF_INDEX_10' IN ('K')
AND (('1030' IN ('1053','1095','1199') ) OR ('1030' IN ('1200') ))
AND '2' IN ('6')
AND 'X' IN ('870001305')
-- query 2 before replacing index values as stored in config table --
select count(*) from dual where  'REPLACE_VALUE_OF_INDEX_5' IN ('361A','362A')
AND 'REPLACE_VALUE_OF_INDEX_22' BETWEEN '200707' AND '200806'
-- query 2 after replacing index values--
select count(*) from dual where  '3MAA' IN ('361A','362A') AND '201304' BETWEEN '200707' AND '200806'

If I got it right you have some (maybe lots of) conditions stored in a table (be patient - it's my interpretation)
create table eb_conditions as
select 1 rid,q'{:5 IN ('361A','362A') AND :3 BETWEEN '200707' AND '200806'}' cndtn from dual union all
select 2,q'{:2 IN ('361A','362A') AND :3 BETWEEN '200707' AND '200806'}' from dual union all
select 3,q'{:1 IN ('K') AND ((:2 IN ('1053','1095','1199') ) OR (:4 IN ('1200') )) AND :3 IN ('6') AND :5 IN ('870001305')}' from dual
RID
CNDTN
1
:5 IN ('361A','362A') AND :3 BETWEEN '200707' AND '200806'
2
:2 IN ('361A','362A') AND :3 BETWEEN '200707' AND '200806'
3
:1 IN ('K') AND ((:2 IN ('1053','1095','1199') ) OR (:4 IN ('1200') )) AND :3 IN ('6') AND :5 IN ('870001305')
and you have to check the conditions using values stored in an array
I used a table instead: the vl at rid = 1 representing the value of bind variable :1 in eb_conditions table and so on ...
create table eb_array as
select 1 rid,'K' vl from dual union all
select 2,'1199' from dual union all
select 3,'200803' from dual union all
select 4,'1000' from dual union all
select 5,'870001305' from dual
RID
VL
1
K
2
1199
3
200803
4
1000
5
870001305
You want to check the conditions using select count(*) from dual where <condition with binds substituted fron the array>
Judging from the title Hard Parsing represents the major problem and you cannot avoid it since every condition to be verified is different from every other condition.
I think your best bet is not to evaluate conditions row by row - context shift cannot be avoided and there might be more than one for each iteration.
So try to do it in a single step:
declare
w_cndtn varchar2(4000);
w_clob  clob;
w_cursor sys_refcursor;
one number;
two number;
begin
  dbms_lob.createtemporary(w_clob,false);
  for rw in (select rid,
                    max(cndtn) cndtn,
                    listagg(val,',') within group (order by rn)||',' usng
               from (select c.rid,c.cndtn,c.rn,c.bind,
                            replace(rtrim(c.bind),':'||to_char(v.rid),''''||v.vl||'''') val
                       from (select rid,
                                    cndtn,
                                    regexp_substr(cndtn,':\d+ ',1,level) bind,
                                    level rn
                               from eb_conditions
                             connect by level <= regexp_count(cndtn,':')
                                    and prior rid = rid
                                    and prior sys_guid() is not null
                            ) c,
                            eb_array v
                      where instr(c.bind,':'||v.rid||' ') > 0
              group by rid
  loop
    w_cndtn := rw.cndtn;
    while instr(w_cndtn,':') > 0
    loop
      w_cndtn := replace(w_cndtn,trim(regexp_substr(w_cndtn,':\d+ ',1,1)),substr(rw.usng,1,instr(rw.usng,',') - 1));
      rw.usng := substr(rw.usng,instr(rw.usng,',') + 1);
    end loop;
    w_cndtn := 'select '||to_char(rw.rid)||' cndtn_id,count(*) from dual where '||w_cndtn||' union all ';
    w_clob := w_clob ||' '||w_cndtn;
  end loop;
  w_clob := substr(w_clob,1,instr(w_clob,'union all',-1,1) - 1);
  open w_cursor for w_clob;
  loop
    fetch w_cursor into one,two;
    exit when w_cursor%notfound;
    dbms_output.put_line(to_char(one)||':'||to_char(two));
  end loop;
  dbms_lob.freetemporary(w_clob);
end;
1:0
2:0
3:0
Statement processed.
Regards
Etbin

Similar Messages

  • How to use bind variable in the query to avoid hard parsing

    Hi,
    I have a query which is using literals
    strquery:='SELECT SUMTOTAL FROM tab1 WHERE BATCHNO = '''
          || gBNo
          || ''' AND A_ID = '''
          || g_id
          || ''' AND L_ID = '''
          || g_LId
          || '''  AND S_Code = ''C_3'' ';
    execute immediate strquery;I have been asked to use a bind variable to avoid hard parsing.
    How do i do it?
    Edited by: user8731258 on Jul 27, 2012 5:07 AM
    Edited by: user8731258 on Jul 27, 2012 5:08 AM

    You dont need Dynamic SQL. Your Table and Column Name are static in that query. Just use Static SQL
    SELECT SUMTOTAL
      INTO lSumTotal
      FROM tab1
    WHERE BATCHNO = gBatchNo
       AND ATM_ID  = gAtm_id
       AND LOAD_ID = gLoadId
       AND STEP_CODE = 'C_3';

  • Error while parsing or executing XML-SQL document

    friends,
    my scenario is based on file to jdbc.i am facing  an error in receiver CC in RWB.
    The error states that '
    Error while parsing or executing XML-SQL document: Error processing request in sax parser: Error when executing statement for table/stored proc. 'MATMAS' (structure 'STATEMENT'): java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]String or binary data would be truncated.'
    My SOAP xml message is
    - <SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">
    - <SOAP:Header>
    - <sap:Main xmlns:sap="http://sap.com/xi/XI/Message/30" versionMajor="3" versionMinor="0" SOAP:mustUnderstand="1" xmlns:wsu="http://www.docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="wsuid-main-92ABE13F5C59AB7FE10000000A1551F7">
      <sap:MessageClass>ApplicationMessage</sap:MessageClass>
      <sap:ProcessingMode>asynchronous</sap:ProcessingMode>
      <sap:MessageId>18f17dd0-d503-11dc-cb4d-001635b02bfd</sap:MessageId>
      <sap:TimeSent>2008-02-06T22:30:21Z</sap:TimeSent>
    - <sap:Sender>
      <sap:Party agency="http://sap.com/xi/XI" scheme="XIParty" />
      <sap:Service>ECC</sap:Service>
      </sap:Sender>
    - <sap:Receiver>
      <sap:Party agency="http://sap.com/xi/XI" scheme="XIParty" />
      <sap:Service>BS_JDBC</sap:Service>
      </sap:Receiver>
      <sap:Interface namespace="http://file_to_jdbc">MI_JDBC_RECEIVER</sap:Interface>
      </sap:Main>
    - <sap:ReliableMessaging xmlns:sap="http://sap.com/xi/XI/Message/30" SOAP:mustUnderstand="1">
      <sap:QualityOfService>ExactlyOnce</sap:QualityOfService>
      </sap:ReliableMessaging>
    - <sap:DynamicConfiguration xmlns:sap="http://sap.com/xi/XI/Message/30" SOAP:mustUnderstand="1">
      <sap:Record namespace="http://sap.com/xi/XI/System/File" name="Directory">
    sapecc50\sapmnt\trans</sap:Record>
      <sap:Record namespace="http://sap.com/xi/XI/System/File" name="FileEncoding">UTF-8</sap:Record>
      <sap:Record namespace="http://sap.com/xi/XI/System/File" name="FileType">txt</sap:Record>
      <sap:Record namespace="http://sap.com/xi/XI/System/File" name="FileName">matmas1.txt</sap:Record>
      </sap:DynamicConfiguration>
    - <sap:HopList xmlns:sap="http://sap.com/xi/XI/Message/30" SOAP:mustUnderstand="1">
    - <sap:Hop timeStamp="2008-02-06T22:30:21Z" wasRead="false">
      <sap:Engine type="AE">af.e6e.sapecc6eval</sap:Engine>
      <sap:Adapter namespace="http://sap.com/xi/XI/System">XIRA</sap:Adapter>
      <sap:MessageId>18f17dd0-d503-11dc-cb4d-001635b02bfd</sap:MessageId>
      <sap:Info />
      </sap:Hop>
    - <sap:Hop timeStamp="2008-02-06T22:30:21Z" wasRead="false">
      <sap:Engine type="IS">is.01.sapecc6eval</sap:Engine>
      <sap:Adapter namespace="http://sap.com/xi/XI/System">XI</sap:Adapter>
      <sap:MessageId>18f17dd0-d503-11dc-cb4d-001635b02bfd</sap:MessageId>
      <sap:Info>3.0</sap:Info>
      </sap:Hop>
    - <sap:Hop timeStamp="2008-02-06T22:30:22Z" wasRead="false">
      <sap:Engine type="AE">af.e6e.sapecc6eval</sap:Engine>
      <sap:Adapter namespace="http://sap.com/xi/XI/System">XIRA</sap:Adapter>
      <sap:MessageId>18f17dd0-d503-11dc-cb4d-001635b02bfd</sap:MessageId>
      </sap:Hop>
      </sap:HopList>
    - <sap:Diagnostic xmlns:sap="http://sap.com/xi/XI/Message/30" SOAP:mustUnderstand="1">
      <sap:TraceLevel>Information</sap:TraceLevel>
      <sap:Logging>Off</sap:Logging>
      </sap:Diagnostic>
      </SOAP:Header>
    - <SOAP:Body>
    - <sap:Manifest xmlns:sap="http://sap.com/xi/XI/Message/30" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:wsu="http://www.docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="wsuid-manifest-5CABE13F5C59AB7FE10000000A1551F7">
    - <sap:Payload xlink:type="simple" xlink:href="cid:[email protected]">
      <sap:Name>MainDocument</sap:Name>
      <sap:Description />
      <sap:Type>Application</sap:Type>
      </sap:Payload>
      </sap:Manifest>
      </SOAP:Body>
      </SOAP:Envelope>
    and payload message is
    <?xml version="1.0" encoding="UTF-8" ?>
    - <ns0:MT_JDBC_RECEIVER xmlns:ns0="http://file_to_jdbc">
    - <STATEMENT>
    - <ROW action="INSERT">
      <TABLE>MATMAS</TABLE>
    - <access>
      <MATNR>38</MATNR>
      <MTART>HALB</MTART>
      <MATKL>00107</MATKL>
      <MEINS>pc</MEINS>
      <ERSDA>2008.04.05</ERSDA>
      <BRGEW>10</BRGEW>
      <NTGEW>12</NTGEW>
      <GEWEI>KG</GEWEI>
      </access>
    - <access>
      <MATNR>88</MATNR>
      <MTART>FERT</MTART>
      <MATKL>02004</MATKL>
      <MEINS>PC</MEINS>
      <ERSDA>2008.04.05</ERSDA>
      <BRGEW>12</BRGEW>
      <NTGEW>13</NTGEW>
      <GEWEI>KG</GEWEI>
      </access>
    - <access>
      <MATNR>89</MATNR>
      <MTART>FERT</MTART>
      <MATKL>02004</MATKL>
      <MEINS>PC</MEINS>
      <ERSDA>2008.03.02</ERSDA>
      <BRGEW>12</BRGEW>
      <NTGEW>14</NTGEW>
      <GEWEI>KG</GEWEI>
      </access>
    - <access>
      <MATNR>98</MATNR>
      <MTART>HALB</MTART>
      <MATKL>2</MATKL>
      <MEINS>PC</MEINS>
      <ERSDA>2006.09.01</ERSDA>
      <BRGEW>12</BRGEW>
      <NTGEW>12</NTGEW>
      <GEWEI>KG</GEWEI>
      </access>
    - <access>
      <MATNR>170</MATNR>
      <MTART>NLAG</MTART>
      <MATKL>4</MATKL>
      <MEINS>PC</MEINS>
      <ERSDA>2005.03.02</ERSDA>
      <BRGEW>2</BRGEW>
      <NTGEW>3</NTGEW>
      <GEWEI>KG</GEWEI>
      </access>
    - <access>
      <MATNR>178</MATNR>
      <MTART>NLAG</MTART>
      <MATKL>4</MATKL>
      <MEINS>PC</MEINS>
      <ERSDA>2007.03.06</ERSDA>
      <BRGEW>3</BRGEW>
      <NTGEW>4</NTGEW>
      <GEWEI>KG</GEWEI>
      </access>
    - <access>
      <MATNR>188</MATNR>
      <MTART>NLAG</MTART>
      <MATKL>5</MATKL>
      <MEINS>PC</MEINS>
      <ERSDA>2007.05.02</ERSDA>
      <BRGEW>2</BRGEW>
      <NTGEW>3</NTGEW>
      <GEWEI>KG</GEWEI>
      </access>
    - <access>
      <MATNR>288</MATNR>
      <MTART>HALB</MTART>
      <MATKL>101</MATKL>
      <MEINS>PC</MEINS>
      <ERSDA>2006.02.11</ERSDA>
      <BRGEW>5</BRGEW>
      <NTGEW>4</NTGEW>
      <GEWEI>KG</GEWEI>
      </access>
    - <access>
      <MATNR>358</MATNR>
      <MTART>HAWA</MTART>
      <MATKL>2</MATKL>
      <MEINS>PC</MEINS>
      <ERSDA>2007.09.09</ERSDA>
      <BRGEW>500</BRGEW>
      <NTGEW>500</NTGEW>
      <GEWEI>G</GEWEI>
      </access>
    - <access>
      <MATNR>359</MATNR>
      <MTART>HAWA</MTART>
      <MATKL>2</MATKL>
      <MEINS>PC</MEINS>
      <ERSDA>2007.08.01</ERSDA>
      <BRGEW>20</BRGEW>
      <NTGEW>10</NTGEW>
      <GEWEI>G</GEWEI>
      </access>
      </ROW>
      </STATEMENT>
      </ns0:MT_JDBC_RECEIVER>
    Could anybody help me in sorting out this issue.My advance thanks

    hi,
    ypur structure is bad defined.
    if you want to do an insert, the DT should be
    <ns0:MT_JDBC_RECEIVER xmlns:ns0="http://file_to_jdbc">
    ___<StatementName>
    ______<dbTableName action=”INSERT”>
    _____<table>MATMAS</table>
    _______ <access>
    ___________<MATNR>38</MATNR>
    ___________<MTART>HALB</MTART>
    ___________<MATKL>00107</MATKL>
    ___________<MEINS>pc</MEINS>
    ___________<ERSDA>2008.04.05</ERSDA>
    ___________<BRGEW>10</BRGEW>
    ___________<NTGEW>12</NTGEW>
    ___________<GEWEI>KG</GEWEI>
    ______</access>
    _____</dbTableName>
    __ </StatementName>
    </ns0:MT_JDBC_RECEIVER>
    the ROW field is used when you wait receive data from DB for example you execute and SQL Query from Sender communication channel "SELECT name FROM TABLE Names"
    so, the result of this query would be, for example:
    <row>
    ____<name>joge</name>
    </row>
    <row>
    ____<name>pepe</name>
    </row>
    <row>
    ____<name>nicola</name>
    </row>
    See this link
    http://help.sap.com/saphelp_nw04/helpdata/en/2e/96fd3f2d14e869e10000000a155106/frameset.htm
    Thanks
    Rodrigo
    Edited by: Rodrigo Pertierra on Feb 8, 2008 8:40 AM
    Edited by: Rodrigo Pertierra on Feb 8, 2008 8:42 AM

  • Error while parsing or executing XML-SQL document attribute "action" missin

    Hi All,
          I am doing a scenario for IDOC to JDBC, When I push IDOC from R/3 , IDOC sent to XI System successfully, 
           I have also checked in SXMB_MONI it is showing the successful staus without any errors, and I have also copied the xml structure from main document of payloads and tested the mapping in Integration Designer, and it is showing successfull message.
    here is the xml structure from  payloads of Request Message Mapping ........
      <?xml version="1.0" encoding="UTF-8" ?>
    - <ns0:RTACOGRP_RECEIVER_MT xmlns:ns0="http://prospecta.com/wsorta/cosmas/idoc2jdbc">
    - <COGRP_TMP_PROC action="EXECUTE">
      <IDOCNUMBER isInput="TRUE" type="CHAR">1000001</IDOCNUMBER>
      <E1COGH_NUMBER isInput="TRUE" type="CHAR">1</E1COGH_NUMBER>
      <E1COGH_HIGHERSEGMENT isInput="TRUE" type="CHAR">1</E1COGH_HIGHERSEGMENT>
      <E1COGH_MSGFN isInput="TRUE" type="CHAR">1</E1COGH_MSGFN>
      <E1COGH_GROUPTYPE isInput="TRUE" type="CHAR">1</E1COGH_GROUPTYPE>
      <E1COGH_GROUPNAME isInput="TRUE" type="CHAR">1</E1COGH_GROUPNAME>
      <E1COGH_KOKRS isInput="TRUE" type="CHAR">1</E1COGH_KOKRS>
      <E1COGHT_NUMBER isInput="TRUE" type="CHAR">1</E1COGHT_NUMBER>
      <E1COGHT_HIGHERSEGMENT isInput="TRUE" type="CHAR">2</E1COGHT_HIGHERSEGMENT>
      <E1COGHT_LANGU isInput="TRUE" type="CHAR">2</E1COGHT_LANGU>
      <E1COGHT_DESCRIPT isInput="TRUE" type="CHAR">2</E1COGHT_DESCRIPT>
      <E1COGHT_LANGU_ISO isInput="TRUE" type="CHAR">2</E1COGHT_LANGU_ISO>
      <E1COGV_NUMBER isInput="TRUE" type="CHAR">1</E1COGV_NUMBER>
      <E1COGV_HIGHERSEGMENT isInput="TRUE" type="CHAR">3</E1COGV_HIGHERSEGMENT>
      <E1COGV_FROMVALUE isInput="TRUE" type="CHAR">6</E1COGV_FROMVALUE>
      <E1COGV_TOVALUE isInput="TRUE" type="CHAR">6</E1COGV_TOVALUE>
      <E1COGS_NUMBER isInput="TRUE" type="CHAR">1</E1COGS_NUMBER>
      <E1COGS_HIGHERSEGMENT isInput="TRUE" type="CHAR">5</E1COGS_HIGHERSEGMENT>
      <E1COGS_SUBGROUP isInput="TRUE" type="CHAR">4</E1COGS_SUBGROUP>
      <E1COGHR_NUMBER isInput="TRUE" type="CHAR">1</E1COGHR_NUMBER>
      <E1COGHR_HIGHERSEGMENT isInput="TRUE" type="CHAR">6</E1COGHR_HIGHERSEGMENT>
      <E1COGHR_SNAME isInput="TRUE" type="CHAR">3</E1COGHR_SNAME>
      <E1COGHR_PRTCLASS isInput="TRUE" type="CHAR">3</E1COGHR_PRTCLASS>
      <E1COGHR_AUTHGR isInput="TRUE" type="CHAR">3</E1COGHR_AUTHGR>
      <E1COGSR_NUMBER isInput="TRUE" type="CHAR">1</E1COGSR_NUMBER>
      <E1COGSR_HIGHERSEGMENT isInput="TRUE" type="CHAR">7</E1COGSR_HIGHERSEGMENT>
      <E1COGSR_XSUPPRESS isInput="TRUE" type="CHAR">5</E1COGSR_XSUPPRESS>
      <E1COGSR_PRTCLASS isInput="TRUE" type="CHAR">5</E1COGSR_PRTCLASS>
      <E1COGSR_LNAME isInput="TRUE" type="CHAR">5</E1COGSR_LNAME>
      <E1COGVT_NUMBER isInput="TRUE" type="CHAR">1</E1COGVT_NUMBER>
      <E1COGVT_HIGHERSEGMENT isInput="TRUE" type="CHAR">9</E1COGVT_HIGHERSEGMENT>
      <E1COGVT_LANGU isInput="TRUE" type="CHAR">7</E1COGVT_LANGU>
      <E1COGVT_DESCRIPT isInput="TRUE" type="CHAR">7</E1COGVT_DESCRIPT>
      <E1COGVT_LANGU_ISO isInput="TRUE" type="CHAR">7</E1COGVT_LANGU_ISO>
      <E1COGVR_NUMBER isInput="TRUE" type="CHAR">1</E1COGVR_NUMBER>
      <E1COGVR_HIGHERSEGMENT isInput="TRUE" type="CHAR">12</E1COGVR_HIGHERSEGMENT>
      <E1COGVR_XSUPPRESS isInput="TRUE" type="CHAR">8</E1COGVR_XSUPPRESS>
      <E1COGVR_PRTCLASS isInput="TRUE" type="CHAR">8</E1COGVR_PRTCLASS>
      <E1COGVR_LNAME isInput="TRUE" type="CHAR">8</E1COGVR_LNAME>
      </COGRP_TMP_PROC>
      </ns0:RTACOGRP_RECEIVER_MT>
    When I checked for component monitoring in runtime workbench....
    these are the messages........
    <i>Error while parsing or executing XML-SQL document: Error processing request in sax parser: No 'action' attribute found in XML document (attribute "action" missing or wrong XML structure)</i>
    Here are the messages from message monitoring ......
    2007-06-07 12:42:17 Success Receiver JDBC adapter: processing started; QoS required: ExactlyOnce
    2007-06-07 12:42:17 Success JDBC adapter receiver channel RTACOGRP_COM_Chan: processing started; party  , service WSORTABS
    2007-06-07 12:42:17 Error No "action" attribute found in XML document ("action" attribute missing or wrong XML structure)
    2007-06-07 12:42:17 Error MP: exception caught with cause com.sap.aii.af.ra.ms.api.RecoverableException: Error processing request in sax parser: No 'action' attribute found in XML document (attribute "action" missing or wrong XML structure)
    2007-06-07 12:42:17 Error Exception caught by adapter framework: Error processing request in sax parser: No 'action' attribute found in XML document (attribute "action" missing or wrong XML structure)
    2007-06-07 12:42:17 Error Delivery of the message to the application using connection JDBC_http://sap.com/xi/XI/System failed, due to: com.sap.aii.af.ra.ms.api.RecoverableException: Error processing request in sax parser: No 'action' attribute found in XML document (attribute "action" missing or wrong XML structure).
    2007-06-07 12:42:17 Error The message status set to NDLV.
    Can any body please resolve the problem.....
    Thanks in Advance
    Murthy

    Bhavesh,
    Now I have changed the data structure , and the resultant structure is like this...
      <?xml version="1.0" encoding="UTF-8" ?>
    - <ns0:RTACOGRP_RECEIVER_MT xmlns:ns0="http://prospecta.com/wsorta/cosmas/idoc2jdbc">
    - <Statement>
    - <COGRP_TMP_PROC action="EXECUTE">
      <IDOCNUMBER isInput="TRUE" type="CHAR">100002223</IDOCNUMBER>
      <E1COGH_NUMBER isInput="TRUE" type="CHAR">1</E1COGH_NUMBER>
      <E1COGH_HIGHERSEGMENT isInput="TRUE" type="CHAR">1</E1COGH_HIGHERSEGMENT>
      <E1COGH_MSGFN isInput="TRUE" type="CHAR">H</E1COGH_MSGFN>
      <E1COGH_GROUPTYPE isInput="TRUE" type="CHAR">H</E1COGH_GROUPTYPE>
      <E1COGH_GROUPNAME isInput="TRUE" type="CHAR">H</E1COGH_GROUPNAME>
      <E1COGH_KOKRS isInput="TRUE" type="CHAR">H</E1COGH_KOKRS>
      <E1COGHT_NUMBER isInput="TRUE" type="CHAR">1</E1COGHT_NUMBER>
      <E1COGHT_HIGHERSEGMENT isInput="TRUE" type="CHAR">2</E1COGHT_HIGHERSEGMENT>
      <E1COGHT_LANGU isInput="TRUE" type="CHAR">T</E1COGHT_LANGU>
      <E1COGHT_DESCRIPT isInput="TRUE" type="CHAR">T</E1COGHT_DESCRIPT>
      <E1COGHT_LANGU_ISO isInput="TRUE" type="CHAR">T</E1COGHT_LANGU_ISO>
      <E1COGV_NUMBER isInput="TRUE" type="CHAR">1</E1COGV_NUMBER>
      <E1COGV_HIGHERSEGMENT isInput="TRUE" type="CHAR">3</E1COGV_HIGHERSEGMENT>
      <E1COGV_FROMVALUE isInput="TRUE" type="CHAR">V</E1COGV_FROMVALUE>
      <E1COGV_TOVALUE isInput="TRUE" type="CHAR">V</E1COGV_TOVALUE>
      <E1COGS_NUMBER isInput="TRUE" type="CHAR">1</E1COGS_NUMBER>
      <E1COGS_HIGHERSEGMENT isInput="TRUE" type="CHAR">5</E1COGS_HIGHERSEGMENT>
      <E1COGS_SUBGROUP isInput="TRUE" type="CHAR">S</E1COGS_SUBGROUP>
      <E1COGHR_NUMBER isInput="TRUE" type="CHAR">1</E1COGHR_NUMBER>
      <E1COGHR_HIGHERSEGMENT isInput="TRUE" type="CHAR">7</E1COGHR_HIGHERSEGMENT>
      <E1COGHR_SNAME isInput="TRUE" type="CHAR">R</E1COGHR_SNAME>
      <E1COGHR_PRTCLASS isInput="TRUE" type="CHAR">R</E1COGHR_PRTCLASS>
      <E1COGHR_AUTHGR isInput="TRUE" type="CHAR">R</E1COGHR_AUTHGR>
      <E1COGSR_NUMBER isInput="TRUE" type="CHAR">1</E1COGSR_NUMBER>
      <E1COGSR_HIGHERSEGMENT isInput="TRUE" type="CHAR">8</E1COGSR_HIGHERSEGMENT>
      <E1COGSR_XSUPPRESS isInput="TRUE" type="CHAR">S</E1COGSR_XSUPPRESS>
      <E1COGSR_PRTCLASS isInput="TRUE" type="CHAR">S</E1COGSR_PRTCLASS>
      <E1COGSR_LNAME isInput="TRUE" type="CHAR">S</E1COGSR_LNAME>
      <E1COGVT_NUMBER isInput="TRUE" type="CHAR">1</E1COGVT_NUMBER>
      <E1COGVT_HIGHERSEGMENT isInput="TRUE" type="CHAR">10</E1COGVT_HIGHERSEGMENT>
      <E1COGVT_LANGU isInput="TRUE" type="CHAR">T</E1COGVT_LANGU>
      <E1COGVT_DESCRIPT isInput="TRUE" type="CHAR">T</E1COGVT_DESCRIPT>
      <E1COGVT_LANGU_ISO isInput="TRUE" type="CHAR">T</E1COGVT_LANGU_ISO>
      <E1COGVR_NUMBER isInput="TRUE" type="CHAR">1</E1COGVR_NUMBER>
      <E1COGVR_HIGHERSEGMENT isInput="TRUE" type="CHAR">11</E1COGVR_HIGHERSEGMENT>
      <E1COGVR_XSUPPRESS isInput="TRUE" type="CHAR">E</E1COGVR_XSUPPRESS>
      <E1COGVR_PRTCLASS isInput="TRUE" type="CHAR">E</E1COGVR_PRTCLASS>
      <E1COGVR_LNAME isInput="TRUE" type="CHAR">E</E1COGVR_LNAME>
      </COGRP_TMP_PROC>
      </Statement>
      </ns0:RTACOGRP_RECEIVER_MT>
    Now in message monitoring error is showing like this...
    <i>Error while parsing or executing XML-SQL document: Error processing request in sax parser: Error when executing statement for table/stored proc. 'COGRP_TMP_PROC' (structure 'Statement'): java.sql.SQLException: General error</i>
    Now in Component Monitoring error is showing like this....
    <i>Delivery of the message to the application using connection JDBC_http://sap.com/xi/XI/System failed, due to: com.sap.aii.af.ra.ms.api.RecoverableException: Error processing request in sax parser: Error when executing statement for table/stored proc. 'COGRP_TMP_PROC' (structure 'Statement'): java.sql.SQLException: General error</i>
    I have tested the stored procedure in sql by giving the same values , it was successfully executed..
    Can you please tell me where is the error still in structure ...
    Thanks in Advance,
    Murthy.

  • Error in executing dynamic SQL

    i am getting error in executing dynamic SQL
    declare
    vr_RenewService NUMBER(10,0);
    vr_sql VARCHAR2(50);
    begin
    vr_sql:='Select Case
    when 5 <= 365 Then 1
    When 1= 0 Then 1
    else 0 end into' || TO_CHAR(vr_RenewService) || 'from dual;';
    execute immediate vr_sql;
    --dbms_output.put_line(vr_RenewService);
    end;
    ERROR
    ORA-06502: PL/SQL: numeric or value error: character string buffer too small
    ORA-06512: at line 6
    06502. 00000 - "PL/SQL: numeric or value error%s"
    *Cause:   
    *Action:                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   

    i too have tried this before you posted this solution but getting error message
    declare
    vr_RenewService NUMBER(10,0);
    vr_sql VARCHAR2(100);
    begin
    vr_sql:='Select Case
    when 5 <= 365 Then 1
    When 1= 0 Then 1
    else 0 end from dual;';
    execute immediate vr_sql into vr_RenewService;
    --dbms_output.put_line(vr_RenewService);
    end;
    ORA-06512: at line 11
    00911. 00000 - "invalid character"
    *Cause:    identifiers may not start with any ASCII character other than
    letters and numbers. $#_ are also allowed after the first
    character. Identifiers enclosed by doublequotes may contain
    any character other than a doublequote. Alternative quotes
    (q'#...#') cannot use spaces, tabs, or carriage returns as
    delimiters. For all other contexts, consult the SQL Language
    Reference Manual.
    *Action:                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           

  • How can I execute Dynamic SQL statement in Forms?

    Hi All,
    I have to execute dynamic SQL statement from Forms
    Below statement I have to execute
    "EXECUTE IMMEDIATE v_stmt INTO v_return;".
    Googled for the same got results saying, Better use Database function or procedures to execute these Dynamic Statements but We want to execute in forms only.
    Can any one help me..
    Thanks,
    Madhu

    So in short you are trading code obfuscation for maintainability and the ability to share code between tools? If from somewhere else you need a procedure already implemented in database PL/SQL (and now ported to forms) this would mean you'd need to implement it in every other tool. In times where you might want to integrate your forms with $other_technology and putting stuff on the database is the first step to share functionality you just go the opposite way? And all that because someone is afraid that somebody might steal your source code? I am sorry to be blunt, but this is just plain stupid.
    Leaving aside that some things like Analytic Functions, Bulk processing or execute immediate are not even available in forms your software consists of how many LOC? How long does it take to bring a new developer up to speed with your source code? Imagine how long that would take for a developer who doesn't have coleagues who know their way around.
    And just so you know: I work for a ISV selling a closed-source product as well. We have 200+ customers all over the planet. We are well aware that wrapped packages can be reverse engineered. The premise is: stored procedures can be reused in every tool we have, if it makes sense to put stuff on the database by all means do it. If someone would want to reverse engineer our software I'd wish him good luck as some parts are implemented in such a hilarious complicated way I have troubles understanding them (and quite frankly I refuse to understand certain parts, but that's another story). I do work for almost 10 years for that ISV.
    In any case the possible solutions have already been mentioned: you have exec_sql, create_group_from_query and forms_ddl to execute dynamic SQL in forms whereas forms_ddl is a one way street and most certainly not the thing you need or want. Take a look at the documentation for the other 2 things.
    cheers

  • How to get the list of values for a dynamic parameter using Web Services SDK?

    <p>I am struggling to get the list of values for a dynamic parameter of a report.</p><p>I am using Java Web Services SDK ... I tried to use PromptInfo.getLOV().getValues() method but it does not work.</p><p>First of all ... is this possible (to get the list of values for a dynamic param) using Web Services?</p><p>Second of all, if this is possible, how should I do it ... it seems it works fine when running the report from CMC. It asks for DB logon info and after that it provides a list of values.</p><p>Thx </p>

    <p>Your assumption is correct. We are trying to get the LOVs from the Crystal Report. I was not aware that this is not supported by Web Services SDK.</p><p>We used Web Services SDK to integrated the Crystal Reports in our web application. We implemented some basic actions for reports: schedule, view instances, run ad-hoc reports.</p><p>We encountered this problem when trying to run/schedule reports with dynamic parameters (a list of values from DB). We were unable to get the LOVs.</p><p>Please let me know if you can think of an alternative to look at.</p><p>Thanks a lot,</p><p>Catalin </p>

  • I have just upgraded from a Macbook to a Macbook Air. I have been using a iomega external hard drive for Time Machine, which use a Firewire. However, Macbook Air's do not have a Firewire port and i cannot find an adaptor anywhere. Can anyone help?? Thanks

    I have just upgraded from a Macbook to a Macbook Air. I have been using a iomega external hard drive for Time Machine, which use a Firewire. However, Macbook Air's do not have a Firewire port and i cannot find an adaptor anywhere. Can anyone help?? Thanks

    There has never been a reliable firewire ---> USB adapter suitable for external high speed storage.  This was a major issue when the MacBooks lost the firewire port a number of years ago (Apple subsequently brought it back).
    The only high speed port on the Air is the ThunderBolt port.  There are external ThunderBolt drive options out there, but they're somewhat more expensive than traditional USB/FireWire options.

  • Dynamic security using Security table in SSAS Tabular model

    Hi, 
    Platform : SSAS Tabular model (VS 2010)
    I need to apply Dynamic security using Security table(manually created) in Tabular model, Need to apply filter for 2 tables. I am able to
    create roles in Tabular model using USERNAME() and LOOKUP() function it worked fine. But the problem is when i am trying to give full access for a particular column and limit the access in other column, it is not working properly.
    Please find below table and guide me where i am falling short. In the Security table wherever you find ALL it means full access.
    Security table
    Login Name
    Dim_Country
    Dim_Customer
    DOMAIN\User1
    ALL
    2
    User1 should see all countries but Only 2,4 Customers
    DOMAIN\User1
    ALL
    4
    DOMAIN\User2
    2
    ALL
    User2 should see all customers but Only 2,3 countries
    DOMAIN\User2
    3
    ALL
    DOMAIN\User3
    ALL
    ALL
    User3 should see all Customers and Countries
    DOMAIN\User4
    1
    3
    User4 should see 1 Country and 3 Customer
    ALL - means NO restriction
    Numeric values indicate the Dimension IDs
    Do let me know if further explanations required.
    Thanks,
    Sundar

    Hi Sundar,
    According to your description, you want to implement dynamic security using Security table in SQL Server Analysis Services Tabular model, right?
    It is very common to have data security implementation in BI projects either at databases or Cubes and sometimes this security implementation and maintenance goes out of control due to the dynamic flow of business information. Here are some links which describe
    dynamic security implementation at SSAS tabular model using an external security table, please see:
    http://bipassion.wordpress.com/2012/10/01/ssas-tabular-dynamic-security/
    http://www.bidn.com/blogs/ChrisSchmidt/ssas/4332/dynamic-security-in-tabular
    Regards,
    Charlie Liao
    TechNet Community Support

  • Is it possible to execute an application using threads in oracle db 11g?

    Hi all, I would like to know if it is possible to execute an application using threads in oracle database 11g. Actualy, I would like to know if is is possible to execute a pl/sql program in a similar way as I run threads in a java application.
    Thanks in advance.
    Edited by: user4073561 on 24/11/2010 05:19

    In oracle there is parallel execution/servers,and this is analogy java threads.Refer
    http://download.oracle.com/docs/cd/B28359_01/server.111/b28310/manproc006.htm

  • How to use dual table in ODI in source side for nested queries?

    Hi,
    Any idea how to use dual table in source for more than once. I want to build a ODI interface for the following source query
    SELECT ACTV_TYP.ACTV_TYP_SRC_CD, ACTV_TYP.ACTV_TYP, PORT_ACTV_TYP.PORT_ACTV_TYP_SRC_CD, PORT_ACTV_TYP.PORT_ACTV_TYP, SFT_DLT_STS.SFT_DLT_STS_SRC_CD, SFT_DLT_STS.SFT_DLT_STS
    FROM
    SELECT LOW_VALUE PORT_ACTV_TYP_SRC_CD, MEANING PORT_ACTV_TYP
    FROM CUSTOMS.DOMAIN_ALLOW_COLUMNS_VALUES
    WHERE TABLE_NAME = 'BRKR_PORTS'
    AND COLUMN_NAME = 'WORK_PORT_TYPE') PORT_ACTV_TYP,
    (SELECT LOW_VALUE SFT_DLT_STS_SRC_CD, MEANING SFT_DLT_STS
    FROM CUSTOMS.DOMAIN_ALLOW_COLUMNS_VALUES
    WHERE TABLE_NAME = 'BANKS'
    AND COLUMN_NAME = 'REC_STATUS') SFT_DLT_STS,
    (SELECT 1 ACTV_TYP_SRC_CD, '?????' ACTV_TYP FROM DUAL
    UNION ALL
    SELECT 2 ACTV_TYP_SRC_CD, '???????' ACTV_TYP FROM DUAL) ACTV_TYP
    Regards

    If the below query is equivalent , it seems you don't need dual table at all , just default the values in the interface.
    You are using dual tables to populate values ACTV_TYP.ACTV_TYP_SRC_CD, ACTV_TYP.ACTV_TYP values. Look at your query in the following manner :
    SELECT '1', '?????', PORT_ACTV_TYP.PORT_ACTV_TYP_SRC_CD, PORT_ACTV_TYP.PORT_ACTV_TYP, SFT_DLT_STS.SFT_DLT_STS_SRC_CD, SFT_DLT_STS.SFT_DLT_STS
    FROM
    SELECT LOW_VALUE PORT_ACTV_TYP_SRC_CD, MEANING PORT_ACTV_TYP
    FROM CUSTOMS.DOMAIN_ALLOW_COLUMNS_VALUES
    WHERE TABLE_NAME = 'BRKR_PORTS'
    AND COLUMN_NAME = 'WORK_PORT_TYPE') PORT_ACTV_TYP,
    (SELECT LOW_VALUE SFT_DLT_STS_SRC_CD, MEANING SFT_DLT_STS
    FROM CUSTOMS.DOMAIN_ALLOW_COLUMNS_VALUES
    WHERE TABLE_NAME = 'BANKS'
    AND COLUMN_NAME = 'REC_STATUS') SFT_DLT_STS
    UNION
    SELECT 2 , '??????', PORT_ACTV_TYP.PORT_ACTV_TYP_SRC_CD, PORT_ACTV_TYP.PORT_ACTV_TYP, SFT_DLT_STS.SFT_DLT_STS_SRC_CD, SFT_DLT_STS.SFT_DLT_STS
    FROM
    SELECT LOW_VALUE PORT_ACTV_TYP_SRC_CD, MEANING PORT_ACTV_TYP
    FROM CUSTOMS.DOMAIN_ALLOW_COLUMNS_VALUES
    WHERE TABLE_NAME = 'BRKR_PORTS'
    AND COLUMN_NAME = 'WORK_PORT_TYPE') PORT_ACTV_TYP,
    (SELECT LOW_VALUE SFT_DLT_STS_SRC_CD, MEANING SFT_DLT_STS
    FROM CUSTOMS.DOMAIN_ALLOW_COLUMNS_VALUES
    WHERE TABLE_NAME = 'BANKS'
    AND COLUMN_NAME = 'REC_STATUS') SFT_DLT_STS
    Now you can use dataset to make UNION.

  • Execute Dynamic SQL statement using procedure builder

    i want to execute a dynamic SQL statment using procedure builder not using forms
    because my statement depending on a variable table name
    i know that i can do that from forms using
    FORMS_DDL('SQL_STAT');
    but i wanna to use the procedure builder
    which function i should use and how?
    please explain in example if you don't mind.
    thanks

    Hi,
    You can very well use DBMS_SQL Package supplied by Oracle for doing this.
    Search for DBMS_SQL in OTN. You will get all info regarding this.
    Regards.
    <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica">quote:</font><HR>Originally posted by itslul:
    i want to execute a dynamic SQL statment using procedure builder not using forms
    because my statement depending on a variable table name
    i know that i can do that from forms using
    FORMS_DDL('SQL_STAT');
    but i wanna to use the procedure builder
    which function i should use and how?
    please explain in example if you don't mind.
    thanks<HR></BLOCKQUOTE>
    null

  • How to use a collection type of bind variable for execute dynamic statement

    Hi,
    We have a case where we copy selective data from Schema A To Schema B in one oracle database. The copy is achieved by using
    execute immediate 'insert into '||target_schema||'.tablea select * from '||from_schema||'.table a where a.id in (select test_id from '||from_schema||'.table c);';
    This works fine it takes an average of 10 seconds to copy around 14 tables. We have a requirement to bring this time to 2 seconds. One observation has been the clause
    "select test_id from '||from_schema||'.table c" in the above sql statement repeats for many inserts . Thus we were thinking to bulk fetch this set of tests ids and use a bind vatiable of collection type for the execute immediate clause. Any suggestions on how to achieve it?
    Thanks,
    Chandana

    >
    One observation has been the clause
    "select test_id from '||from_schema||'.table c" in the above sql statement repeats for many inserts
    >
    So what? Constructing a string for a table level insert and parsing it can't possibly be a performance problem. If you were creating a string in a loop to insert rows into a table by getting the data FROM a collection - that's a problem that keeps showing up in the forums.
    I'm with bravid and Nikolay on this one. First find out which side, select/insert, the problem is on.
    As they said you need to provide more information about the process.
    And using collections for your use case is definitely not the thing to do.
    1. How many rows are we talking about?
    2. Are the rows being inserted into an empty table?
    3. Are you running these queries during peak production hours or in a batch windows?
    Tune the SELECT if the problem is on that side.
    Post an execution plan for the SELECT part of a query you think should run faster.
    SET SERVEROUTPUT ON
    SET AUTOTRACE TRACEONLY
    SQL> select * from emp;
    Execution Plan
    Plan hash value: 3956160932
    | Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
    |   0 | SELECT STATEMENT  |      |    14 |   546 |     3   (0)| 00:00:01 |
    |   1 |  TABLE ACCESS FULL| EMP  |    14 |   546 |     3   (0)| 00:00:01 |
    SQL>On the INSERT side you might be able to use bulk inserts
    ALTER TABLE myTable NOLOGGING;
    INSERT /*+ append */ INTO myTable . . .
    ALTER TABLE myTable LOGGINGIf the insert tables are always reused you could just leave them as NOLOGGING. Since you can't recover bulk data you need to make sure to get a good backup after the loads if you need to recover the data from the logs rather than just reload it yourself.

  • Using information from ItResource for executing custom sql in OIM 11g

    I need executing a custom sql query using a connection of a ItResource. How can I get the instance of connection for to execute the sql query ? Someone have a idea of how i make this ? Help me ...
    Tks

    HashMap itAttribute = new HashMap();
    itAttribute.put("IT Resources.Name","IT-DB01");
    tcITResourceInstanceOperationsIntf itResource=null;
    tcResultSet resItResKey;
    resItResKey = itResource.findITResourceInstances(itAttribute);
    long iTesourceKey = resItResKey.getLongValue("IT Resource.Key");
    tcResultSet resItRes = itResource.getITResourceInstanceParameters(iTesourceKey);
    Append following lines:-
              HashMap<String, String> hashMap = new HashMap<String, String>();
              int countResultGetITResourceInstanceParameters = resItRes .getRowCount();
              for(int i = 0; i < countResultGetITResourceInstanceParameters; i++) {
                   resultGetITResourceInstanceParameters.goToRow(i);
                   hashMap.put(
                             resItRes .getStringValue(ZAPConstants.IT_RESOURCES_TYPE_PARAMETER_NAME),
                             resItRes .getStringValue(ZAPConstants.IT_RESOURCES_TYPE_PARAMETER_VALUE)
              return hashMap;

  • How to reduce Parse time in dynamic SQL

    I'm using for a part of my code dynamic SQL with DBMS_SQL Package, this dynamic SQL code is located in a loop with say 1000 repeatations, if we trace the code we see that this sql statement is parsed 1000 times and this causes
    a serios performance issue. If i convert this part of code into static PLSQL code , the statement is parsed only one time as expected. i would like
    to know how i can resolve this problem in the dynamic SQL code.
    Why in case of static SQL, despite it is inside the loop, it is parsed
    only one time by ORACLE and in case of dynamic SQL as many as the upper limit of counter.
    Why the ORACLE has different behaviour to parse them? Is there any way or trick
    to force ORACLE to parse it only one time like static SQL?

    despite the open cursor is also inside the loop but oracle parse it only one time.That is because PL/SQL is caching your cursor and resuing it. With DBMS_SQL you are opening a new cursor area in the loop for each iteration (DBMS_SQL.OPEN_CURSOR).
    what you need to do is open/parse once and bind the value each time through the loop:
    DECLARE
        expr      VARCHAR2(1000);
        check_cur PLS_INTEGER;
        nDummy    PLS_INTEGER;
        nFetched  PLS_INTEGER;
    BEGIN
        -- Open Cursor
        check_cur := dbms_sql.open_cursor;
        expr      := 'select 1 from dual where ' || ':bindvar1 ' || '=' ||
                     ' ''bindvar1'' ';
        -- Parse Cursor
        dbms_sql.parse(check_cur,
                       expr,
                       1);
        FOR counter IN 1 .. 1000
        LOOP
            -- Define Column
            DBMS_SQL.define_column(check_cur,
                                   1,
                                   1);
            -- Do Binding
            dbms_sql.bind_variable(check_cur,
                                   ':bindvar1',
                                   'bindname1');
            -- Execute Cursor
            nDummy := DBMS_SQL.EXECUTE(check_cur);
            -- Fetch Rows
            nFetched := DBMS_SQL.fetch_rows(check_cur);
        END LOOP;
        -- Close Cursor
        dbms_sql.close_cursor(check_cur);
    END;
    call     count       cpu    elapsed       disk      query    current        rows
    Parse        1      0.21       0.23          0          0          0           0
    Execute   1000      0.11       0.10          0          0          0           0
    Fetch     1000      0.03       0.01          0          0          0           0
    total     2001      0.35       0.35          0          0          0           0

Maybe you are looking for