Optional operations on extended data type

Hello everyone,
I am currently working on a project where I have to read data from either a database or a file and depending on how much information is available different statistics will be computed.
Currently I have two data types MyRecord and ExtendedMyRecord which are both interfaces and provide getter methods to retrieve the data. ExtendedMyRecord extends MyRecord. For both interfaces there is a default implementation.
The first thing the application does is it loads records from the database - whcih in most cases are MyRecord objects. Afterwards statistics are calculated for the whole set of records.
In case all records are of type ExtendedMyRecord additional operations may be performed.
However what got me thinking is that MyRecord currently has three fields and ExtendedMyRecord has 6 fields. In the current architecture I have to create new classes and interfaces in case I ever have to extend the number of fields in the database (or I would have to change one of the interfaces and put the additional fields there and change all code using them).
Does it make more sense to provide a boolean operation isAvailable() which can be used to determine whether a particular field was available for a certain record or is the design I currently use - where I check using instanceof - the better approach?
Any ideas?
Kind Regards,
snowbird

The first thing the application does is it loads
records from the database - whcih in most cases are
MyRecord objects. Afterwards statistics are
calculated for the whole set of records.
In case all records are of type ExtendedMyRecord
additional operations may be performed.That description doesn't sound good to me.
Database operations require three things
1. Functionality to access the database.
2. Data specific to the database (like a connection)
3. Data specific to the application (like a customer name which might be stored in a record in the database.)
Your description sounds like you are mixing 1 and 3 (and perhaps throwing 2 in as well.)
That is always wrong. Because only the database layer should have 1 and 2. 3 is entirely seperate from 1 and 2 and should be kept that way.
Keeping it seperate leads to the following type of structures....
- Customer, has the name, account, etc.
- CustomerCollection, contains a list of Customer.
- CustomerDao, this takes a Customer and stores it, updates it, etc. It also has queries that creates CustomerCollection.
There are variations on the above where there might be more classes for each of the above. But in all cases Customer is never a "record".
In Java Blueprints, the Customer record about would be a Transfer Object (or Data Transfer Object) and CustomerDao would be a Data Access Object.

