Translation of ORACLE hints to DB2 hints

Hi,
how can I translate the ORACLE hints to equivalent DB2 hints in the following SELECT statement:
====================================================================
    SELECT qmihqmnum qmihwarpl qmihwapos afihaufnr
      FROM qmih AS qmih
      INNER JOIN objk AS objk
        ON objkihnum = qmihqmnum
      INNER JOIN afih AS afih
        ON afihobknr = objkobknr
      INNER JOIN afko AS afko
        ON afkoaufnr = afihaufnr
      INNER JOIN afvc AS afvc
        ON afvcaufpl = afkoaufpl
        AND afvcaplzl = objkobzae
      INTO CORRESPONDING FIELDS OF TABLE lt_iwar
      WHERE afih~iphas = '2'
        AND afvc~phflg <> 'X'
        AND afko~gstrp <= lf_datum_eckstart
        AND qmih~warpl IN lr_warpln
        AND qmih~wapos IN lr_wapos
    %_HINTS
    ORACLE 'LEADING(T_00)'
    ORACLE 'USE_NL(T_00 T_01 T_02 T_03 T_04)'
    ORACLE 'INDEX(T_00 "QMIH~Z02")'
    ORACLE 'INDEX(T_01 "OBJK~M")'
    ORACLE 'INDEX(T_02 "AFIH~O")'
    ORACLE 'INDEX(T_03 "AFKO~0")'
    ORACLE 'INDEX(T_04 "AFVC~0")'.
====================================================================
Thanks a lot
Alex

Hello Hermann,
first of all thanks a lot for the quick reply.
In my example I'm referring to DB6.
I tested this statement without any hints resulting in a 4-5 times longer response time compared to the Oracle based system.
My biggest problem is, that the system uses index "C" to access table AFIH instead of using index "O" to join via field obknr.
Index "C" on table AFIH is defined as
-) MANDT
-) IPHAS
-) EQUNR
Index "O" is defined as
-) OBKNR
-) MANDT
Here's the EXPLAIN from ST05:
==========================================================================
   0 SELECT STATEMENT ( Estimated Costs =  1,962E+05 [timerons] ) num_rows tot_cost i/o_cost
          1 RETURN  6.3457E-02  1.9623E05  2.6207E04
              2 NLJOIN  6.3457E-02  1.9623E05  2.6207E04
                  3 [O] NLJOIN  3.9594E01  1.9563E05  2.6128E+04
                      4 [O] HSJOIN  1.5837E03  1.5969E05  2.1377E+04
                          5 [O] FETCH AFIH  4.8355E05  2.6256E04  3.4579E+03
                              6 IXSCAN AFIH~C #key columns:  2  4.8355E05  5.3460E02  8.3984E+01
                          7 <i> NLJOIN  5.9836E03  1.3342E05  1.7919E+04
                              8 [O] FETCH QMIH  5.7811E03  2.2441E03  5.7555E+02
                                  9 RIDSCN  5.7811E03  7.2107E01  8.0000E+00
                                     10 SORT  1.4452E03  1.8027E01  2.0000E+00
                                         11 IXSCAN QMIH~Z02 #key columns:  2  1.4452E03  1.7650E01  2.0000E+00
                                     12 SORT  1.4452E03  1.8027E01  2.0000E+00
                                         13 IXSCAN QMIH~Z02 #key columns:  2  1.4452E03  1.7650E01  2.0000E+00
                                     14 SORT  1.4452E03  1.8027E01  2.0000E+00
                                         15 IXSCAN QMIH~Z02 #key columns:  2  1.4452E03  1.7650E01  2.0000E+00
                                     16 SORT  1.4452E03  1.8027E01  2.0000E+00
                                         17 IXSCAN QMIH~Z02 #key columns:  2  1.4452E03  1.7650E01  2.0000E+00
                             18 <i> FETCH OBJK  1.0350E00  2.2700E01  3.0000E+00
                                 19 IXSCAN OBJK~M #key columns:  2  1.0350E00  1.5137E01  2.0000E+00
                     20 <i> FETCH AFKO  2.5000E-02  2.2700E01  3.0000E00
                         21 IXSCAN AFKO~0 #key columns:  2  1.0000E00  1.5136E01  2.0000E+00
                 22 <i> FETCH AFVC  1.6026E-03  1.5163E01  2.0032E00
                     23 IXSCAN AFVC~0 #key columns:  2  3.2053E-03  1.5139E01  2.0000E00
