Auto-increment column increase performance in this case ?

hi.
i have the following facts to construct a set of tables.
1. A Lecturer has an ID, Name and Date Joined
2. A Classroom has an ID, Number Of Students
3. A Lecturer can Teach in Many Classes
4. A Class Can be lectured by Many Lecturers
5. Each Lecture Date should be Stored in the DB.
considering those facts, the following schema can be derived
Lecturer
(Lecturer_ID (PK), Lecturer_name, Date_Joined)
Classroom
(Classroom_ID (PK), NumOfStudents)
Class_Lectures
(Classroom_ID, Lecturer_ID (Composte PK), LectureDate)
this is the normal practice we do.
but what if the 3rd Table is constructed as follows ?
Class_Lectures
(LectureSeriesID (Auto-Increment, PK), Classroom_ID, Lecturer_ID (Composte Unique Key), LectureDate)
if the 3rd Table is created as above, will there be any performance differences ? will the performance improve or get reduced ? any advantages / disadvantages of having that structure ?
please do advise my any further best practices as well.
Thanks and Regards

http://technet.oracle.com:89/ubb/Forum88/HTML/000944.html
null

Similar Messages

  • Primary key violation exception in auto increment column

    Hi All,
    I am facing one issue in Multi threaded environment.
    I am getting Primary key violation exception in auto increment column. I have a table and the primary key is the auto increment column, and I have a trigger which is populating this column.
    5 threads are running and inserting the data in the table and throwing Primary key violation exception randomly.
    create table example (
    id number not null,
    name varchar2(30)
    alter table example
    add constraint PK1example primary key (id);
    create sequence example_id_seq start with 1 increment by 1;
    create or replace trigger example_insert
    before insert on example
    for each row
    begin
    select example_id_seq.nextval into :new.id from dual;
    end;
    Any idea how to handle auto increment column(trigger) in Multi threaded environment??
    Thanks,

    user13566109 wrote:
    Thanks All,
    Problem was in approach; removed the trigger and placed a seq.nextval in insert query. It has resolved the issue.I very much suspect that that was not the issue.
    The trigger would execute for each insertion and the nextval would have been unique for each insertion (that's how sequences work in oracle), so that wouldn't have been causing duplicates.
    I suspect, more likely, that you had some other code somewhere that was using another sequence or some other method of generating the keys that was also inserting into the same table, so there was a conflict in the sources of the sequences being generated.
    The way you showed you had coded above, was a perfectly normal way to assign primary keys from a sequence, and is not a problem in a multi user/threaded environment.

  • Insert data into Access with Auto-Increment column

    Is there anyone out there that has come across this problem I am experiencing?
    I have a form I'm trying to submit to an Access DB that has an Auto-Incremented Table Column. I have followed Stefan Cameron's instructions to a "T" on his blog page here:
    http://forms.stefcameron.com/2006/09/18/connecting-a-form-to-a-database/
    but I keep getting the following error"
    GeneralError: Operation failed.
    XFAObject.open:10:XFA:form1[0]:mysubform[0]:myEIFform[0]:overflowLeader[0]:Submit[0]:click
    open operation failed. [Microsoft][ODBC Microsoft Access Driver] Number of query values and destination fields are not the same.
    My OLEDB Connection Record Source is the SQL Query which reads: SELECT FedTaxID, LegalID FROM dbtest; My simple test DB is Access and its only 3 columns; dbID, FedTaxID, LegalID. dbID is the Auto-Incremented Column.
    If I remove the Auto column from my DB table it inserts just fine but I get this error:
    GeneralError: Operation failed.
    XFAObject.open:10:XFA:form1[0]:mysubform[0]:myEIFform[0]:overflowLeader[0]:Submit[0]:click
    ado2xfa operation failed. Item cannot be found in the collection corresponding to the requested name or ordinal.
    I've looked over alot of the blogs and other help forums and there's info on Selects, I don't find much on Inserts.
    Can anyone direct me in the right direction? Thank you.

    First, please pay attention to the forum in which you are posting.  This particular post would be more appropriate to tsql rather than datamining.  Second, what specific problem are you trying to solve.  The code you posted appears to be
    correct.  I will say that your DataTable will likely be a source of future problems if it contains only the 2 columns.

  • Auto Increment Columns Are Not Recognized

    Hi
    I am using postgre 8 and there are some auto incremented columns
    in some tables. The problem is when I create the DataProvider from a table or a view those columns are not recognized by the IDE. I realized this while running the generated SQL. Is this a known issue ? Finally is there a work around this.
    Thanks
    Mehmet Atlihan

    Hi Mehmet,
    Creator requires a JDBC 3 compliant driver and PostgreSQL database driver is not fully compliant. Please take a look at the below thread which discusses about the issue:
    http://swforum.sun.com/jive/thread.jspa?forumID=123&threadID=53064
    Cheers
    Giri

  • Auto Increment column query

    I have a very simple table used for debugging:
    CREATE TABLE APPS.XX_DEBUG_TMP
      TEMP_VALUE  VARCHAR2(255 BYTE),
      TEMP_DATE   DATE
    )Then I can use it to store values as my pl/sql is processed - e.g.:
    INSERT INTO XX_DEBUG_TMP (TEMP_VALUE,TEMP_DATE) VALUES ('line 740 l_username value check:' || l_username,SYSDATE);  COMMIT;Trouble is that if a load of debug statements get processed with the same timestamp, I can't see which came first.
    Can I modify my table creation SQL to include an ID column which just increments for each row that is added to the table?
    I'm familiar with how to do it in MySQL (sorry - I know this is an Oracle forum - but am just putting this here to show what I mean):
    CREATE TABLE  `XX_DEBUG_TMP` (
    `TEMP_ID` MEDIUMINT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `TEMP_VALUE` VARCHAR( 255 ) NOT NULL ,
    `TEMP_DATE` DATETIME NOT NULL
    ) ENGINE = MYISAM ;Is it that simple with Oracle? Probably not!
    Any advice much appreciated.
    Thanks

    There is no auto increment column in Oracle. However, you can create a sequence.
    CREATE TABLE APPS.XX_DEBUG_TMP
      TEMP_ID     NUMBER NOT NULL PRIMARY KEY,
      TEMP_VALUE  VARCHAR2(255 BYTE),
      TEMP_DATE   DATE
    CREATE SEQUENCE APPS.XX_DEBUG_TMP_SEQ;Then in your insert statement do this:
    INSERT INTO XX_DEBUG_TMP (TEMP_ID,TEMP_VALUE,TEMP_DATE) VALUES (APPS.XX_DEBUG_TMP_SEQ.NEXTVAL,'line 740 l_username value check:' || l_username,SYSDATE);  Another possible solution to your problem would be to use a TIMESTAMP data type instead of a DATE data type. It has fractional second resolution (up to 9 places I believe).

  • What does the setting "auto increment column templates"

    I have noticed that there is now a setting "auto increment column templates" but I cannot find out what this setting does.
    There are no sequences generated nor triggers.
    Version 3.0.
    Thanks, Joep

    There are no sequences generated nor triggersYou need to set column as "auto increment". Then sequence and trigger will be generated for Oracle.
    You can set template for generated sequences and triggers and can override these settings at column level setting explicitly the name of sequence and trigger.
    The sequence and related trigger are not created as objects in physical model, however if there are such objects defined then definition from physical model is used for generated DDL.
    Philip

  • Add auto increment column to trigger

    I want to add auto increment column to after insert trigger. so how can I do that?

    this is my query.
    Create Sequence Up_Seq
    Start With 1
    Increment By 1
    nomaxvalue;
    Create Or Replace Trigger Upf_Trig
    After Insert On members
    Referencing New As New
    For Each Row
    Begin
    Insert Into Upf_Kgl(Member_Id,Mem_Name,Nic,Division)
    Values (Up_Seq.Nextval
    *,:New.Mem_Name*
    *,:New.Nic*
    *,:New.Division);*
    end upf_trig;
    It's worked. but when inserting values to members table, there is an error.
    this is the error
    Error starting at line 21 in command:
    Insert Into Members(Mem_Name,Nic,Full_Name,Age,Sex,Mar_State,Birth_Date,Division,Religon)
    Values(
    *'IA Nawagamuwa'*
    *,'883324356V'*
    *,'Isuru Aravinda Nawagamuwa'*
    *,'22'*
    *,'Male'*
    *,'Single'*
    *,'21-Dec-88'*
    *,'kgl'*
    *,'Buddhist')*
    Error report:
    SQL Error: ORA-00001: unique constraint (SYSTEM.SYS_C004077) violated
    ORA-06512: at "SYSTEM.UPF_TRIG", line 2
    ORA-04088: error during execution of trigger 'SYSTEM.UPF_TRIG'
    *00001. 00000 - "unique constraint (%s.%s) violated"*
    **Cause: An UPDATE or INSERT statement attempted to insert a duplicate key.*
    For Trusted Oracle configured in DBMS MAC mode, you may see
    this message if a duplicate entry exists at a different level.
    **Action: Either remove the unique restriction or do not insert the key.*

  • Can we specify prefix for an auto increment column

    Hi all,
    I want to create an auto increment column in oracle using oracle sequences.
    But i want to specify a prefix for the value appearing after increment.
    Prefix will remain constant.
    If we can how can i do that.
    And one more thing is i will call the sequence using a trigger only for a specified condition.My doubt here is can i allow nulls for auto incrementing column
    With Regards

    <s></s>
    -- Samples.
    create table tab1
    (id   varchar2(6) constraint p_tab1 primary key
    ,data varchar2(255)
    create sequence seq_tab1;
    create or replace
    trigger trg_tab1
    before insert on tab1
    for each row
    declare
      p_prefix varchar2(2) := 'AA';
    begin
      if (:new.id is null) then
        select p_prefix||to_char(seq_tab1.nextval,'fm0009') into :new.id from dual;
      end if;
    end
    -- Test
    SQL> insert into tab1(data) values('abc');
    1 row created.
    SQL> insert into tab1(id,data) values('BB9999','xyz');
    1 row created.
    SQL> select * from tab1;
    ID
    DATA
    AA0001
    abc
    BB9999
    xyz

  • How can i create an auto increment column

    Hello Everyone
    We are working on an EAM package which has an auto number facility but that is not meeting our requirement because some 10s and 100s of numbers keep on jumping based on the number of records the child table has.Means every record in my parent table will have some child records in another table which we call it a child table.The number of numbers that will be jumped each time will depend on the number of child records it has. Now we want to create a new column and generate a sequential unique number in my parent table with out linking it to its child table and use this number as a reference number. And we cant do that through our package customization. Can any one guide us if we can meet our requirement through oracle triggers or so.
    Thanks and Regards

    Hi,
    For "Auto-Increment" functionality - you can use a combination of a sequence and a trigger like so:
    create table roles ( role_id INT
                       , role_name VARCHAR2(30) NOT NULL
                       , creation_date DATE DEFAULT SYSDATE NOT NULL
                       , role_description VARCHAR2(255)
                       , CONSTRAINT roles_pk PRIMARY KEY (role_id)
                       , CONSTRAINT roles_uk1 UNIQUE (role_name)
    create sequence role_id_seq
    start with 1
    increment by 1
    nocache;
    CREATE OR REPLACE TRIGGER roles_pk_trig
    BEFORE
    insert on roles
    for each row
    begin
    IF :new.role_id IS NULL THEN
       SELECT role_id_seq.NEXTVAL
       INTO :new.role_id
       FROM dual;
    END IF;
    end;
    /Now any insert which leaves the "ROLE_ID" column NULL will have an auto-incremented value put in for that column. This is similar to an "Autonumber" column in Access.
    Hope this helps...
    Take care.

  • How can I automatically increment an auto incremented column?

    Hello!
    I have a table with an auto incremented "id" field.
    It looks like this:
    id (PK, auto_increment) name address phone
    I would like to make an insertion like:
    INSERT INTO Person (name, address, phone) VALUES (?,?,?)
    ...but it says that all fields have to be used.
    I get
    java.sql.SQLException: Field 'id' doesn't have a default value
    How can I bypass this?
    I have looked at [this example|http://blog.taragana.com/index.php/archive/java-how-to-get-auto-increment-values-after-sql-insert/] , but it didn´t work for me, it still says the "id" column has not a default value:

    Sorry, it is a MySQL database.
    The table consists of 4 columns:
    id (PK, auto_increment)
    name (Varchar)
    address (Varchar)
    phone (Varchar)
    If I use PHPMyAdmin to insert a new row, then this query works:
    INSERT INTO `mydb`.`person` (
    `id` ,
    `name` ,
    `address` ,
    `phone`
    VALUES (
    NULL , 'Test', 'Roxxor', 'Europe', '12345'
    );{code}I tested to use the method setNull() on the first column in the preparedStatement but it didn&acute;t work.
    Do you need more info from me to be able to help me?
    I have tried this (but got the error that the "Field 'id' doesn't have a default value"):
    [code]con.setAutoCommit(true);
                String query = "INSERT INTO person(id, name, address, phone) VALUES (?, ?, ?, ?)";
                PreparedStatement stmt = con.prepareStatement(query);
                stmt.setNull(1, java.sql.Types.NULL);
                stmt.setString(2, name); 
                stmt.setString(3, address);     
                stmt.setString(4, phone); 
                stmt.executeUpdate(); 
                stmt.close();[/code]                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   

  • Auto Increment column in database table

    Hello experts, I am using oracle 11g database at windows 7.I have to create a sequence object and a table with an auto increment ID column.For this I have created a trigger before insert to select next sequence from a sequence object. It works well but Now I have the current sequence is 7 and there are 6 records inserted in table. Now I delete two records.Thus I have only 5 records in table but my current sequence is still 7.So if I put it in id column then a new record will be inserted in table with 7 ID number after 5th ID number.I want this record should be inserted with 6 Id number. For this I tried to not use sequence object.I tried a pl/sql trigger before insert, which will count the all records in table and after increment i put it in ID column to insertion....Is this a professional way..? thank You regards aaditya

    979801 wrote:
    Hello experts, I am using oracle 11g database at windows 7.I have to create a sequence object and a table with an auto increment ID column.For this I have created a trigger before insert to select next sequence from a sequence object. It works well but Now I have the current sequence is 7 and there are 6 records inserted in table. Now I delete two records.Thus I have only 5 records in table but my current sequence is still 7.So if I put it in id column then a new record will be inserted in table with 7 ID number after 5th ID number.I want this record should be inserted with 6 Id number. For this I tried to not use sequence object.I tried a pl/sql trigger before insert, which will count the all records in table and after increment i put it in ID column to insertion....Is this a professional way..? thank You regards aaditya
    Sequences only guarantee unique numbers.  You cannot (and should not) attempt to create gapless sesquences.  That's not how oracle works and will not scale to a multi user application.
    Imagine two people try to insert records at the same time (and have yet to commit), the trigger you create will count the number of records and determine there are 5 records, so assign the next number of 6, for both people who are inserting records.  The first person to commit will get their data saved, and assuming you have a unique constriaint on that id, the second person will raise a duplicate key on insert or suchlike error.
    Gapless sequential numbers are not appropriate to multi-user environments.  Such requirements are often given by managers or business people who do not understand the technology.
    Think of it in terms of a real world office, but with people using a paper system instead of a computer.  The only way you can try to guarantee people get the next number and also re-use numbers that have been deleted is to have a single place where each person in the office goes to, to fetch the next number, and they have to queue up behind each other to get the next one off the list.  But if someone has removed an old record, they've got to wait in the same queue to go and put that number back in the pot for someone else to use.  It just doesn't work, even in a manual system.  Yes, people can guarantee that they're only getting unique numbers that nobody else is using, but they cannot guarantee that they are reusing and filling gaps etc.  It's an unrealistic expectation.

  • Identifying auto-increment columns

    Hi,
    I am developing a database management package for mysql. I want to be able to provide a sql dump facility, which will produce the sql code for creating a table and populating it.
    I do not seem to be able to find a function for identifying if a field is auto-incrementing?
    The only thing that I could find it the DatabaseMetaData.getTypeInfo() will let you know if a field can used for an auto-increment value, not if it is actually auto-incrementing.
    Please help!

    If you do a query of this table and then have a look at
    the ResultSetMetaData you can use the methode:
    boolean isAutoIncrement(int column)
    Indicates whether the designated column is
    automatically numbered, thus read-only.
    Or you can use the MYSQL-command :
    show columns from table to get all the info of each
    column.
    mysql> show columns from table;
    -----------------------------------------------------------------------------+
    | Field | Type | Null | Key | Default | Extra |
    -----------------------------------------------------------------------------+
    where the Extra column contains 'auto_increment ' if it is...
    ...what in fact is not that DB-independent.....
    Regards
    Fredy

  • Plz increase performance of this report

    hi all
    i want to know how can i improve the performance of my report.
    the code is given below and it takes so much time on production even for single record
    plz help
    HERE COMES THE CODE
    *& Report  ZGRSTATUS
    REPORT  ZGRSTATUS.
    TYPE-POOLS slis.
    TABLES: mseg, qamb, mkpf, rseg.
    DATA : BEGIN OF itab OCCURS 0,
           mblnr LIKE mseg-mblnr,
           zeile LIKE mseg-zeile,
           uom LIKE mseg-erfme,
           matnr LIKE mseg-matnr,
           recqty LIKE mseg-erfmg,
           qcins LIKE mseg-insmk,               "INSPECTION SIGN
           ebeln LIKE mseg-ebeln,
           ebelp LIKE mseg-ebelp,
           lifnr LIKE mseg-lifnr,
           budat LIKE mkpf-budat,
           txz01 LIKE ekpo-txz01,
           name1 LIKE lfa1-name1,
           accqty LIKE mseg-erfmg,
           rejqty LIKE mseg-erfmg,
           belnr LIKE rseg-belnr,
           dqty LIKE mseg-menge,
           cqty LIKE mseg-menge,
           qcdat like mkpf-budat,
           miro_budat like rbkp-budat,
           accuom like mseg-erfme,
           rejuom like mseg-erfme,
           qcstat like mseg-insmk,
           acstat(1) type c,
           crnote(1) type c,
           END OF itab.
    DATA : BEGIN OF itab1 OCCURS 0,
           mblnr LIKE mseg-mblnr,
           zeile LIKE mseg-zeile,
           mjahr LIKE mseg-mjahr,
           prueflos like qamb-prueflos,
           END OF itab1.
    DATA: BEGIN OF imiro OCCURS 0,
          belnr LIKE rseg-belnr,
          lfbnr LIKE rseg-lfbnr,              "DOCMENT NO SAME AS MBLRN
          shkzg LIKE rseg-shkzg,              "DEBIT CREDIT SIGN
          menge LIKE rseg-menge,
          ebeln LIKE rseg-ebeln,
          ebelp LIKE rseg-ebelp,
          budat LIKE rbkp-budat,
          END OF imiro.
    data: begin of iins occurs 0,             "NEW INTERNAL TABLE DECLARED for inspection lot numbers
          mblnr like mseg-mblnr,
          zeile like mseg-zeile,
          prueflos like qamb-prueflos,
          mjahr like qamb-mjahr,
          end of iins.
    ****************************CODE FOR SELECTION SCREEN****************************
    selection-screen begin of block par1 WITH FRAME TITLE TEXT-001.
    PARAMETERS : plant LIKE mseg-werks OBLIGATORY DEFAULT 'MFPL'.
    PARAMETERS: year LIKE mseg-mjahr OBLIGATORY DEFAULT '2007'.
    SELECT-OPTIONS : grno FOR mseg-mblnr,
                     grdate FOR mkpf-budat,
                     vendor FOR mseg-lifnr,
                     item for mseg-matnr.
    SELECTION-SCREEN END OF BLOCK par1.
    ***************************END OF CODE FOR SELECTION SCREEN**********************
    *************************FETCHING OF GR INFORMATION FROM MSEG AND MKPF*************************
    SELECT amblnr zeile aerfme amatnr aerfmg ainsmk aebeln aebelp alifnr bbudat ctxz01 d~name1
    FROM mseg AS a
    INNER JOIN mkpf AS b ON amblnr = bmblnr AND amjahr = bmjahr
    INNER JOIN ekpo AS c ON aebeln = cebeln AND aebelp = cebelp
    INNER JOIN lfa1 as d ON dlifnr = alifnr
    INTO TABLE itab
    WHERE awerks = plant AND amblnr IN grno AND bwart = '101' AND a~mjahr = year
    AND btcode2 = 'MIGO_GR' AND bbudat IN grdate AND alifnr IN vendor and amatnr IN item.
    *************************END OF RETERIEVEL***************************************
    if sy-subrc <> 0.
      Message 'NO RECORD FOUND' type 'E'.
    endif.
    *******************************SELECTING THE INSPECTED DOC NUMBERS AND CORROSPONDING INSPECTION LOT********************************
    select mblnr zeile mjahr prueflos
    from qamb into table itab1  for all entries in itab where mblnr = itab-mblnr and zeile = itab-zeile.
    **********************************END OF SELECTING THE INSPECTED DOC. NUMBERS & INSPECTION LOTS************************************
    **************************SELECTING THE DOC NO FOR ACCEPTED AND REJECTED QTY ACCORDING TO INSPECTION LOT***************************
    select mblnr zeile prueflos mjahr into table iins from qamb
      for all entries in itab1 where prueflos = itab1-prueflos and mblnr <> itab1-mblnr.
    **************************END OF SELECTING ACCEPTED AND REJECTED QTY DOCUMENTS****************************************************
    **********************************SELECTING THE DEBIT AND CREDIT QTY FOR THE MIRO TCODE*******************************************
    SELECT abelnr lfbnr shkzg menge ebeln ebelp bbudat INTO table imiro
        FROM rseg as a
        inner join rbkp as b on abelnr = bbelnr
        for all entries in itab where a~lfbnr = itab-mblnr.
    DATA : v_qcidoc LIKE qamb-prueflos,
           v_qcdoc LIKE mseg-mblnr,
           v_qcdoc1 LIKE mseg-zeile,
           v_qty LIKE mseg-menge,
           v_bwart LIKE mseg-bwart,
           v_name1 LIKE lfa1-name1,
           v_budat like mkpf-budat,
           v_newrejqty like mseg-menge,
           v_newaccqty like mseg-menge,
           CMPACCQTY LIKE MSEG-MENGE,
           CMPREJQTY LIKE MSEG-MENGE,
           aa TYPE c.
    data: begin of iartab occurs 0,
          mblnr like mseg-mblnr,
          bwart like mseg-bwart,
          qty like mseg-menge,
          erfme like mseg-erfme,
          zeile like mseg-zeile,
          budat like mkpf-budat,
          end of iartab.
    clear iartab.
    refresh iartab.
    ****************************************table for accept and reject qty************************************
    SELECT a~mblnr bwart erfmg erfme zeile budat into table iartab
      FROM mseg as a
      inner join mkpf as b on amblnr = bmblnr
      for all entries in iins
      WHERE amblnr = iins-mblnr AND azeile = iins-zeile AND xauto <> 'X' AND a~mjahr = iins-mjahr.
    ******************************************END OF ACCEPT AND REJECTED QTY.***********************************
    LOOP AT itab.
    clear: itab-accuom, itab-rejuom.
    SELECT SINGLE name1 FROM lfa1 INTO itab-name1 WHERE lifnr = itab-lifnr.
         **********************GETTING THE ACCEPTED AND REJECTED QTY FROM MSEG FOR ALL RECORDS OF ITAB*********************
      IF itab-qcins = 'X'.
      clear v_qcidoc.
      clear: v_bwart, v_qty, v_budat.
      read table itab1 with key mblnr = itab-mblnr zeile = itab-zeile.
        if sy-subrc = 0.
          v_qcidoc = itab1-prueflos.
        endif.
       LOOP AT itab1 where prueflos = v_qcidoc and mblnr <> itab-mblnr .
         LOOP AT iins where prueflos = v_qcidoc. " and mblnr <> itab-mblnr .
          v_qty = 0.
         SELECT single bwart erfmg budat
           INTO (v_bwart, v_qty, v_budat)
           FROM mseg as a
           inner join mkpf as b on amblnr = bmblnr
           WHERE amblnr = itab1-mblnr AND azeile = itab1-zeile AND xauto <> 'X' AND a~mjahr = itab1-mjahr.
           WHERE amblnr = iins-mblnr AND azeile = iins-zeile AND xauto <> 'X' AND a~mjahr = iins-mjahr.
          read table iartab with key mblnr = iins-mblnr zeile = iins-zeile.
          if sy-subrc = 0.
            v_bwart = iartab-bwart.
            v_qty = iartab-qty.
            v_budat = iartab-budat.
          endif.
          IF v_bwart = '321'.
            v_newaccqty = v_newaccqty + v_qty.
            itab-accqty = v_newaccqty.
            itab-qcdat = v_budat.
            itab-accuom = iartab-erfme.
          ELSEIF v_bwart = '122'.
            itab-qcdat = v_budat.
            v_newrejqty = v_newrejqty + v_qty.
            itab-rejqty = v_newrejqty.
            itab-rejuom = iartab-erfme.
          ENDIF.
        ENDLOOP.        "*********END OF LOOP FOR ITAB1**************
            clear: v_newaccqty, v_newrejqty.
      ENDIF.    "**********END OF MAIN ENDIF***********************
             *****************END OF CODE FOR ACCEPTED AND REJECTED QTY************************************
         ****************************GETTING DEBIT AND CREDIT QTY******************************************
      LOOP AT imiro WHERE lfbnr = itab-mblnr AND ebeln = itab-ebeln AND ebelp = itab-ebelp.
        ITAB-MIRO_BUDAT = IMIRO-BUDAT.
        itab-belnr = imiro-belnr.
        IF imiro-shkzg = 'S'.
          itab-dqty = imiro-menge.
        ELSEIF imiro-shkzg = 'H'.
          itab-cqty = imiro-menge.
        ENDIF.
      ENDLOOP.
         *****************************END OF CODE FOR DEBIT AND CREDIT QTY*******************************
      data v_sumqty like mseg-menge.
      CLEAR V_SUMQTY.
      if itab-qcins = 'X'.
      clear: cmpaccqty, cmprejqty.
      cmpaccqty = itab-accqty.
      cmprejqty = itab-rejqty.
        IF ITAB-UOM <> ITAB-ACCUOM AND ITAB-ACCUOM <> SPACE.
          CALL FUNCTION 'ZCONVERT_UOM_QTY'
           EXPORTING
             P_FR_UOM       = ITAB-UOM
             P_TO_UOM       = ITAB-ACCUOM
             P_QTY          = ITAB-ACCQTY
           IMPORTING
             P_RETVAL       = CMPACCQTY.
         ELSEIF ITAB-UOM <> ITAB-REJUOM AND ITAB-REJUOM <> SPACE.
           CALL FUNCTION 'ZCONVERT_UOM_QTY'
             EXPORTING
               P_FR_UOM       = ITAB-UOM
               P_TO_UOM       = ITAB-REJUOM
               P_QTY          = ITAB-REJQTY
             IMPORTING
               P_RETVAL       = CMPREJQTY.
         ENDIF.
        v_sumqty = CMPACCQTY + CMPREJQTY.
        if ( v_sumqty = itab-recqty ).
          itab-qcstat = 'C'.
          modify itab.
        ELSE.
          ITAB-QCSTAT = 'P'.
        endif.
      ELSE.
        ITAB-QCSTAT = 'C'.
      endif.
    IF ITAB-QCSTAT = 'C'.
      IF ITAB-DQTY = ITAB-RECQTY.
        ITAB-ACSTAT = 'C'.
      ELSE.
        ITAB-ACSTAT = 'P'.
      ENDIF.
    ELSEIF ITAB-QCSTAT = 'P'.
      IF ITAB-RECQTY = ITAB-DQTY.
        ITAB-ACSTAT = 'O'.
      ENDIF.
    ENDIF.
    IF ITAB-REJQTY > 0.
      IF ITAB-ACSTAT = 'C' AND ITAB-REJQTY > ITAB-CQTY.
        ITAB-CRNOTE = 'P'.
      ELSEIF ITAB-ACSTAT = 'C' AND ITAB-REJQTY < ITAB-CQTY.
        ITAB-CRNOTE = 'W'.
      ELSEIF ITAB-ACSTAT = 'C' AND ITAB-REJQTY = ITAB-CQTY.
        ITAB-CRNOTE = 'C'.
      ENDIF.
    ELSE.
      ITAB-CRNOTE = 'N'.
    ENDIF.
    MODIFY itab.
    ENDLOOP.    "*********************************************"END OF MAINT LOOP FOR ITAB.***********************
    DATA: it_fieldcat TYPE slis_t_fieldcat_alv,
          wa_fieldcat TYPE slis_fieldcat_alv,
          wa_layout TYPE slis_layout_alv.
    PERFORM f_layout.
    PERFORM f_fieldcat.
    PERFORM display.
    *&      Form  F_LAYOUT
          text
    FORM f_layout.
      wa_layout-colwidth_optimize = 'X'.
      wa_layout-no_subchoice = 'X'.
      wa_layout-zebra = 'X'.
    ENDFORM.                    "F_LAYOUT
    *&      Form  F_FIELDCAT
          text
    FORM f_fieldcat.
      DATA wa_col TYPE i VALUE 1.
      wa_fieldcat-col_pos = wa_col + 1.
      wa_fieldcat-seltext_l = 'GR. NO'.
      wa_fieldcat-fieldname = 'MBLNR'.
      wa_fieldcat-tabname = itab.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR wa_fieldcat.
      wa_fieldcat-col_pos = wa_col + 1.
      wa_fieldcat-seltext_l = 'GR DATE'.
      wa_fieldcat-fieldname = 'BUDAT'.
      wa_fieldcat-tabname = itab.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR wa_fieldcat.
      wa_fieldcat-col_pos = wa_col + 1.
      wa_fieldcat-seltext_l = 'PO NO'.
      wa_fieldcat-fieldname = 'EBELN'.
      wa_fieldcat-tabname = itab.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR wa_fieldcat.
      wa_fieldcat-col_pos = wa_col + 1.
      wa_fieldcat-no_zero = 'X'.
      wa_fieldcat-seltext_l = 'PARTY ID'.
      wa_fieldcat-fieldname = 'LIFNR'.
      wa_fieldcat-tabname = itab.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR wa_fieldcat.
      wa_fieldcat-col_pos = wa_col + 1.
      wa_fieldcat-seltext_l = 'PARTY NAME'.
      wa_fieldcat-fieldname = 'NAME1'.
      wa_fieldcat-tabname = itab.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR wa_fieldcat.
      wa_fieldcat-col_pos = wa_col + 1.
      wa_fieldcat-no_zero = 'X'.
      wa_fieldcat-outputlen = '18'.
      wa_fieldcat-seltext_l = 'ITEM ID'.
      wa_fieldcat-fieldname = 'MATNR'.
      wa_fieldcat-tabname = itab.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR wa_fieldcat.
      wa_fieldcat-col_pos = wa_col + 1.
      wa_fieldcat-seltext_l = 'DESCRIPTION'.
      wa_fieldcat-fieldname = 'TXZ01'.
      wa_fieldcat-tabname = itab.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR wa_fieldcat.
      wa_fieldcat-col_pos = wa_col + 1.
      wa_fieldcat-seltext_l = 'UOM'.
      wa_fieldcat-fieldname = 'UOM'.
      wa_fieldcat-tabname = itab.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR wa_fieldcat.
      wa_fieldcat-col_pos = wa_col + 1.
      wa_fieldcat-seltext_l = 'INS REQ'.
      wa_fieldcat-fieldname = 'QCINS'.
      wa_fieldcat-tabname = itab.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR wa_fieldcat.
      wa_fieldcat-col_pos = wa_col + 1.
      wa_fieldcat-no_zero = 'X'.
      wa_fieldcat-seltext_l = 'GR QTY'.
      wa_fieldcat-fieldname = 'RECQTY'.
      wa_fieldcat-tabname = itab.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR wa_fieldcat.
      wa_fieldcat-col_pos = wa_col + 1.
      wa_fieldcat-seltext_l = 'QC DATE'.
      wa_fieldcat-fieldname = 'QCDAT'.
      wa_fieldcat-tabname = itab.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR wa_fieldcat.
      wa_fieldcat-col_pos = wa_col + 1.
      wa_fieldcat-no_zero = 'X'.
      wa_fieldcat-seltext_l = 'ACC QTY'.
      wa_fieldcat-fieldname = 'ACCQTY'.
      wa_fieldcat-tabname = itab.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR wa_fieldcat.
      wa_fieldcat-col_pos = wa_col + 1.
      wa_fieldcat-no_zero = 'X'.
      wa_fieldcat-seltext_l = 'ACC UOM'.
      wa_fieldcat-fieldname = 'ACCUOM'.
      wa_fieldcat-tabname = itab.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR wa_fieldcat.
      wa_fieldcat-col_pos = wa_col + 1.
      wa_fieldcat-no_zero = 'X'.
      wa_fieldcat-seltext_l = 'REJ QTY'.
      wa_fieldcat-fieldname = 'REJQTY'.
      wa_fieldcat-tabname = itab.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR wa_fieldcat.
      wa_fieldcat-col_pos = wa_col + 1.
      wa_fieldcat-no_zero = 'X'.
      wa_fieldcat-seltext_l = 'REJ UOM'.
      wa_fieldcat-fieldname = 'REJUOM'.
      wa_fieldcat-tabname = itab.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR wa_fieldcat.
      wa_fieldcat-col_pos = wa_col + 1.
      wa_fieldcat-seltext_l = 'MIRO NO'.
      wa_fieldcat-fieldname = 'BELNR'.
      wa_fieldcat-tabname = itab.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR wa_fieldcat.
      wa_fieldcat-col_pos = wa_col + 1.
      wa_fieldcat-seltext_l = 'MIRO DATE'.
      wa_fieldcat-fieldname = 'MIRO_BUDAT'.
      wa_fieldcat-tabname = itab.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR wa_fieldcat.
      wa_fieldcat-col_pos = wa_col + 1.
      wa_fieldcat-no_zero = 'X'.
      wa_fieldcat-seltext_l = 'DB.QTY'.
      wa_fieldcat-fieldname = 'DQTY'.
      wa_fieldcat-tabname = itab.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR wa_fieldcat.
      wa_fieldcat-col_pos = wa_col + 1.
      wa_fieldcat-no_zero = 'X'.
      wa_fieldcat-seltext_l = 'CR.QTY'.
      wa_fieldcat-fieldname = 'CQTY'.
      wa_fieldcat-tabname = itab.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR wa_fieldcat.
      wa_fieldcat-col_pos = wa_col + 1.
      wa_fieldcat-seltext_l = 'QC STATUS'.
      wa_fieldcat-fieldname = 'QCSTAT'.
      wa_fieldcat-tabname = itab.
      APPEND wa_fieldcat to it_fieldcat.
      clear wa_fieldcat.
      wa_fieldcat-col_pos = wa_col + 1.
      wa_fieldcat-seltext_l = 'A/C STATUS'.
      wa_fieldcat-fieldname = 'ACSTAT'.
      wa_fieldcat-tabname = itab.
      APPEND wa_fieldcat to it_fieldcat.
      clear wa_fieldcat.
      wa_fieldcat-col_pos = wa_col + 1.
      wa_fieldcat-seltext_l = 'CR NOTE STATUS'.
      wa_fieldcat-fieldname = 'CRNOTE'.
      wa_fieldcat-tabname = itab.
      APPEND wa_fieldcat to it_fieldcat.
      clear wa_fieldcat.
    ENDFORM.                    "F_FIELDCAT
    *&      Form  DISPLAY
          text
    FORM display.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
        EXPORTING
          i_callback_program = sy-repid
          is_layout          = wa_layout
          I_CALLBACK_USER_COMMAND  = 'HANDLE_USER_COMMAND'
          it_fieldcat        = it_fieldcat
        TABLES
          t_outtab           = itab.
    ENDFORM.                    "DISPLAY
    FORM HANDLE_USER_COMMAND USING R_UCOMM     LIKE SY-UCOMM
                                 RS_SELFIELD TYPE SLIS_SELFIELD.
       CASE R_UCOMM.
        WHEN '&IC1'.
        clear itab-ebeln.
          IF RS_SELFIELD-FIELDNAME = 'EBELN'.
            READ TABLE ITAB INDEX RS_SELFIELD-TABINDEX.
            SET PARAMETER ID 'BES' FIELD ITAB-EBELN.
            call transaction 'ME23N' AND SKIP FIRST SCREEN.
            CLEAR RS_SELFIELD.
          ELSEIF RS_SELFIELD-FIELDNAME = 'MBLNR'.
            READ TABLE ITAB INDEX RS_SELFIELD-TABINDEX.
            SET PARAMETER ID 'MBN' FIELD ITAB-MBLNR.
            SET PARAMETER ID 'MJA' FIELD year.
            call transaction 'MIGO' AND SKIP FIRST SCREEN.
            CLEAR RS_SELFIELD.
          ENDIF.
      ENDCASE.
    ENDFORM.                    "HANDLE_USER_COMMAND

    Ways of Performance Tuning
    1.     Selection Criteria
    2.     Select Statements
    •     Select Queries
    •     SQL Interface
    •     Aggregate Functions
    •     For all Entries
    Select Over more than one internal table
    Selection Criteria
    1.     Restrict the data to the selection criteria itself, rather than filtering it out using the ABAP code using CHECK statement. 
    2.     Select with selection list.
    SELECT * FROM SBOOK INTO SBOOK_WA.
      CHECK: SBOOK_WA-CARRID = 'LH' AND
             SBOOK_WA-CONNID = '0400'.
    ENDSELECT.
    The above code can be much more optimized by the code written below which avoids CHECK, selects with selection list
    SELECT  CARRID CONNID FLDATE BOOKID FROM SBOOK INTO TABLE T_SBOOK
      WHERE SBOOK_WA-CARRID = 'LH' AND
                  SBOOK_WA-CONNID = '0400'.
    Select Statements   Select Queries
    1.     Avoid nested selects
    SELECT * FROM EKKO INTO EKKO_WA.
      SELECT * FROM EKAN INTO EKAN_WA
          WHERE EBELN = EKKO_WA-EBELN.
      ENDSELECT.
    ENDSELECT.
    The above code can be much more optimized by the code written below.
    SELECT PF1 PF2 FF3 FF4 INTO TABLE ITAB
        FROM EKKO AS P INNER JOIN EKAN AS F
          ON PEBELN = FEBELN.
    Note: A simple SELECT loop is a single database access whose result is passed to the ABAP program line by line. Nested SELECT loops mean that the number of accesses in the inner loop is multiplied by the number of accesses in the outer loop. One should therefore use nested SELECT loops only if the selection in the outer loop contains very few lines or the outer loop is a SELECT SINGLE statement.
    2.     Select all the records in a single shot using into table clause of select statement rather than to use Append statements.
    SELECT * FROM SBOOK INTO SBOOK_WA.
      CHECK: SBOOK_WA-CARRID = 'LH' AND
             SBOOK_WA-CONNID = '0400'.
    ENDSELECT.
    The above code can be much more optimized by the code written below which avoids CHECK, selects with selection list and puts the data in one shot using into table
    SELECT  CARRID CONNID FLDATE BOOKID FROM SBOOK INTO TABLE T_SBOOK
      WHERE SBOOK_WA-CARRID = 'LH' AND
                  SBOOK_WA-CONNID = '0400'.
    3.     When a base table has multiple indices, the where clause should be in the order of the index, either a primary or a secondary index.
    To choose an index, the optimizer checks the field names specified in the where clause and then uses an index that has the same order of the fields. In certain scenarios, it is advisable to check whether a new index can speed up the performance of a program. This will come handy in programs that access data from the finance tables.
    4.     For testing existence, use Select.. Up to 1 rows statement instead of a Select-Endselect-loop with an Exit. 
    SELECT * FROM SBOOK INTO SBOOK_WA
      UP TO 1 ROWS
      WHERE CARRID = 'LH'.
    ENDSELECT.
    The above code is more optimized as compared to the code mentioned below for testing existence of a record.
    SELECT * FROM SBOOK INTO SBOOK_WA
        WHERE CARRID = 'LH'.
      EXIT.
    ENDSELECT.
    5.     Use Select Single if all primary key fields are supplied in the Where condition .
    If all primary key fields are supplied in the Where conditions you can even use Select Single.
    Select Single requires one communication with the database system, whereas Select-Endselect needs two.
    Select Statements SQL Interface
    1.     Use column updates instead of single-row updates
    to update your database tables.
    SELECT * FROM SFLIGHT INTO SFLIGHT_WA.
      SFLIGHT_WA-SEATSOCC =
        SFLIGHT_WA-SEATSOCC - 1.
      UPDATE SFLIGHT FROM SFLIGHT_WA.
    ENDSELECT.
    The above mentioned code can be more optimized by using the following code
    UPDATE SFLIGHT
           SET SEATSOCC = SEATSOCC - 1.
    2.     For all frequently used Select statements, try to use an index.
    SELECT * FROM SBOOK CLIENT SPECIFIED INTO SBOOK_WA
      WHERE CARRID = 'LH'
        AND CONNID = '0400'.
    ENDSELECT.
    The above mentioned code can be more optimized by using the following code
    SELECT * FROM SBOOK CLIENT SPECIFIED INTO SBOOK_WA
      WHERE MANDT IN ( SELECT MANDT FROM T000 )
        AND CARRID = 'LH'
        AND CONNID = '0400'.
    ENDSELECT.
    3.     Using buffered tables improves the performance considerably.
    Bypassing the buffer increases the network considerably
    SELECT SINGLE * FROM T100 INTO T100_WA
      BYPASSING BUFFER
      WHERE     SPRSL = 'D'
            AND ARBGB = '00'
            AND MSGNR = '999'.
    The above mentioned code can be more optimized by using the following code
    SELECT SINGLE * FROM T100  INTO T100_WA
      WHERE     SPRSL = 'D'
            AND ARBGB = '00'
            AND MSGNR = '999'.
    Select Statements  Aggregate Functions
    •     If you want to find the maximum, minimum, sum and average value or the count of a database column, use a select list with aggregate functions instead of computing the aggregates yourself.
    Some of the Aggregate functions allowed in SAP are  MAX, MIN, AVG, SUM, COUNT, COUNT( * )
    Consider the following extract.
                Maxno = 0.
                Select * from zflight where airln = ‘LF’ and cntry = ‘IN’.
                 Check zflight-fligh > maxno.
                 Maxno = zflight-fligh.
                Endselect.
    The  above mentioned code can be much more optimized by using the following code.
    Select max( fligh ) from zflight into maxno where airln = ‘LF’ and cntry = ‘IN’.
    Select Statements  For All Entries
    •     The for all entries creates a where clause, where all the entries in the driver table are combined with OR. If the number of entries in the driver table is larger than rsdb/max_blocking_factor, several similar SQL statements are executed to limit the length of the WHERE clause.
         The plus
    •     Large amount of data
    •     Mixing processing and reading of data
    •     Fast internal reprocessing of data
    •     Fast
         The Minus
    •     Difficult to program/understand
    •     Memory could be critical (use FREE or PACKAGE size)
    Points to be must considered FOR ALL ENTRIES
    •     Check that data is present in the driver table
    •     Sorting the driver table
    •     Removing duplicates from the driver table
    Consider the following piece of extract
              Loop at int_cntry.
      Select single * from zfligh into int_fligh
      where cntry = int_cntry-cntry.
      Append int_fligh.
                          Endloop.
    The above mentioned can be more optimized by using the following code.
    Sort int_cntry by cntry.
    Delete adjacent duplicates from int_cntry.
    If NOT int_cntry[] is INITIAL.
                Select * from zfligh appending table int_fligh
                For all entries in int_cntry
                Where cntry = int_cntry-cntry.
    Endif.
    Select Statements Select Over more than one Internal table
    1.     Its better to use a views instead of nested Select statements.
    SELECT * FROM DD01L INTO DD01L_WA
      WHERE DOMNAME LIKE 'CHAR%'
            AND AS4LOCAL = 'A'.
      SELECT SINGLE * FROM DD01T INTO DD01T_WA
        WHERE   DOMNAME    = DD01L_WA-DOMNAME
            AND AS4LOCAL   = 'A'
            AND AS4VERS    = DD01L_WA-AS4VERS
            AND DDLANGUAGE = SY-LANGU.
    ENDSELECT.
    The above code can be more optimized by extracting all the data from view DD01V_WA
    SELECT * FROM DD01V INTO  DD01V_WA
      WHERE DOMNAME LIKE 'CHAR%'
            AND DDLANGUAGE = SY-LANGU.
    ENDSELECT
    2.     To read data from several logically connected tables use a join instead of nested Select statements. Joins are preferred only if all the primary key are available in WHERE clause for the tables that are joined. If the primary keys are not provided in join the Joining of tables itself takes time.
    SELECT * FROM EKKO INTO EKKO_WA.
      SELECT * FROM EKAN INTO EKAN_WA
          WHERE EBELN = EKKO_WA-EBELN.
      ENDSELECT.
    ENDSELECT.
    The above code can be much more optimized by the code written below.
    SELECT PF1 PF2 FF3 FF4 INTO TABLE ITAB
        FROM EKKO AS P INNER JOIN EKAN AS F
          ON PEBELN = FEBELN.
    3.     Instead of using nested Select loops it is often better to use subqueries.
    SELECT * FROM SPFLI
      INTO TABLE T_SPFLI
      WHERE CITYFROM = 'FRANKFURT'
        AND CITYTO = 'NEW YORK'.
    SELECT * FROM SFLIGHT AS F
        INTO SFLIGHT_WA
        FOR ALL ENTRIES IN T_SPFLI
        WHERE SEATSOCC < F~SEATSMAX
          AND CARRID = T_SPFLI-CARRID
          AND CONNID = T_SPFLI-CONNID
          AND FLDATE BETWEEN '19990101' AND '19990331'.
    ENDSELECT.
    The above mentioned code can be even more optimized by using subqueries instead of for all entries.
    SELECT * FROM SFLIGHT AS F INTO SFLIGHT_WA
        WHERE SEATSOCC < F~SEATSMAX
          AND EXISTS ( SELECT * FROM SPFLI
                         WHERE CARRID = F~CARRID
                           AND CONNID = F~CONNID
                           AND CITYFROM = 'FRANKFURT'
                           AND CITYTO = 'NEW YORK' )
          AND FLDATE BETWEEN '19990101' AND '19990331'.
    ENDSELECT.
    1.     Table operations should be done using explicit work areas rather than via header lines.
    READ TABLE ITAB INTO WA WITH KEY K = 'X‘ BINARY SEARCH.
    IS MUCH FASTER THAN USING
    READ TABLE ITAB INTO WA WITH KEY K = 'X'.
    If TAB has n entries, linear search runs in O( n ) time, whereas binary search takes only O( log2( n ) ).
    2.     Always try to use binary search instead of linear search. But don’t forget to sort your internal table before that.
    READ TABLE ITAB INTO WA WITH KEY K = 'X'. IS FASTER THAN USING
    READ TABLE ITAB INTO WA WITH KEY (NAME) = 'X'.
    3.     A dynamic key access is slower than a static one, since the key specification must be evaluated at runtime.
    4.     A binary search using secondary index takes considerably less time.
    5.     LOOP ... WHERE is faster than LOOP/CHECK because LOOP ... WHERE evaluates the specified condition internally.
    LOOP AT ITAB INTO WA WHERE K = 'X'.
    ENDLOOP.
    The above code is much faster than using
    LOOP AT ITAB INTO WA.
      CHECK WA-K = 'X'.
    ENDLOOP.
    6.     Modifying selected components using “ MODIFY itab …TRANSPORTING f1 f2.. “ accelerates the task of updating  a line of an internal table.
    WA-DATE = SY-DATUM.
    MODIFY ITAB FROM WA INDEX 1 TRANSPORTING DATE.
    The above code is more optimized as compared to
    WA-DATE = SY-DATUM.
    MODIFY ITAB FROM WA INDEX 1.
    7.     Accessing the table entries directly in a "LOOP ... ASSIGNING ..." accelerates the task of updating a set of lines of an internal table considerably
    Modifying selected components only makes the program faster as compared to Modifying all lines completely.
    e.g,
    LOOP AT ITAB ASSIGNING <WA>.
      I = SY-TABIX MOD 2.
      IF I = 0.
        <WA>-FLAG = 'X'.
      ENDIF.
    ENDLOOP.
    The above code works faster as compared to
    LOOP AT ITAB INTO WA.
      I = SY-TABIX MOD 2.
      IF I = 0.
        WA-FLAG = 'X'.
        MODIFY ITAB FROM WA.
      ENDIF.
    ENDLOOP.
    8.    If collect semantics is required, it is always better to use to COLLECT rather than READ BINARY and then ADD.
    LOOP AT ITAB1 INTO WA1.
      READ TABLE ITAB2 INTO WA2 WITH KEY K = WA1-K BINARY SEARCH.
      IF SY-SUBRC = 0.
        ADD: WA1-VAL1 TO WA2-VAL1,
             WA1-VAL2 TO WA2-VAL2.
        MODIFY ITAB2 FROM WA2 INDEX SY-TABIX TRANSPORTING VAL1 VAL2.
      ELSE.
        INSERT WA1 INTO ITAB2 INDEX SY-TABIX.
      ENDIF.
    ENDLOOP.
    The above code uses BINARY SEARCH for collect semantics. READ BINARY runs in O( log2(n) ) time. The above piece of code can be more optimized by
    LOOP AT ITAB1 INTO WA.
      COLLECT WA INTO ITAB2.
    ENDLOOP.
    SORT ITAB2 BY K.
    COLLECT, however, uses a hash algorithm and is therefore independent
    of the number of entries (i.e. O(1)) .
    9.    "APPEND LINES OF itab1 TO itab2" accelerates the task of appending a table to another table considerably as compared to “ LOOP-APPEND-ENDLOOP.”
    APPEND LINES OF ITAB1 TO ITAB2.
    This is more optimized as compared to
    LOOP AT ITAB1 INTO WA.
      APPEND WA TO ITAB2.
    ENDLOOP.
    10.   “DELETE ADJACENT DUPLICATES“ accelerates the task of deleting duplicate entries considerably as compared to “ READ-LOOP-DELETE-ENDLOOP”.
    DELETE ADJACENT DUPLICATES FROM ITAB COMPARING K.
    This is much more optimized as compared to
    READ TABLE ITAB INDEX 1 INTO PREV_LINE.
    LOOP AT ITAB FROM 2 INTO WA.
      IF WA = PREV_LINE.
        DELETE ITAB.
      ELSE.
        PREV_LINE = WA.
      ENDIF.
    ENDLOOP.
    11.   "DELETE itab FROM ... TO ..." accelerates the task of deleting a sequence of lines considerably as compared to “  DO -DELETE-ENDDO”.
    DELETE ITAB FROM 450 TO 550.
    This is much more optimized as compared to
    DO 101 TIMES.
      DELETE ITAB INDEX 450.
    ENDDO.
    12.   Copying internal tables by using “ITAB2[ ] = ITAB1[ ]” as compared to “LOOP-APPEND-ENDLOOP”.
    ITAB2[] = ITAB1[].
    This is much more optimized as compared to
    REFRESH ITAB2.
    LOOP AT ITAB1 INTO WA.
      APPEND WA TO ITAB2.
    ENDLOOP.
    13.   Specify the sort key as restrictively as possible to run the program faster.
    “SORT ITAB BY K.” makes the program runs faster as compared to “SORT ITAB.”
    Internal Tables         contd…
    Hashed and Sorted tables
    1.     For single read access hashed tables are more optimized as compared to sorted tables.
    2.      For partial sequential access sorted tables are more optimized as compared to hashed tables
    Hashed And Sorted Tables
    Point # 1
    Consider the following example where HTAB is a hashed table and STAB is a sorted table
    DO 250 TIMES.
      N = 4 * SY-INDEX.
      READ TABLE HTAB INTO WA WITH TABLE KEY K = N.
      IF SY-SUBRC = 0.
      ENDIF.
    ENDDO.
    This runs faster for single read access as compared to the following same code for sorted table
    DO 250 TIMES.
      N = 4 * SY-INDEX.
      READ TABLE STAB INTO WA WITH TABLE KEY K = N.
      IF SY-SUBRC = 0.
      ENDIF.
    ENDDO.
    Point # 2
    Similarly for Partial Sequential access the STAB runs faster as compared to HTAB
    LOOP AT STAB INTO WA WHERE K = SUBKEY.
    ENDLOOP.
    This runs faster as compared to
    LOOP AT HTAB INTO WA WHERE K = SUBKEY.
    ENDLOOP.

  • Auto numbering Column id and filter this lookup id in another list based on status="active"

    Hi,
    I am trying to autonumbeirng the column id with default column ID. But it is not reset if i delete the list item. Also i want this id in another column which have status="Active". How i will do this?
    Thanks in Advance.
    Roopesh

    Hi,
    According to your description, my understanding is that you want to reset the column ID when you delete the list item and then you want to filter the id in another list based on status.
    For resetting column id, there is no direct way to achieve it. I suggest you can save the list as a template and recreate the list. ID columns will always keep incrementing and will never be reused.
    Here is a similar thread about reset column ID for your reference:
    https://social.technet.microsoft.com/Forums/sharepoint/en-US/848a3d73-6273-45fa-806f-96312a4d71d1/is-there-anyway-to-reset-the-default-id-number-that-sharepoint-gives-to-an-item-back-to-1?forum=sharepointgeneralprevious
    For filtering look up field, here are some detailed demos for your reference:
    http://filteredlookup.codeplex.com/
    https://social.technet.microsoft.com/Forums/en-US/d23d6e9b-dc7b-4741-8746-dd4bf00b8110/how-to-filter-lookup-column-in-sharepoint-2010
    v
    Thanks
    Best Regards
    Forum Support
    Please remember to mark the replies as answers if they help and unmark them if they provide no help. If you have feedback for TechNet Subscriber Support, contact
    [email protected]
    Jerry Guo
    TechNet Community Support

  • Auto-increment  identity column through procedure in oracle 10g on windows

    Hi,
    I need identity primary key which should be auto increment before while inserting data into table.
    for this i had use sequence and then trigger to increment it.
    but now i need to increment it in Procedure, while my procedure is having code to insert data in same table which has primary key

    Hi,
    SNEHA RK wrote:
    Hi,
    I need identity primary key which should be auto increment before while inserting data into table.
    for this i had use sequence and then trigger to increment it.Right. Some database products have auto-increment columns, and they are really handy. Unfortunately, Oracle does not have auto-increment columns. A sequence is an auto-increment object, and it's the right way to automatically generate unique identifiers, but you need to explicity reference the sequence, either in you DML statements, or in a trigger that will automatically fire before a DML statement.
    but now i need to increment it in Procedure, while my procedure is having code to insert data in same table which has primary keyAre you saying that you need to increment the sequence, completely aside from INSERTing into the table?
    If so, just reference sequence_name.NEXTVAL wherever you want to. In PL/SQL, you can say
    SELECT  sequence_name.NEXTVAL
    INTO    number_variable
    FROM    dual;This works in any version of Oracle, but starting in Oracle 11, you also have the option of referencing te sequence without using dual, or any other table.
    I hope this answers your question.
    If not, post a complete script that people can run to re-create the problem and test their ideas.
    For example:
    -- Here are the table and the seqauence that I created:
    CREATE TABLE table_x ...
    CREATE SEQUENCE ...
    -- Here is the BEFORE INSERT trigger I wrote:
    CREATE OR REPLACE TRIGGER ...
    -- The trigger works exactly how I want it to in statements like this:
    INSERT INTO table_x ...
    -- So there are no problems (that I know of) with anything up to this point.
    -- Now I want to use the same sequence to ...
    -- so that when I execute a statement like this
    -- then the next time  I add a new row to the orginal table, like this
    INSERT INTO table_x ...
    -- then the contents of table_x should be ... because ...

Maybe you are looking for

  • I want to show labels having images one by one in Panel

    i want to show labels having images one by one in Panel through a while loop... I made an ImagIcon array. It doesn't work properly. It shows only first image while the variable is incrementing. :( This is my code...(Plz check it....) import java.awt.

  • Screen Sharing: iMac -- 2010 MBP 17"?

    I am thinking of buying a 27" iMac to run FCP andI wish to use my old 2010 MBP 17" laptop as a second monitor. Can I use Screen Sharing to do this?

  • Web Client - recurring activities creation

    Hi,     I'm enquiring is it possible to create recurring activities in the CRM 2007 Web Client  i.e the setting up of a recurring customer visit that is on a repeat schedule. If this possible, how can this be done. Thanks in advance, Dan

  • TopLink and JBoss

    Hi everybody, I have a weird problem. I had recently completed SRDemo ADF tutorial, everything run fined, no problem. Out of curiosity to see how the things are running JBoss, I try to deploy JBoss. After long series of problem, I come this final one

  • Pages same name in webbrowser

    Hi, i've made a website in iWeb and when I open the site in a webbrowser, every page has a different name. Like (photo1, photo2, photo3 etc.) I want for all my pages the same name. Is this possible in iWeb, or do I have to put a file in my public fol