Similar Messages

  • ATG extending OOTB enumerated data type

    Hi All,
    If i have to add a extra payment group/option to an data-type="enumerated" in ATG repository, should we ,
    1) Use the OOTB table in our extended orderRepository.xml???? Coz ATG recomends to use auxiliary when extending the OOTB properties.
    2)Should we mention all the OOTB options along with my custom option????
    3) Will there be any SQL change for adding a extra option in the enumarated data-type????
    4)Can you please let me know more about  data-type="enumerated" .
    <item-descriptor name="paymentGroup" sub-type-property="type" version-property="version" expert="true" cache-mode="simple" display-name-resource="itemDescriptorPaymentGroup" item-cache-timeout="180000">
    <table name="dcspp_pay_group" type="primary" id-column-name="payment_group_id">
          <attribute name="resourceBundle" value="atg.commerce.OrderRepositoryTemplateResources"/>
         <property name="type" data-type="enumerated" default="paymentGroup" expert="true" category-resource="categoryInfo" display-name-resource="type">
            <attribute name="useCodeForValue" value="false"/>
            <option value="paymentGroup" code="0"/>
            <option value="creditCard" code="1"/>
            <option value="giftCertificate" code="2"/>
            <option value="storeCredit" code="3"/>
             <option value="MyPaymentGroup" code="3"/>
            <option value="invoiceRequest" code="5000"/>
            <attribute name="resourceBundle" value="atg.commerce.OrderRepositoryTemplateResources"/>
            <attribute name="propertySortPriority" value="10"/>
          </property>
    </table>
    Regards

    Hi,
    You can use OOTB tables for this requirement as you are not changing the table definitions.
    No SQL change is required.
    You need to mention all the OOTB options when you say xml-combine as replace. Make sure that you are getting the correct repository xml file after combining by examining the template definition thro dyn admin.
    One more good practice is use reasonably greater value to the code to your custom option (instead of giving the next number) as it would help during migration.
    For Ex, in your example you have given code as 3 for your custom option. If ATG adds one more payment group they would use this code. If you use  something like 100, it avoids the rework during migration.
    Hope this helps.
    Keep posting the updates / questions.
    Thanks,
    Gopinath Ramasamy

  • Performance and data types: which to use?

    Hi All,
    I am wondering what data type to use and the effect of them on memory/speed.
    1. What is the difference (if any) of using sgl, dbl, int etc. Looking at the LabVIEW help there seems to be a range of 8-256 bits of storage according to the data type. Is it basically choose the one with the smallest storage that can fit the data?
    2. I currently have a cluster flowing through subVI's. The cluster contains the start time (or freq), the delta t (or f) and the array of data (about 500-5000 elements). I tried to use the waveform datatype but it couldn't handle a delta t of 2 nanoseconds (500 MHz signal). Am i ok using the cluster, or should i seperate the components and pass them along? What data type should i use for each of the components?
    Thanks

    There are three main issue to consider.
    Range and accuracy. If you need a very high level of accuracy, then you will need to use the extended data type or even create your own, although that's unlikely.
    Memory. Yes, SGL takes less than DBL, but unless you're dealing with really huge amounts of data this won't matter.
    Coercion. Most built in functions work on DBL. If you wire a SGL into them, they will coerce it, possibly creating a copy of the data and increasing your memory usage.
    To sum it up, most of the times it would be best to use the default DBL. It's highly unlikely you'll need one of the others.
    As for your second question, it sounds to me like the data is a single organism, so I would say you should leave it in the cluster, but that really depends on whether the functions need it or not and whether you're constantly bundling and unbundling the cluster. Note that 5000 elements is far from being a large array and you shouldn't have any problems handling it.
    As for the timing unit, if you really only have 5000 elements (that's 10 microseconds of data?) then you should not have a problem with using a U32 with a nanosecond as the base unit. That should give you the ability to measure more than 4 seconds.
    Try to take over the world!

  • Prob creating a new structured data type

    I am trying to create a new structured data type to see it in data type diagram. When i try to right click on structured data type in DATA TYPES, i cant see any option like new structured data type etc. But this is working for distinct as well collection data types but not for structured.
    By default, we are getting SDO_geometry structured data type for every model. We can change its name but cant create a new structured data type from there also.
    What should i do to create a structured data type in data modeler.

    The right click on Structured Types does not open a menu on my Data Modeler either.
    To create a Structured Type, click View on the main menu for the Data Modeler. Then click View Details -> Datatype.
    In the Browser (called Navigator in other Oracle products), right click Datatype Model -> Show. This will show the DataTypes diagrammer.
    Click on the New Structured Type button on the menu bar, then click anywhere on the DataTypes diagrammer, the Structured Type Properties window opens.
    Enter all the details in the Structured Type Properties window to create your data type. Click Ok when finished. Your object type will be represented by a "blue" box on the diagram.
    Jim Keese
    Edited by: user9367840 on Feb 10, 2012 8:30 AM

  • Use idoc structure as Data Type....

    Hi all,
    this is my SYNC scenario: SOAP -> PI -> PROXY and the response in the same way.
    in the proxy I want to use the same Structure of the ORDERS05 iDoc...
    so..
    1: I've Imported the iDoc
    2: Created the external definition
    and then...
    first, I tried to use the IDOC in the "Message Interface" but when activate it, a message appear saying " references an IDoc message and a non-IDoc message"...
    well as it doesn't works...
    I tried with the external definition in the Message Interface... I can Activate it, but when go to ECC and try to regenerate the Proxy this is the error message "
    Interface uses external and internal message definitions"...
    so... my last chance was create a data type with the same structure... for it, imported the XSD but errors and more errors appears... so I think than my best way is not a data type... but I can't find a solution.
    someone has any idea??
    Thanks.

    > this is my SYNC scenario: SOAP -> PI -> PROXY and the response in the same way.
    >
    > in the proxy I want to use the same Structure of the ORDERS05 iDoc...
    > so..
    > 1: I've Imported the iDoc
    > 2: Created the external definition
    I hope you are just only using the structure of IDOC and not the IDOC itself. Because IDOC doesn't support SYNC scenario.
    > first, I tried to use the IDOC in the "Message Interface" but when activate it, a message appear saying " references an IDoc message and a non-IDoc message"...
    As I said you cannot use IDOC in Sync scenario, So this was because of that as per my understanding.
    > well as it doesn't works...
    >
    > I tried with the external definition in the Message Interface... I can Activate it, but when go to ECC and try to regenerate the Proxy this is the error message "
    >  Interface uses external and internal message definitions"...
    As per my experience, You cannot create Proxy with External Definition. I guess in PI7.1 it is possible.
    > so... my last chance was create a data type with the same structure... for it, imported the XSD but errors and more errors appears... so I think than my best way is not a data type... but I can't find a solution.
    >
    Yes you don't have any other option except creating the Data Type. So check what's going wrong when you are creating the it.
    Regards,
    Sarvesh

  • XML operation resulted an XML data type exceeding 2GB in size. Operation aborted.

    I have table with one million rows, when i am using xml path ('Root'), it giving me an error 
    "XML operation resulted an XML data type exceeding 2GB in size. Operation aborted."
    This is a limitation of sqlserver. I have to xml path because i have to create nodes and attributes. In more complex case i will be joining multiple tables to get id and other attributes so combining multiple xmls in not an option here.
    any workaround....thanks in advance

    Here an example of your query that retrieve record in batch of 2 records. In real code, you should save the last id retrieved and call the query in a loop.
    DECLARE @BATCHSIZE AS integer
    SET @BATCHSIZE = 2
    DECLARE @LASTID As Integer
    SET @LASTID = 0
    select top(@BATCHSIZE) id as "@id"
    ,name as "@name"
    select id as "@id"
    ,name as "@name"
    select *
    from @products p
    where p.customer_id = cs.id
    group by id,customer_id,name
    for xml path ('product'),Root('products'),type
    from @customer cs
    where cs.client_id = c.id
    group by id,client_id,name
    for xml path ('customer'),Root('customers'),type
    from @client c
    where c.id > @LASTID
    order by c.id
    for xml path ('clients'),Root ('Main')

  • [Microsoft][SQL Server Native Client 11.0][SQL Server]The text, ntext, and image data types cannot be compared or sorted, except when using IS NULL or LIKE operator.  'Items' (OITM) (OITM)

    Dear Experts,
    i am getting the below error when i was giving * (Star) to view all the items in DB
    [Microsoft][SQL Server Native Client 11.0][SQL Server]The text, ntext, and image data types cannot be compared or sorted, except when using IS NULL or LIKE operator.  'Items' (OITM) (OITM)
    As i was searching individually it is working fine
    can any one help me how to find this..
    Regards,
    Meghanath.S

    Dear Nithi Anandham,
    i am not having any query while finding all the items in item master data i am giving find mode and in item code i was trying to type *(Star) and enter while typing enter the above issue i was facing..
    Regards,
    Meghanath

  • Error in SQL Query The text, ntext, and image data types cannot be compared or sorted, except when using IS NULL or LIKE operator. for the query

    hi Experts,
    while running SQL Query i am getting an error as
    The text, ntext, and image data types cannot be compared or sorted, except when using IS NULL or LIKE operator. for the query
    select  T1. Dscription,T1.docEntry,T1.Quantity,T1.Price ,
    T2.LineText
    from OQUT T0  INNER JOIN QUT1 T1 ON T0.DocEntry = T1.DocEntry INNER JOIN
    QUT10 T2 ON T1.DocEntry = T2.DocEntry where T1.DocEntry='590'
    group by  T1. Dscription,T1.docEntry,T1.Quantity,T1.Price
    ,T2.LineText
    how to resolve the issue

    Dear Meghanath,
    Please use the following query, Hope your purpose will serve.
    select  T1. Dscription,T1.docEntry,T1.Quantity,T1.Price ,
    CAST(T2.LineText as nvarchar (MAX))[LineText]
    from OQUT T0  INNER JOIN QUT1 T1 ON T0.DocEntry = T1.DocEntry LEFT OUTER JOIN
    QUT10 T2 ON T1.DocEntry = T2.DocEntry --where T1.DocEntry='590'
    group by  T1. Dscription,T1.docEntry,T1.Quantity,T1.Price
    ,CAST(T2.LineText as nvarchar (MAX))
    Regards,
    Amit

  • Problem using SELECT-OPTIONS in an InfoSet with a field of data type UNIT.

    I have created a simple InfoSet that links MARA with MARM. In the 'Selections' section of the InfoSet I have a variable named 'ZMEINH' defined as
    Description: UOM
    Selection Text: UOM
    Format FOR: MARM-MEINH
               EXTRAS: DEFAULT 'PAC' OPTION EQ SIGN I.
    When I ran a query to allow selections on the MEINH field, instead of 'PAC' being the default, there was "***" showing in the UOM selection and if I attempted to execute the query it gave me a message that "Unit *** is not created in languague EN'.  If I overide the "***" and enter 'PAC', I get the list of records that I expect.
    I assume this is because MEINH has a data type of "UNIT".
    How can I do a conversion so I can define a default value 'PAC' for MARM-MEINH in the infoSet that will carry through to any queries I created.
    Thank you very much for any help.
    Richard Salisbury

    Thank you both for you help!
    In our T006 there actually is a PAC and not a PAK. The T006A had as DE-PAK though.
    I had this same type of language problem when trying to match an "order type". German is the "base" language in our system so maybe that means that raw data is stored with the German constant?
    Anyway, I changed it to PAK and it works. When under a time schedule, that is what counts.
    Thank you again for the quick response!
    Richard Salisbury

  • LIKE Operator to ignore the time part of DATE type?

    Hi,
    is it allowed to use the LIKE operator on DATE Type to ignore the time-part in the DATE?
    Nothing found in the manual, but seems to me that it works.
    1. SELECT * FROM test_date WHERE tst_date LIKE to_date('01.01.2003 13:33:33','DD.MM.YYYY HH24:MI:SS') ;
    2. SELECT * FROM test_date WHERE tst_date LIKE to_date('01.01.2003','DD.MM.YYYY') ;
    3. SELECT * FROM test_date WHERE tst_date LIKE trunc(to_date('01.01.2003 00:00:00','DD.MM.YYYY HH24:MI:SS'));
    4. SELECT * FROM test_date WHERE to_date('01.01.2003 13:33:33','DD.MM.YYYY HH24:MI:SS') LIKE tst_date;
    5. SELECT * FROM test_date WHERE tst_date BETWEEN to_date('01.01.2003 00:00:00','DD.MM.YYYY HH24:MI:SS') AND to_date('01.01.2003 23:23:59','DD.MM.YYYY HH24:MI:SS');
    6. SELECT * FROM test_date WHERE tst_date >= TO_DATE('01.01.2003 00:00:00','DD.MM.YYYY HH24:MI:SS') AND tst_date < TO_DATE('01.01.2003')+1;
    7. SELECT * FROM test_date WHERE TRUNC(tst_date) = TRUNC(TO_DATE('01.01.2003 00:00:00','DD.MM.YYYY HH24:MI:SS'));
    Result for 1-7 is the same.
    What is the preferred Solution?
    Solution 5 is bad, because index on TST_DATE column could not be used.
    Solution 1 - 3 is the same using the LIKE operator.
    Any comments?
    Thanks, Markus
    GEMS IT

    Oh, sorry, LIKE-Operator solutions do also not use an Index :-(. Only 5. and 6.
    Sample-Script:
    CREATE TABLE TEST_DATE
    TST_DATE DATE
    CREATE INDEX MEDVIEW.TEST_DATE_IDX
    ON MEDVIEW.TEST_DATE(TST_DATE);
    INSERT INTO TEST_DATE ( TST_DATE ) VALUES (
    TO_Date( '01/01/2003 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM'));
    INSERT INTO TEST_DATE ( TST_DATE ) VALUES (
    TO_Date( '01/01/2003 12:45:13 PM', 'MM/DD/YYYY HH:MI:SS AM'));
    INSERT INTO TEST_DATE ( TST_DATE ) VALUES (
    TO_Date( '01/01/2003 08:11:55 AM', 'MM/DD/YYYY HH:MI:SS AM'));
    INSERT INTO TEST_DATE ( TST_DATE ) VALUES (
    TO_Date( '01/01/2003 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM'));
    INSERT INTO TEST_DATE ( TST_DATE ) VALUES (
    TO_Date( '01/01/2003 09:33:16 AM', 'MM/DD/YYYY HH:MI:SS AM'));
    INSERT INTO TEST_DATE ( TST_DATE ) VALUES (
    TO_Date( '01/02/2003 07:45:00 AM', 'MM/DD/YYYY HH:MI:SS AM'));
    INSERT INTO TEST_DATE ( TST_DATE ) VALUES (
    TO_Date( '01/02/2003 07:33:00 PM', 'MM/DD/YYYY HH:MI:SS AM'));
    COMMIT;

  • Optional Prompt for Date type parameter in Crystal Report.

    Hi Every One,
    I have a date type parameter in crystal report.When I am convert it to optional prompt it is showing following message.
    But the Type field is gray out when I was selecting list of values Dynamic.
    Please suggest.
    Thanks and Regards
    DEV

    Hi,
    Please check SAP note:
    1710595 - CR_Defining "Optional Prompt" as True for SAP Crystal
    Reports Does Not Work
    Thanks & Regards,
    Nagarajan

  • I need help in "HOW TO EXTEND THE DATA TYPE SYSTEM"......

    Hi All,
    I need to add new data type like SDO_GEOMETRY in spatial Oracle.
    I don't mean the User-Defined Datatype but new datatype embed in the database.
    I read the Data Cartridge Developer's Guide but it has info how to use more efficiently UDT through indexes.
    Anybody used the “Type System” under Databases and Extensibility Services?
    It might be written in C++ or Java but I do not know how.
    Any hints and help will be appreciated.
    Thanks,

    > In Figure 1-1 Oracle Services, there is a "Type System" as Oracle Services.
    The "Type System" is merely a compartmentalising the data type handling and implementation code/modules in Oracle.
    This covers all types. Oracle native types, user defined types (UDTs), etc.
    Saying that you want to create a new type in the "Type System" is basically saying you want to use the CREATE TYPE SQL command in Oracle.
    > So, I want new_type1 and new_type2 behave like other built-in types, just the way
    SDO_GEOMETRY works in Oracle Spatial Cartridge.
    Not familiar with the SDO_GEOMETRY. Why do you mention this type specifically? What do you want to do similar?
    > I have already done it with user-defined types. Now I need to do this way so that I can
    compare and contrast in terms of speed, space...etc for part of my research.
    Hmm.. I'm not sure what you are trying to compare ito of a UDT and Data Cartridge extensions. It is not one or the other. What research is this if I may ask?
    Simplistically you extend the Type System with a new UDT/ADT. And there you have a new type data can be used in the SQL Engine and the PL/SQL engine. The OCI (Oracle Call Interface) supports such types via the OCI object API calls - which means this new type can also be used from Oracle clients written in Delphi, C++, Java, etc.
    That new type can be a complex type. This type may need specific management code (memory management, context management, internationalisation, etc). To support this you can extend the UDT/ADT further by developing Cartridge Basic Service interfaces for the type - designing and writing management code to, for example, support specific internationalisation requirements when dealing with multibyte character sets.
    You can also extend the UDT/ADT to be custom managed ito indexing, determining query optimisation, computing costs of custom methods/functions/operators on this custom data type. These extensions are done by developing Data Cartridge interfaces for the type.
    Thus I cannot see what you are trying to compare. It is not one layer/interface versus another. These layers exist for all Oracle types (in the Type System). Oracle not only allows you to add to the top layer by adding/defining a new data type. It also allows you to customise (if needed) the layers below it.

  • Assigning Data-Type Select-Option from Report to Method

    Hi Specialists,
    How can I solve the following task smart?  It’s a quiet simple task. In my Report I’ve some Select-Option-Data-Types and I want to assign this data-type an Abpab-Object-Method. Is it possible to do this in a smart fashion. I’ve fight with the Abap-Syntax und at the end I’ve found a tricky way of assigning the Select-Option parameter to the Abap-Object-Method.
    If somebody have a smart idea for this problem, pleas let me know.
    Thankx.
    Hallo Spezialisten,
    ich hätte da eine Frage wie man folgende Aufgabe elegant lösen kann.
    Es ist ganz einfach, ich möchte von einen Report einen Select-Option-Datentyp an eine Abapobject Methode übergeben. Ich hatte sehr lange gekämpft bis ich ein umständlichen weg gefunden habe die parameter vom reprot an die mehtode zu übergen.
    Falls jemand da eine gut Idee hätte wäre mir das nächste mach sehr geholfen.
    Danke

    Hi 
    Here is the Program with  Selection screen and   the Class & Methods.
    REPORT demo_abap_objects_methods NO STANDARD PAGE HEADING.
    * Global Selection Screens
    SELECTION-SCREEN BEGIN OF: SCREEN 100 TITLE tit1, LINE.
    PARAMETERS members TYPE i DEFAULT 10.
    SELECTION-SCREEN END OF: LINE, SCREEN 100.
    SELECTION-SCREEN BEGIN OF: SCREEN 200 TITLE tit2.
    PARAMETERS: drive    RADIOBUTTON GROUP actn,
                stop     RADIOBUTTON GROUP actn,
                gearup   RADIOBUTTON GROUP actn,
                geardown RADIOBUTTON GROUP actn.
    SELECTION-SCREEN END OF: SCREEN 200.
    * Class Definitions
    CLASS: c_biker DEFINITION DEFERRED,
           c_bicycle DEFINITION DEFERRED.
    CLASS c_team DEFINITION.
      PUBLIC SECTION.
        TYPES: biker_ref TYPE REF TO c_biker,
               biker_ref_tab TYPE STANDARD TABLE OF biker_ref
                                           WITH DEFAULT KEY,
               BEGIN OF status_line_type,
                 flag(1)  TYPE c,
                 text1(5) TYPE c,
                 id       TYPE i,
                 text2(7) TYPE c,
                 text3(6) TYPE c,
                 gear     TYPE i,
                 text4(7) TYPE c,
                 speed    TYPE i,
               END OF status_line_type.
        CLASS-METHODS: class_constructor.
        METHODS: constructor,
                 create_team,
                 selection,
                 execution.
      PRIVATE SECTION.
        CLASS-DATA: team_members TYPE i,
                    counter TYPE i.
        DATA: id TYPE i,
              status_line TYPE status_line_type,
              status_list TYPE SORTED TABLE OF status_line_type
                               WITH UNIQUE KEY id,
              biker_tab TYPE biker_ref_tab,
              biker_selection LIKE biker_tab,
              biker LIKE LINE OF biker_tab.
        METHODS: write_list.
    ENDCLASS.
    CLASS c_biker DEFINITION.
      PUBLIC SECTION.
        METHODS: constructor IMPORTING team_id TYPE i members TYPE i,
                 select_action,
                 status_line EXPORTING line TYPE c_team=>status_line_type.
      PRIVATE SECTION.
        CLASS-DATA counter TYPE i.
        DATA: id TYPE i,
              bike TYPE REF TO c_bicycle,
              gear_status  TYPE i VALUE 1,
              speed_status TYPE i VALUE 0.
        METHODS biker_action IMPORTING action TYPE i.
    ENDCLASS.
    CLASS c_bicycle DEFINITION.
      PUBLIC SECTION.
        METHODS: drive EXPORTING velocity TYPE i,
                 stop  EXPORTING velocity TYPE i,
                 change_gear IMPORTING change TYPE i
                             RETURNING value(gear) TYPE i
                             EXCEPTIONS gear_min gear_max.
      PRIVATE SECTION.
        DATA: speed TYPE i,
              gear  TYPE i VALUE 1.
        CONSTANTS: max_gear TYPE i VALUE 18,
                   min_gear TYPE i VALUE 1.
    ENDCLASS.
    * Class Implementations
    CLASS c_team IMPLEMENTATION.
      METHOD class_constructor.
        tit1 = 'Team members ?'.
        CALL SELECTION-SCREEN 100 STARTING AT 5 3.
        IF sy-subrc NE 0.
          LEAVE PROGRAM.
        ELSE.
          team_members = members.
        ENDIF.
      ENDMETHOD.
      METHOD constructor.
        counter = counter + 1.
        id = counter.
      ENDMETHOD.
      METHOD create_team.
        DO team_members TIMES.
          CREATE OBJECT biker EXPORTING team_id = id members = team_members.
          APPEND biker TO biker_tab.
          CALL METHOD biker->status_line IMPORTING line = status_line.
          APPEND status_line TO status_list.
        ENDDO.
      ENDMETHOD.
      METHOD selection.
        CLEAR biker_selection.
        DO.
          READ LINE sy-index.
          IF sy-subrc <> 0. EXIT. ENDIF.
          IF sy-lisel+0(1) = 'X'.
            READ TABLE biker_tab INTO biker INDEX sy-index.
            APPEND biker TO biker_selection.
          ENDIF.
        ENDDO.
        CALL METHOD write_list.
      ENDMETHOD.
      METHOD execution.
        CHECK NOT biker_selection IS INITIAL.
        LOOP AT biker_selection INTO biker.
          CALL METHOD biker->select_action.
          CALL METHOD biker->status_line IMPORTING line = status_line.
          MODIFY TABLE status_list FROM status_line.
        ENDLOOP.
        CALL METHOD write_list.
      ENDMETHOD.
      METHOD write_list.
        SET TITLEBAR 'TIT'.
        sy-lsind = 0.
        SKIP TO LINE 1.
        POSITION 1.
        LOOP AT status_list INTO status_line.
          WRITE: / status_line-flag AS CHECKBOX,
                   status_line-text1,
                   status_line-id,
                   status_line-text2,
                   status_line-text3,
                   status_line-gear,
                   status_line-text4,
                   status_line-speed.
        ENDLOOP.
      ENDMETHOD.
    ENDCLASS.
    CLASS c_biker IMPLEMENTATION.
      METHOD constructor.
        counter = counter + 1.
        id = counter - members * ( team_id - 1 ).
        CREATE OBJECT bike.
      ENDMETHOD.
      METHOD select_action.
        DATA activity TYPE i.
        tit2 = 'Select action for BIKE'.
        tit2+24(3) = id.
        CALL SELECTION-SCREEN 200 STARTING AT 5 15.
        CHECK NOT sy-subrc GT 0.
        IF gearup = 'X' OR geardown = 'X'.
          IF gearup = 'X'.
            activity = 1.
          ELSEIF geardown = 'X'.
            activity = -1.
          ENDIF.
        ELSEIF drive = 'X'.
          activity = 2.
        ELSEIF stop = 'X'.
          activity = 3.
        ENDIF.
        CALL METHOD biker_action( activity ).
      ENDMETHOD.
      METHOD biker_action.
        CASE action.
          WHEN -1 OR 1.
            CALL METHOD bike->change_gear
                              EXPORTING change = action
                              RECEIVING gear = gear_status
                              EXCEPTIONS gear_max = 1
                                         gear_min = 2.
            CASE sy-subrc.
              WHEN 1.
                MESSAGE i315(at) WITH 'BIKE' id
                                      ' is already at maximal gear!'.
              WHEN 2.
                MESSAGE i315(at) WITH 'BIKE' id
                                      ' is already at minimal gear!'.
            ENDCASE.
          WHEN 2.
            CALL METHOD bike->drive IMPORTING velocity = speed_status.
          WHEN 3.
            CALL METHOD bike->stop  IMPORTING velocity = speed_status.
        ENDCASE.
      ENDMETHOD.
      METHOD status_line.
        line-flag = space.
        line-text1 = 'Biker'.
        line-id = id.
        line-text2 = 'Status:'.
        line-text3 = 'Gear = '.
        line-gear  = gear_status.
        line-text4 = 'Speed = '.
        line-speed = speed_status.
      ENDMETHOD.
    ENDCLASS.
    CLASS c_bicycle IMPLEMENTATION.
      METHOD drive.
        speed = speed  + gear * 10.
        velocity = speed.
      ENDMETHOD.
      METHOD stop.
        speed = 0.
        velocity = speed.
      ENDMETHOD.
      METHOD change_gear.
        gear = me->gear.
        gear = gear + change.
        IF gear GT max_gear.
          gear = max_gear.
          RAISE gear_max.
        ELSEIF gear LT min_gear.
          gear = min_gear.
          RAISE gear_min.
        ENDIF.
        me->gear = gear.
      ENDMETHOD.
    ENDCLASS.
    * Global Program Data
    TYPES team TYPE REF TO c_team.
    DATA: team_blue  TYPE team,
          team_green TYPE team,
          team_red   TYPE team.
    DATA  color(5) TYPE c.
    * Program events
    START-OF-SELECTION.
      CREATE OBJECT: team_blue,
                     team_green,
                     team_red.
      CALL METHOD: team_blue->create_team,
                   team_green->create_team,
                   team_red->create_team.
      SET PF-STATUS 'TEAMLIST'.
      WRITE '                   Select a team!             ' COLOR = 2.
    AT USER-COMMAND.
      CASE sy-ucomm.
        WHEN 'TEAM_BLUE'.
          color = 'BLUE '.
          FORMAT COLOR = 1 INTENSIFIED ON INVERSE ON.
          CALL METHOD team_blue->selection.
        WHEN 'TEAM_GREEN'.
          color = 'GREEN'.
          FORMAT COLOR = 5 INTENSIFIED ON INVERSE ON.
          CALL METHOD team_green->selection.
        WHEN 'TEAM_RED'.
          color = 'RED '.
          FORMAT COLOR = 6 INTENSIFIED ON INVERSE ON.
          CALL METHOD team_red->selection.
        WHEN 'EXECUTION'.
          CASE color.
            WHEN 'BLUE '.
              FORMAT COLOR = 1 INTENSIFIED ON INVERSE ON.
              CALL METHOD team_blue->selection.
              CALL METHOD team_blue->execution.
            WHEN 'GREEN'.
              FORMAT COLOR = 5 INTENSIFIED ON INVERSE ON.
              CALL METHOD team_green->selection.
              CALL METHOD team_green->execution.
            WHEN 'RED '.
              FORMAT COLOR = 6 INTENSIFIED ON INVERSE ON.
              CALL METHOD team_red->selection.
              CALL METHOD team_red->execution.
          ENDCASE.
      ENDCASE.
    Reward  points if it is usefull ....
    Girish

  • The data types varchar and varchar are incompatible in the subtract operator

    Hi ;
    I want to fetch values  6,903,00  format ,my query is ;
    SELECT CONVERT(varchar(50), CONVERT(money,SUM(DEBIT)),1) AS DEBIT ,CONVERT(varchar(50), CONVERT(money,SUM(CREDIT)),1),AS
    CREDIT CONVERT(varchar(50), CONVERT(money,SUM(DEBIT)),1) - CONVERT(varchar(50), CONVERT(money,SUM(CREDIT)),1) AS BALANCE
    FROM TABLE
    it was get error :  The data types varchar and varchar are incompatible in the subtract operator.
    I want to Show result ;
    DEBIT         -          CREDIT            -    BALANCE
    6,903,00              4,387.24             2,515.76
    Thanks in advance

    You have to do the subtraction with the MONEY data type (prior to covert-ing).
    Starting with SQL Server 2012, you can use the FORMAT command:
    https://msdn.microsoft.com/en-us/library/hh213505.aspx
    Kalman Toth Database & OLAP Architect
    SQL Server 2014 Database Design
    New Book / Kindle: Beginner Database Design & SQL Programming Using Microsoft SQL Server 2014
    We have to use SQL 2005 due to licensing issue .

  • Operand data type char is invalid for sum operator

    can someone help me re-writing the following so I wont keep getting thie baopv ementioned error: here is the statement:
    RIGHT('0000000000'+REPLACE(CAST(SUM(PAID_AMT) AS VARCHAR),'.',''),14) AS TOT_NET_PAID
    +
    RIGHT('0000000000'+REPLACE(CAST(SUM(PAID_AMT)
    AS
    VARCHAR),'.',''),14)
    AS TOT_NET_PAID
    It keeps retuning he following error messages:
    Operand data type char is invalid for sum operator

    As Jingyang said, you cannot sum a non numeric field. Cast it to a numeric first (INT maybe?)
    + RIGHT('0000000000'+REPLACE(CAST(SUM(CAST(PAID_AMT AS INT)) AS VARCHAR),'.',''),14) AS TOT_NET_PAID
    Don't forget to mark helpful posts, and answers. It helps others to find relevant posts to the same question.

Maybe you are looking for