==========================================================================
So my question would be how to make the system use index "O" on table AFIH instead of using index "C".
Of course I studied note 868888. But still I don't know how to formulate hints for joins over more than two tables.
Maybe you can give me a how to do that.
Thanks a lot
Alex

Similar Messages

  • Using Oracle Hints in Selects......

    Hello,
    Are there any after effects/side effects by using Oracle Hints in a SQL select ??? (hints such as Cache, NOCache, all_rows)
    Can anyone let me know whether there are any good documentation or site on Oracel SQL hints..
    thanks
    Kanchi

    Hi!
    There is an exception, that I think is a bug in Oracle, but I4m not sure. If you use the PARALLEL HINT in a select that will be use in a Cursor, in order to insert the results in other table, and the results come in groups built following a group by sentence, there are possibilities that two childs (a child is a parallel process) take portions of this whole group, and built each one one group.
    If the new table use certain number of columns as a primary key, this may cause an duplicated primary key trigger.
    I4m going to write and document this case, in order to show it to oracle support.
    I hope this help. Bye.
    <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica">quote:</font><HR>Originally posted by kanchana Hettiarachchi ([email protected]):
    Hello,
    Are there any after effects/side effects by using Oracle Hints in a SQL select ??? (hints such as Cache, NOCache, all_rows)
    Can anyone let me know whether there are any good documentation or site on Oracel SQL hints..
    thanks
    Kanchi<HR></BLOCKQUOTE>
    null

  • How to insert ORACLE HINT into select statement....

    Hi team,
    Can you please suggest me how to add an Oracle hint to point the Program to BSAD~1.
    Index BSAD1 has all three fields MANDT, BUKRS, AUGDT which are there in the where clause. But as per the execution plan index BSAD0 is being used which is the primary one.
    Also the stats for this table are are current.
    Thanks in Advance.
    Puneet.

    Hi punnet, look at this example:
      SELECT MAX( kkop~augbd )
      INTO it_gen_docs-augbd
      FROM ( fkkvkp AS vkp INNER JOIN dfkkop AS kkop
         ON vkpvkont = kkopvkont ) INNER JOIN dfkkko AS kkko
         ON kkopaugbl = kkkoopbel
      WHERE vkp~exvko = ti_cuentas-exvko
            AND kkop~bukrs = p_bukrs
            AND kkop~blart IN r_blart
            AND kkop~augst = '9'
            AND kkko~blart IN r_blartd
    %_HINTS ORACLE 'INDEX("DFKKOP" "DFKKOP~Z07")'.
    DFKKOP is the table name and DFKKOP~Z07 is the index.
    I hope this helps you.

  • Regarding ORACLE HINTS and PARLLELISM

    Hi,
    Basically i am in ETL tester..Most of clients are asking about experience in ORACLE HINTS and PARALLELISM...Do any one please give basic idea what are those..why are those useful....and if you have any good site with examples with easy understanding...please send it...

    Is there any link which is easy to understand...when i see above links i assume i need to know some thing before learning these things....is there any thing i need to learn before learning oracle hints directly

  • TopLink 3.6.3 and Oracle hints.

    Hi.
    I'm wondering if is it possible to alter a TopLink expression build with the ExpressionBuilder API in order to insert an Oracle hint on it (eg: /*+RULE*/) I have done it in some of my "static" sentences as they are pure SQL but I can't find a way to do it in a dynamic query.
    Sorry if this is a common issue and it has already been answered but I've searched the forums with no luck.
    Thanks in advance.
    Ignacio.

    This pointer (though old) was quite useful. Thanks to Doug.
    We have an issue though. We are using Toplink Cursored Stream for retrieving the results from our queries.
    query.useCursoredStream();
    When we set a hint (query.setHintString("/*+ FIRST_ROWS */");) we see a vast improvement in the query that is fired by Toplink (wherein the hint is included):
    CursoredStream cursor = (CursoredStream) serverSession.executeQuery(query, parameters);
    And the problem we have is that when we need to retrieve the size of the cursor (size = cursor.size();), it fires a "select count(*) from ...." query where the hint is not applied and the resulting performance is bad.
    Can someone suggest what we else we need to do to suggest hints to the "select count(*)" query that Toplink fires for getting cursor stream size. Using a scrollable cursor is not an option since it is not efficient enough for our requirements.
    Thanks in advance
    Message was edited by:
    potu_s

  • Oracle Hint support for ojdbc14.jar

    hi I am just wondering if ojdbc14.jar oracle driver really supports oracle hint like /*+ PUSH_SUBQ */.
    If I execute a query from Oracle SQL Developer I can really see the performance improvement in the query execution, but if I try to run the query from my java application using this oracle thin driver, I am not getting the performance improvement.
    Can somebody help me if I need something else to enable support for Oracle hints in this driver?

    user8711425 wrote:
    hi I am just wondering And I'm just wondering if you really know what you are doing?
    You claim to have tuned an SQL statement by use of the PUSH_SUBQ hint. How did you manage that, did you qualitatively say that performance improved, aand in which way?
    If you had, I'd say you'd also be qualified to trace you session to see for yourself whether the hint was included or not, and whether it was actually applied or ignored.
    Apart from that, he SQL is after all executed by the server. The driver just hands over the SQL, and I would be very surprised if hints were removed from the client side SQL.
    But dunno, trace it if you are in doubt. And be very sure of what you are doing when using hints.
    Regards
    Peter

  • Oracle hints

    Hi,
    I want to know if it's possible to avoid using an index in a query.
    For example I defined 3 column indexes on a table named "SUMMARY_VECTOR" with the following names respectively:
    1-SUMMARY_VECTOR_ENTITY_NAME_IDX
    2-SUMMARY_VECTOR_IDX_CASE_NAME
    3-SUMMARY_VECTOR_VECTOR_ID_IDX
    I want to know if I can avoid using one of the three indexes in my query by using oracle hints.
    If it's possible, please if can u post an example
    Thanks

    but I have other procedures which are affected by this new created index.Interesting, why didn't you try to understand this fact ?
    HINT usage shouldn't be taken lightly. You are saying to Oracle optimizer you know better the route to be taken regardless what is happening to your table and regardless your stats.
    HINT is a fixed advise, and doesn't change with the table data and statistics.
    Maybe today it is bad to use the index, but tomorrow, after thousands inserted rows in your table, that would be better, unfortunately, your hint will ignore it.
    Before going into HINT usage, you should understand why this index sounds bad for the other query, and if it's really bad, you should understand why Oracle wants to use it.
    Nicolas.

  • Problem with Oracle hint

    Is it possible to use oracle hint along with qblock query. I have /*FIRST_ROWS/ as hint in my query. Also used qblock to get the total no. of records. Getting "internal error code, arguments..."
    Any suggestions would be very useful...
    Thanks in Advance

    Verifying the SQL syntax would of course be the first step.

  • Can I Specify an Oracle Hint for a Query

    We are BW 3.1 Oracle 9.2.  We have a few InfoCube queries that would perform better if a full table scan on the fact table was done rather than using the system generated Star Transformation hint.
    When use RSRT or other entry points to see the SQL and the Explain plan, I have the option of putting in an Oracle hint and generating another Explain Plan.
    Is there any way to save the query with a different Oracle hint than the Star Transformation hint?

    Klaus -
    Thanks for responding.
    It is only a handful of queries that this is an issue with.  Overall, we are certainly better off using the star transformation. 
    Do you know the reasoning behind letting you specify a hint when running a query through RSRV if you can never actually specify those hints for actual production execution? Is the ability to add a hint anything that we might see in the future?
    In looking into this a little more, I looked at an explain plan for a query on one of our transactional InfoCubes.  We are Oracle 9.2, and transactional Infocubes have B-tree indices rather than bitmap on the F fact table.  Presumably to better support the input of transactions.  I see in the explain plan that with the star transformation, the btree indices are converted to  bitmap, then a bitmap merge, then the result of that is converted back to a btree index to read the F fact table.  Without the star transformation, the query cost is half, so the ability to suppress the star transformation on F fact queries on transactional cubes would also be nice.
    At another job, I used to use Brio to query a data warehouse and although Brio didn't have facility to specify a hint, you could define a calculated field in the query and actually enter the hint text as the calculation and as long as that field was the first to follow the Select stmt, it was recognized as an Oracle hint.  Maybe there could be some way to sneak a hint into the query.  It's not something you would want every query developer doing, but as long as someone knew when it was appropriate to override/surpress star transformation, it would be nice to be able to do.
    John

  • Oracle Hint on Table MKPF and MSEG : force index MSEG~M to be utilize

    Hi Experts, I'm quite new to ABAP performance tuning, I try to put details as much as I can in my question below, just to have a quick overview of my problem below, I want to use/force in my SQL below to force the utilization of index MSEG~M.
    added an Oracle Hint forcing index MSEG~M
      SELECT MATNR BWART MENGE
      FROM   MKPF
      INNER JOIN MSEG
         ON MKPFMANDT EQ MSEGMANDT
        AND MKPFMBLNR EQ MSEGMBLNR
        AND MKPFMJAHR EQ MSEGMJAHR
       INTO CORRESPONDING FIELDS OF TABLE T_MSEG2
      WHERE MKPF~BUDAT IN S_GSTRP    "(index bud should be used)
       AND  MSEG~MJAHR IN R_DOCYEAR
       AND  BWART IN ('931', '932',
                      '901', '902',
                      '701', '702',
                      '703', '704',
                      '707', '708',
                      '711', '712',
                      '713', '714',
                      '715', '716',
                      '717', '718',
                      '551', '552',
                      '553', '554',
                      '555', '556') "ZZCHK: Constants Not Applicable
             AND  MATNR IN R_MATNR3
             AND  MATNR IN R_COMPNTS
             AND  WERKS EQ P_WERKS
      %_hints oracle u2018INDEX(u201CMKPFu201D u201CMSEG~Mu201D)u2019.
    Note: I'm assuming that you'll take not some comments on further enhancement:
    - " INTO CORRESPONDING FIELDS "
    - use of field symbols
    - I didn't modify it yet since my focus if for MSEG~M
    - cannot make material number as mandatory field
    Objective: Force to use index MSEG~M
    Problem:
    After adding the Oracle Hint, I did the analysis in ST05 and it seems like index M is still not being forcefully
    utilize instead MSEG~0 is being used.
    I replaced the Oracle Hint with:
      %_hints oracle u2018INDEX(u201CT_01u201D u201CMSEG~Mu201D)u2019.
    In ST05, I can get see that index MSEG~M is now being utilize BUT worst thing happened after applying this, the program timed out.
    I already take a look on the following Notes: 129385, 130480, 772497, 162034, 818321 but nothing seems to be helpful in my problem.
    Questions:
    1.  In syntax %_hints oracle u2018INDEX(u201CT_01u201D u201CMSEG~Mu201D)u2019. T_01 stands for MKPF right which is the first table, do you what's the reason for the program time out after adding this Oracle Hint?  Is this the proper syntax?
    2.  How can I force in my code to use index MSEG~M without any program timeout?
    For the whole source code of my question above, please see the link:
    http://rapidshare.com/files/211740852/ZDXX0028.txt.html

    Hi Thomas, thanks with the prompt reply (even if it's Saturday )
    Yes, MKPF~BUD is being used.
    The budat selection is narrowed to 28 days though users can input any date range, a warning message will just be displayed if budat selection exceeded.
    Yes, optimizer usually chooses the right index; I'm not in as the same experience as you are though, but I find it interesting that after I added the Oracle hints (several combination) the performance of the program was optimize up to 40% to 50%.
    I uploaded a detailed SQL trace and the ABAP change done in my program, if you'll notice in the summary of the changes, after adding some hints, the duration of the program was improved..
    (SQL Trace Summary of my program) this worth taking a look
    http://rapidshare.com/files/211870091/ZD28_SQL_Trace.zip.html
    I made a custom index in MSEG, but unfortunately I doubt that it will be approve by our performance capacity team.  But I somehow have a hunch that this will further optimize the program.
    MSEG~Z03
    MANDT     Client
    WERKS     Plant
    BWART     Movement Type (Inventory Management)
    LGORT     Storage Location
    What do you think Thomas and SAP experts?
    **Sorry for pasting the whole ST05 result
         SELECT STATEMENT          ( Estimated Costs = 131.250 , Estimated #Rows = 450 )
                        6          FILTER
                        Filter Predicates
                        5          NESTED LOOPS
                        ( Estim. Costs = 131.249 , Estim. #Rows = 450 )
              Estim. CPU-Costs = 1.885.249.948 Estim. IO-Costs = 129.700
                        2          TABLE ACCESS BY INDEX ROWID          MKPF
                        ( Estim. Costs = 14.442 , Estim. #Rows = 288.570 )
                   Estim. CPU-Costs = 206.401.140 Estim. IO-Costs = 14.272
                   1          INDEX RANGE SCAN          MKPF~BUD
                        ( Estim. Costs = 655 , Estim. #Rows = 519.426 )
              Search Columns: 2
              Estim. CPU-Costs = 30.640.783 Estim. IO-Costs = 630
              Access Predicates          Filter Predicates
                        4          TABLE ACCESS BY INDEX ROWID          MSEG
                        Estim. CPU-Costs = 5.818 Estim. IO-Costs = 0
              Filter Predicates
              3          INDEX RANGE SCAN          MSEG~0
                   Search Columns: 3     
         Estim. CPU-Costs = 1.564 Estim. IO-Costs = 0
         Access Predicates          Filter Predicates

  • Configuration issue with DRDA Oracle 10g to DB2 UDB v8

    Oracle 10.2.0.4 linux RH 64 bit - DB2 UDB v8.2 linux 32 bit. I'm attempting to install transparent gateway to connect from my oracle instance to the db2 instance. I was successful until the step requiring the package rebind and this is the error I get:
    SQL> exec GTW$_BIND_PKG@MYDB2SERVER;
    BEGIN GTW$_BIND_PKG@MYDB2SERVER; END;
    ORA-04052: error occurred when looking up remote object
    DB2USER.GTW$[email protected]
    ORA-00604: error occurred at recursive SQL level 1
    ORA-28527: Heterogeneous Services datatype mapping error
    TG4DRDA v10.2.0.1.0 grc=0, drc=-332 (865B,0001), errp=GDJREACS
    errmc=1208,819
    ORA-02063: preceding 3 lines from MYDB2SERVERMy TNSNAME entry:
    MYDB2SERVER =
      (DESCRIPTION =
            (ADDRESS=
              (PROTOCOL=TCP)
              (PORT=1521)
              (HOST=172.xx.xx.xx))
            (CONNECT_DATA=(SID=MYDB2SERVER)
            (HS=)
    LISTENER entry:
       (SID_DESC=
            (SID_NAME=MYDB2SERVER)
            (ORACLE_HOME=/home/oracle/oraHomes/gateway)
            (PROGRAM=g4drsrv)
       )DBlink:
    SQL> create public database link MYDB2SERVER
      2  connect to db2user identified by mypass
      3  using 'MYDB2SERVER';initMYDB2SERVER.ora (lines I changed):
    DRDA_CONNECT_PARM=172.xx.xx.xx:50000
    DRDA_REMOTE_DB_NAME=db2
    DRDA_RECOVERY_PASSWORD=mypassI'm sure it's just a simple config issue, but I've been racking my rain for hours trying different things and cannot figure it out.
    Question - DRDA_REMOTE_DB_NAME - is the the O/S user? or the database instance name? For example, when accessing the DB2 instance, I login to the O/S as db2user but issue 'db2 connect to db2' when connecting to the instance - which value is DRDA_REMOTE_DB_NAME looking for?
    Any help is appreciated - thanks

    Hi,
    You are right, DRDA_REMOTE_DB_NAME should have the name of the Db2 instance.
    The error you are getting points to the fact that you are an multibyte character set in either Oracle and/or DB2. The gateway can connect, but first have to be able to map the character sets indicated by the error message:
    TG4DRDA v10.2.0.1.0 grc=0, drc=-332 (865B,0001), errp=GDJREACS errmc=1208,819 <<== 1208 and 819 are the CCSIDs
    Add the following entries to the gateway codepage.map file -
    S 367 > US7ASCII
    D 13488 > AL16UTF16
    D 1200 = AL16UTF16
    M 1208 = UTF8
    MBC 1208 = 1208 1200
    The default location of the file is $ORACLE_HOME/tg4drda/admin/codepage.map
    These values map code page 1208 to Oracle's UTF8 character sets so that the gateway can translate UTF8 data into code page 819 (WE8ISO8859P1).
    Regards,
    Ed

  • Unexpected error occurred while translating metadata oracle.security.fed.xm

    Getting Error while importing the SP metadata.
    Caused by: javax.management.RuntimeMBeanException: Unexpected error occurred while translating metadata oracle.security.fed.xml.translator.TranslationException: org.xml.sax.SAXException: Could not locate translation scheme associated with "urn:oasis:names:tc:SAML:2.0:metadata":RequestedAttribute, child of "urn:oasis:names:tc:SAML:2.0:metadata":SPSSODescriptor.: {1}
    Any Idea..Configuring OIF as IDP.
    Thanks
    Saurabh

    Eevn i am facing same isssue.any clue

  • Oracle Hints - Bex Query

    Hi experts,
    can I add a particular hints when I execute at run time a query bex ?
    My main scope is that when I run a bex query, the corresponding query may use an oracle parallel hint in order to increase the performance.
    Do you think that I can do it ?
    Thank'you in advance !

    > can I add a particular hints when I execute at run time a query bex ?
    No, you can't.
    > My main scope is that when I run a bex query, the corresponding query may use an oracle parallel hint in order to increase the performance.
    Usually there's a good reason for BEX queries not to use the parallel query feature.
    That reason is: parallel query turns your multi-user database into a single-user query machine.
    This single sql session will aquire way more resources than a standard query - eventually blocking other activities.
    In order to speed up your BEX query better check the execution plan and figure out what makes the query too slow.
    Open a support message for it if you cannot do this yourself - there are quite some bugs around (even with Oracle 10.2.0.4) that lead to bad quey performance.
    Of course - the first things to check would be to install the current Oracle patchset, patches and setup the parameters correctly. More than 90% of all performance support messages are solved just by that!
    regards,
    Lars

  • Oracle Hint not causing any change to explain plan

    Hi,
    I was facing a problem about ORA-00600 for using Connect by Prior query,
    details of which are at -
    Connect by Prior - ORA-00600: internal error code, arguments: [kkqcbydrv:1
    As is documented by Oracle, workaround for this is to use /*+ NO_UNNEST */ in query.
    I displayed the explain plan for original query and after putting hint in query.
    There is no difference in the explain plans, I am a starter for explain plans and don't know much of it.
    But shouldn't the hint cause some change in explain plan?
    Even the hash values as mentioned in explain plans are same.
    Thanks in advance.
    Av.

    Perhaps it would help if you put the query (with the hint) and the explain plan here.

  • Use of an Oracle Hint for a WebI-Universe BEX based-Query  ?

    Hi,
    can I use an Oracle Optimizer Hint like /*+ PARALLEL(MyFacttable, 8) */
    for a WebI- ./. Universe- ./.  BEX based-Query ?
    Is this possible  ?
    If Yes: How and where to implement this  ?
    Thank You !
    Martin

    Hi,
    BusinessObjects only communictates with the MDX Interface by way of SAP's OLAP BAPI over RFC.
    Everything else, OLAP engine, Data Manager, etc etc Cube abstraction over a Relational schema is handled by the BW application.
    so No, BO can't "inject" any cleverness into BW processing architecture.
    Regards,
    H

Maybe you are looking for

  • Accessing c4 Variables in Javascript

    How do you pass a Captivate 4 variable (User or System) in Javascript when the published .SWF is embedded in another tool like Lectora or Flash? In Captivate, you can set a value into a Lectora variable (VARmyLectoraVariable.set('myvalue');, but I do

  • How can i connect phone line to capsule

    how can i connect phone line to capsule?

  • Problem with logic at-selection screen

    Hi ,     I have this piece of code : I have 3 radiobuttons and corresponding screens and fields like r_matnr s_charge etc on that screen . default radio button is r_build . a) If on this screen is user forgots to give value for s_matnr then error is

  • Norton antivirus interfering with icloud photos

    I have recently installed Norton Internet Security on my WIndows 7 PC. My photos are now not updating on my Photo Stream/iCloud Photos folder. Any ideas? All the other iCloud features that synch with Outlook are working fine.

  • Creating a GoLive "Component" in DreamWeaver

    I'm migrating to DreamWeaver and can't find an equivalent of my GoLive "Component" that lets me keep a global copy of a menu bar that is common to several pages and only needs to be updated once. Surely there is such a feature somewhere?