Calculating a record length of a table

Hi All,
In SAP 4.6C Oracle 9g I need to find a record length of a table.For that I am using :
Table name is ABC.
Tablespace in KBytes of ABC    X
Total no records in ABC  Y
Single record length in Kbytes (Z) =  Tablespace (X) / Total no of records(Y)
I would like to know weather is this the correct way to calculate in approximation.I would also like to know any other methods of knowing it.
Any inputs are appreciated.
Thanks,
Priya.

Hello,
>> I know that after major deletion frm db its necessary to do reorganization to enhance the db utilization.
Not mandatory ... it depends on many factors...
>> Pls help me to understand your statement that freed space isnt used by next entries.
It maybe not used for the next inserts... that depends on your tablespace (if it uses the ASMM feature) and essentially on the following parameters
- PCTUSED
- PCTFREE
Oracle Link: http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/logical.htm
=> The PCTFREE parameter sets the minimum percentage of a data block to be reserved as free space for possible updates to rows that already exist in that block
=> The PCTUSED parameter sets the minimum percentage of a block that can be used for row data plus overhead before new rows are added to the block. After a data block is filled to the limit determined by PCTFREE, Oracle Database considers the block unavailable for the insertion of new rows until the percentage of that block falls beneath the parameter PCTUSED. Until this value is achieved, Oracle Database uses the free space of the data block only for updates to rows already contained in the data block.
Both parameters are used in a NON-ASSM tablespace and with an ASSM tablespace only PCTFREE is used.
Regards
Stefan

Similar Messages

  • Maximum record length in internal table?

    Is there a maximum record length in an internal table?  Please note:  My question is NOT related to table space.  I'm referring only to the length of an individual record (A.K.A. row length).
    I am using a work area to insert data into an internal table.  Both the work area and internal table are defined by the same structure.
    The structure has a total length of 672 bytes.  For the sake of this discussion I'll point out that at the end of the structure, bytes 669, 670, 671, and 672 are four separate fields of 1 character each.
    When viewing the work area record in the debugger I'm seeing all the fields and all the values.  When viewing the internal table in the debugger after a record is inserted, the internal table ends with the field defined at Byte 670.  The internal table does not include the two fields defined at Bytes 671 and 672.
    Am I to assume from the above explanation that the length of a record ( A.K.A. row) in an internal table cannot exceed 670 bytes?
    Thank you.

    Manish,
    False alarm!  While, technically, you didn't answer my question, your request for code ended up helping me answer my own question.
    To provide you with some code I wrote a simple test program using the record layout referred to above, with a DO loop to put some records into the internal table, followed by a LOOP AT, with accompanying WRITE statements to display the contents of the internal table and demonstrate that the last two fields weren't being stored.
    However, when I ran the test program, the last two fields were being displayed.
    It was at that point, when stepping through the debugger that I noticed the scroll arrows above the last column of my internal table that allowed me to scroll to the right and see my final two fields.
    Apparently, because of the large number of fields in my internal table I had reached the default display length of the debugger.  While I was obviously aware of the scroll bar found at the bottom of the display, I had never worked with an internal table of that width in the past and hadn't even noticed the scroll arrows above the last column before.
    Thanks for taking the time to respond helping me get to the solution.

  • Capture average Record length

    Dear,
    Besides the dba_tab_columns view which can report the average column length in a table, are there any other views that can report the average record length in a table (i.e., average record length is the acutal bytes occupied by all records in that table divided by number of records.)?
    I also assume that there is no need to turn on statistics to store the average column length in the dba_tab_columns view. Is it right?
    Thanks

    Hi,
    AFAIK, DML is just manuplating the transaction records with in the table, how we can expect Optimizer to update stats of the table @each and every transaction, if that is the case, think of the Situatin where "N" number of users working on the DB, with parallel/ shared session on one single Objects or different objects and if you compared the maxtrans of particular objecti in DB with sessions transactions - then definitely the I/O is going to impact and there would be bottle neck, so looking into that, the the Optimizer automatically manage the stats instead based % of changes in transaction rate on tables (Objects) changes.
    If you want to changem then I think alternatives are there, create a trigger where execute the job to run immedaitely to correct stat or else your custom code to update stat- but it not suggested performance would be cause on DB.
    HTH
    - Pavan Kumar N
    Oracle 9i/10g - OCP
    http://oracleinternals.blogspot.com/

  • Calcullating no. of records in an internal table based on condition

    Hi,
    i have several records in an internal table. i need to calculate the number of records which meets a condition. is there any simple logic to find the records which meet the required criteria apart from looping into the internal table.
    your help would be appreciated.
    Thanks,
    kranthi.

    Hi,
    U can use sy-dbcnt after the select querry.
    DBCNT  Number of elements in edited dataset with DB operations
    WRITE: /12 'Number of selected records:', SY-DBCNT CENTERED.
    REPORT ZZZ_TEST1 .
    Tables: mara.
    Types: begin of ty_mara,
           matnr like mara-matnr,
          end of ty_mara.
    DATA: i_mara TYPE STANDARD TABLE OF ty_mara.
    DATA: v_cnt like sy-dbcnt.
    SELECT-OPTIONS: s_matnr FOR MARA-matnr.
    SELECT matnr from mara into table i_mara.
    if sy-subrc = 0.
    v_cnt = sy-dbcnt.
    WRITE: /12 'Number of selected records:', v_cnt CENTERED.
    endif.
    Hope this helps u.
    Thanks & Regards,
    Judith.

  • Calculating average time from two records from the same table.

    Hi all
    I need to calculate the average time between two events that are recorded in the same table.
    The table is TMS_MESSAGE_AUDIT_LOG
    MESSAGE_ID VARCHAR2(16 BYTE) NOT NULL,
    MESSAGE_VERSION NUMBER(2) NOT NULL,
    CREATE_TM VARCHAR2(18 BYTE) NOT NULL,
    MESSAGE_STATUS VARCHAR2(30 BYTE),
    TRANSACTION_TYPE_NM VARCHAR2(30 BYTE),
    MESSAGE_TP VARCHAR2(3 BYTE),
    WORKFLOW_OBJECT VARCHAR2(30 BYTE) NOT NULL,
    WORKFLOW_REQUEST VARCHAR2(30 BYTE) NOT NULL,
    WORKFLOW_RETURN_CD VARCHAR2(30 BYTE) NOT NULL,
    AUDIT_ACTION VARCHAR2(255 BYTE),
    LAST_UPDATE_USER_LOGON_ID VARCHAR2(12 BYTE),
    LOCAL_TM VARCHAR2(18 BYTE) NOT NULL,
    LOCAL_TIME_ZN_NM VARCHAR2(70 BYTE) NOT NULL,
    LOCAL_DAYLIGHT_IN CHAR(1 BYTE) NOT NULL,
    FPRINT VARCHAR2(30 BYTE)
    What i now need is
    When the MESSAGE_ID is the same i need have the average time between when the MESSAGE_STATUS is AA and BB ( I need the time out of the CREATE_TM field )
    And this for every 15 minutes interval.
    Because this table will become BIG millions and millions of records it needs to be fast.
    Can anybody help me.
    Marcel

    Something like this?
    CREATE TABLE wr_test
    ( message_id                 VARCHAR2(16 BYTE) NOT NULL
    , message_version            NUMBER(2) NOT NULL  -- Assumption: Acknowledged ver > Received ver
    , create_tm                  VARCHAR2(18 BYTE) NOT NULL
    , message_status             VARCHAR2(30 BYTE)
    , transaction_type_nm        VARCHAR2(30 BYTE)
    , workflow_object            VARCHAR2(30 BYTE) DEFAULT 'x' NOT NULL
    , workflow_request           VARCHAR2(30 BYTE) DEFAULT 'x' NOT NULL
    , workflow_return_cd         VARCHAR2(30 BYTE) DEFAULT 'x' NOT NULL
    , audit_action               VARCHAR2(255 BYTE)
    , last_update_user_logon_id  VARCHAR2(12 BYTE)
    , local_tm                   VARCHAR2(18 BYTE) NOT NULL
    , local_time_zn_nm           VARCHAR2(70 BYTE) DEFAULT 'GMT' NOT NULL
    , local_daylight_in          CHAR(1 BYTE) DEFAULT 'x' NOT NULL );
    INSERT ALL
    INTO   wr_test
           ( message_id
           , message_version
           , create_tm
           , message_status
           , local_tm )
    VALUES ( message_id
           , 1
           , create_tm
           , '(Receive)'
           , TO_CHAR(local_tm,'YYYYMMDD HH24:MI:SS') )
    INTO   wr_test
           ( message_id
           , message_version
           , create_tm
           , message_status
           , local_tm )
    VALUES ( message_id
           , 2
           , create_tm
           , 'Wait CLSB Ack'
         , TO_CHAR
           ( local_tm + NUMTODSINTERVAL(DBMS_RANDOM.VALUE(0,2e5),'SECOND')
           , 'YYYYMMDD HH24:MI:SS' ) )
    SELECT ROWNUM AS message_id
         , TO_CHAR(SYSDATE,'YYYYMMDD HH24:MI:SS') AS create_tm
         , DATE '2000-01-01' + DBMS_RANDOM.VALUE(0,3) AS local_tm
    FROM dual CONNECT BY ROWNUM < 100000;
    WITH src AS
         ( SELECT message_id
                , message_status
                , message_version
                , TO_DATE(SUBSTR(local_tm,1,17),'YYYYMMDD HH24:MI:SS') AS dt
                , TO_DATE(SUBSTR(local_tm,1,8),'YYYYMMDD') AS dt_day
                , TO_CHAR(TO_DATE(SUBSTR(local_tm,10,8),'HH24:MI:SS'),'SSSSS') AS dt_sec
           FROM   wr_test
           WHERE  message_status IN ('(Receive)','Wait CLSB Ack') )
    SELECT dt_day + NUMTODSINTERVAL(period,'SECOND') AS dt
         , NUMTODSINTERVAL(AVG(elapsed),'DAY') AS avg_elapsed
         , NUMTODSINTERVAL(MIN(elapsed),'DAY') AS min_elapsed
         , NUMTODSINTERVAL(MAX(elapsed),'DAY') AS max_elapsed
         , COUNT(*)
    FROM   ( SELECT message_id
                  , message_status
                  , dt_day
                  , TRUNC(dt_sec/300)*300 AS period
                  , LEAD(dt) OVER (PARTITION BY message_id ORDER BY message_version) AS ack_dt
                  , LEAD(dt) OVER (PARTITION BY message_id ORDER BY message_version) - dt AS elapsed
             FROM   src ) cal
    WHERE  cal.message_status = '(Receive)'
    GROUP BY dt_day, period
    ORDER BY 1;Replace "wr_test" with "tms_message_audit_log" in the WITH subquery to test on your data.

  • How to load unicode data files with fixed records lengths?

    Hi!
    To load unicode data files with fixed records lengths (in terms of charachters and not of bytes!) using SQL*Loader manually, I found two ways:
    Alternative 1: one record per row
    SQL*Loader control file example (without POSITION, since POSITION always refers to bytes!)<br>
    LOAD DATA
    CHARACTERSET UTF8
    LENGTH SEMANTICS CHAR
    INFILE unicode.dat
    INTO TABLE STG_UNICODE
    TRUNCATE
    A CHAR(2) ,
    B CHAR(6) ,
    C CHAR(2) ,
    D CHAR(1) ,
    E CHAR(4)
    ) Datafile:
    001111112234444
    01NormalDExZWEI
    02ÄÜÖßêÊûÛxöööö
    03ÄÜÖßêÊûÛxöööö
    04üüüüüüÖÄxµôÔµ Alternative2: variable length records
    LOAD DATA
    CHARACTERSET UTF8
    LENGTH SEMANTICS CHAR
    INFILE unicode_var.dat "VAR 4"
    INTO TABLE STG_UNICODE
    TRUNCATE
    A CHAR(2) ,
    B CHAR(6) ,
    C CHAR(2) ,
    D CHAR(1) ,
    E CHAR(4)
    ) Datafile:
    001501NormalDExZWEI002702ÄÜÖßêÊûÛxöööö002604üuüüüüÖÄxµôÔµ Problems
    Implementing these two alternatives in OWB, I encounter the following problems:
    * How to specify LENGTH SEMANTICS CHAR?
    * How to suppress the POSITION definition?
    * How to define a flat file with variable length and how to specify the number of bytes containing the length definition?
    Or is there another way that can be implemented using OWB?
    Any help is appreciated!
    Thanks,
    Carsten.

    Hi Carsten
    If you need to support the LENGTH SEMANTICS CHAR clause in an external table then one option is to use the unbound external table and capture the access parameters manually. To create an unbound external table you can skip the selection of a base file in the external table wizard. Then when the external table is edited you will get an Access Parameters tab where you can define the parameters. In 11gR2 the File to Oracle external table can also add this clause via an option.
    Cheers
    David

  • How to record the records deleted in a table

    Hi Experts
    I want to run a report as a batch which should deleted the records
    which are sysdate - 60 and The report should log the number of records deleted
    from each table at End Of Run.
    Criteria for selecting records to be deleted are as follows:
    1.     ZINT_DATA
    u2022     ZINT_DATA.CREATED_ON <= (Today u2013 60 Days)
                   and ZINT_DATA.STATUS = u2018OKu2019
    So I want to create a table for log history recorded as
    Delete Date         Log description
    01.01.2008        1500 rows deleted
    30.03.2008        2000 rows deleted.
    30.04.2008        300  rows deleted.
    Eg The table are ZINT_DATA.
    The report starts like this
    REPORT z_eslp_command.
    DATA:
      fs_zint_data TYPE zint_data.
    DATA:
      t_zint_data TYPE
              TABLE OF
                      ZINT_DATA.
    START-OF-SELECTION.
    SELECT *
       FROM ZINT_DATA
       INTO TABLE t_ZINT_DATA PACKAGE SIZE 10000.
    ENDSELECT.
    LOOP AT t_zint_data INTO fs_zint_data.
    INSERT INTO ZINT_DATA_DEL
          VALUES fs_zint_data.
    select count(*) from zint_data_del.
    ENDLOOP.
    IF sy-subrc EQ 0.
      WRITE:
        'DATA INSERTED FROM ZINT_DATA into ZINT_DATA_DEL'.
    ENDIF.
    But Instead of creating another table , I want only log to be recorded as described.
    Thanks
    Regards
    Piroz

    Hi Kiran
    See the final modification of the report but I am getting an error as
    Field " Corresponding_fields" is unknown, it is neithere in one of the specified tables nor defined by a
    DATA statement, but I have already created an internal table itab1 , could you check and revert with the correction.
    REPORT  ZSD1DELETION                .
    TYPE-POOLS:SLIS.
    *Used in ZSDI_INTERFACE1 Program.
    TABLES:ZINT_DATA_DEL  . 
    *DATA: BEGIN OF ITAB1 OCCURS 0.
    *DATA: SL_NO TYPE SY-TABIX.
         INCLUDE STRUCTURE zint_data_del.
    *DATA:END OF ITAB1.
    DATA: BEGIN OF ITAB1 occurs 0 ,
          MANDT type zint_data_del-mandt,
          ZINT_ID type zint_data_del-zint_id,
          ZINT_TY type zint_data_del-zint_ty,
          CREATED_ON type zint_data_del-created_on,
          KEY_VAL type zint_data_del-key_val,
          SEQUENCE type zint_data_del-sequence,
          STATUS type zint_data_del-status,                 
          LENGTH type zint_data_del-length,           
          RAW_DATA type zint_data_del-raw_data,       
          end of itab1.
    *DATA: i_data TYPE TABLE OF ITAB1, " internal table
    *wa_data TYPE ITAB1. " work area
    DATA:LINE1(10) TYPE C,
         LINE2(10) TYPE C,
         date1(10) type c,
         date2(10) type c,
         name1(60),
         string1(100),
         title1(65),
         title2(100) type c,
         FNAME TYPE STRING.
    *Declarations for ALV
    DATA:itfieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE.
    DATA:itrepid TYPE sy-repid.
    itrepid = sy-repid.
    DATA:itevent TYPE slis_t_event.
    DATA:itlistheader TYPE slis_t_listheader.
    DATA:walistheader LIKE LINE OF itlistheader.
    DATA:itlayout TYPE slis_layout_alv.
    DATA:top TYPE slis_formname.
    DATA:itsort TYPE slis_t_sortinfo_alv WITH HEADER LINE.
    SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
    *PARAMETERS:P_WERKS LIKE BSEG-WERKS.
    SELECT-OPTIONS: S_DATE FOR ZINT_DATA_DEL-CREATED_ON OBLIGATORY.              
    SELECTION-SCREEN END OF BLOCK B1.
    *Validations w.r.t the Date
    AT SELECTION-SCREEN ON S_DATE.
    IF S_DATE IS INITIAL.
    MESSAGE 'Enter the Date' type 'E'.
    *Records from 2007 can't be deleted.
    ELSEIF S_DATE-LOW+0(4) >= '2007' AND
           S_DATE-HIGH+0(4) >= '2007'.
    MESSAGE 'Records from the Year 2007 cannot  be Deleted' type 'E'.
    ENDIF.
    CONCATENATE  s_DATE-low6(2) '.' s_DATE-low4(2) '.' s_DATE-low+0(4)
    INTO date1.
    CONCATENATE  s_DATE-high6(2) '.' s_DATE-high4(2) '.' s_DATE-high+0(4)
    INTO date2.
    PERFORM GETDATA.
    *&      Form  DOWNLOAD
          text
    -->  p1        text
    <--  p2        text
    form GETDATA.
    SELECT * FROM ZINT_DATA_DEL
             INTO CORRESPONDING_FIELDS OF TABLE ITAB1
             WHERE CREATED_ON IN S_DATE.
    IF ITAB1[] IS NOT INITIAL.
    DESCRIBE TABLE ITAB1 LINES LINE1.
    PERFORM DELETION.
    PERFORM ALV.
    ELSE.
    MESSAGE 'No Data' type 'S'.
    ENDIF.
    endform.                    " GETDATA
    *&      Form  DELETION
          text
    -->  p1        text
    <--  p2        text
    form DELETION .
    DELETE FROM ZINT_DATA_DEL WHERE CREATED_ON IN S_DATE.
    endform.                    " DELETION
    *&      Form  alv
          Fieldcatalog for ALV Report
    FORM alv.
    LOOP AT ITAB1.
    ITAB1-SL_NO = SY-TABIX.
    MODIFY ITAB1.
    ENDLOOP.
      DEFINE m_fieldcat.
        itfieldcat-fieldname = &1.
        itfieldcat-col_pos = &2.
        itfieldcat-seltext_l = &3.
        itfieldcat-do_sum = &4.
        itfieldcat-outputlen = &5.
        itfieldcat-edit = &6.
        append itfieldcat to itfieldcat.
        clear itfieldcat.
      END-OF-DEFINITION.
      m_fieldcat 'MANDT'     '' 'Client' '' 03 ''.
      m_fieldcat 'ZINT_ID' ''   'Id' '' 10 ''.
      m_fieldcat 'ZINT_TY'   '' 'Type.'  '' 05 ''.
      m_fieldcat 'CREATED_ON' '' 'Date Created on' '' 25 ''.
      m_fieldcat 'KEY_VAL'       '' 'key value'  '' 04  ''.
      m_fieldcat 'SEQUENCE' '' 'sequence' '' 06 ''  .
      m_fieldcat 'STATUS'   '' 'status.' '' 10 ''.
      m_fieldcat 'LENGTH'    '' 'Length.' '' 18 ''.
      m_fieldcat 'RAW_DATA'    '' 'Raw Data' '' 15 '' .
      itlayout-zebra = 'X'.
      itlayout-colwidth_optimize = 'X'.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
          EXPORTING
            i_callback_program      = sy-repid
            is_layout               = itlayout
          i_callback_user_command =  ' '
            i_callback_top_of_page  = 'TOP'
            it_fieldcat             = itfieldcat[]
            i_save                  = 'A'
         is_variant              = ITVARIANT
            it_events               = itevent[]
         is_print                = ITPRINTPARAMS
            it_sort                 = itsort[]
          TABLES
            t_outtab                = itAB1
            EXCEPTIONS
            program_error           = 1
            OTHERS                  = 2.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.
    ENDFORM.                    "alv
    *&      Form  TOP
        Top of page for ALV Report
    FORM top.
       CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
         EXPORTING
            i_list_type           = 0
         IMPORTING
            et_events             = itevent
    EXCEPTIONS
      LIST_TYPE_WRONG       = 1
      OTHERS                = 2
      IF sy-subrc  0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
    string1 = 'Records from'.
    CONCATENATE string1 date1 'to' date2 INTO title1
    SEPARATED BY space.
    walistheader-typ = 'H'.
    walistheader-info = title1.
    APPEND walistheader TO itlistheader.
    CONCATENATE 'Records Deleted' '-' LINE1 INTO title2.
    walistheader-typ = 'H'.
    walistheader-info = title2.
    APPEND walistheader TO itlistheader.
      CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
        EXPORTING
          it_list_commentary      = itlistheader
        I_LOGO                   = ''.
        I_END_OF_LIST_GRID       =
       ENDIF.
      CLEAR itlistheader.
    ENDIF.
    ENDFORM.                    "TOP
    Regrds
    Piroz

  • A sample code to check records of a system table?

    hi ABAP4 experts,
    We are pretty new at ABAP4.  We would be appreciated if you can provide a sample code to check how many records and calculate a total amount for a specific field, e.g., DMBTR in a system table, e.g., BSEG.  Note: there is no any selection for this table BSEG, we just want to get the total record count in this table and also the total amount for a specific field e.g. DMBTR in this table.
    Do we have to use an internal table to transfer all the records of BSEG into the internal table to get the result?
    We will give you reward points!

    Hi Kevin,
    Using SUM directly in SQL will NOT work for table BSEG because BSEG is pool table. You will get an ABAP error.
    "Aggregate functions and the addition DISTINCT are not supported in field lists for pooled and cluster tables".
    You need an internal table to transfer all data from BSEG and perform calculation for count and sum.
    Concerning about performance running perhaps you can code something like this.
    REPORT ZZFLTEST NO STANDARD PAGE HEADING.
    TABLES: BSEG.
    DATA: CURS          TYPE CURSOR,
          PACKAGE_SIZE  LIKE RMCS4-MC_CM_PSIZE VALUE '10000'.                                                                               
    DATA: BEGIN OF I_BSEG OCCURS 0,
            BELNR TYPE BSEG-BELNR,
            BURKS TYPE BSEG-BURKS,
            GJAHR TYPE BSEG-GJAHR,       
            BUZEI TYPE BSEG-BUZEI,       
            DMBTR TYPE BSEG-DMBTR,
            SHKZG TYPE BSEG-SHKZG.
    DATA: END OF I_BSEG.
    DATA: TOT_DMBTR TYPE BSEG-DMBTR,
          TOT_REC   TYPE I.
    SELECTION-SCREEN BEGIN OF BLOCK B01 WITH FRAME TITLE TEXT-001.
    SELECTION-SCREEN SKIP.
    PARAMETERS: P_SIZE LIKE RMCS4-MC_CM_PSIZE DEFAULT '10000'.
    SELECTION-SCREEN SKIP.
    SELECTION-SCREEN END OF BLOCK B01.
    START-OF-SELECTION.
      PACKAGE_SIZE = P_SIZE.
      OPEN CURSOR WITH HOLD CURS FOR
      SELECT BELNR BURKS GJAHR BUZEI DMBTR SHKZG
      FROM BSEG
      WHERE BELNR <> SPACE
        AND BURKS <> SPACE
        AND GJAHR <> SPACE
        AND BUZEI <> SPACE.
    *Fetch internal table I_BSEG for every 10000 records.
      DO.
        FETCH NEXT CURSOR CURS
        INTO TABLE I_BSEG PACKAGE SIZE PACKAGE_SIZE.
        IF SY-SUBRC <> 0.
          EXIT.
        ENDIF.
      ENDDO.
      CLOSE CURSOR CURS.
      LOOP AT I_BSEG.
        TOT_REC = TOT_REC + 1.
        IF I_BSEG-SHKZG = 'S'.
          TOT_DMBTR = TOT_DMBRT + I_BSEG-DMBTR * -1.
        ELSE.
          TOT_DMBTR = TOT_DMBTR + I_BSEG-DMBTR.
        ENDIF.
      ENDLOOP.
      WRITE: / 'TOTAL BSEG-DMBTR:', TOT_DMBTR,
             / 'TOTAL RECORD:    ', TOT_REC.
    END-OF-SELECTION.
    Hope this will help.
    Regards,
    Ferry Lianto

  • SQL Loader-704: Internal error: Maximum record length must be = [10000000]

    Hi,
    running SQL*Loader (Release 8.1.7.2.1) causes an error "SQL*Loader-704: Internal error: Maximum record length must be <= [10000000]". This error occurs when SQLLoader is trying to load several thousand records into a database table. Each record is less than 250 bytes in length.
    Any idea what could cause the problem?
    Thanks in advance!
    Ingo
    And here's an extract from the log file generated by SQLLoader :
    Number to load: ALL
    Number to skip: 0
    Errors allowed: 50
    Bind array: 1360 rows, maximum of 10485760 bytes
    Continuation: none specified
    Path used: Conventional
    Table "SYSTEM"."BASICPROFILE$1", loaded from every logical record.
    Insert option in effect for this table: APPEND
    TRAILING NULLCOLS option in effect
    Column Name Position Len Term Encl Datatype
    UUID FIRST * O(X07) CHARACTER
    DOMAINID NEXT * O(X07) CHARACTER
    LASTMODIFIED NEXT * O(X07) DATE DD/MM/YYYY HH24:MI:SS
    ANNIVERSARY NEXT * O(X07) CHARACTER
    BIRTHDAY NEXT * O(X07) CHARACTER
    COMPANYNAME NEXT * O(X07) CHARACTER
    DESCRIPTION NEXT * O(X07) CHARACTER
    FIRSTNAME NEXT * O(X07) CHARACTER
    COMPANYNAMETRANSCRIPTION NEXT * O(X07) CHARACTER
    FIRSTNAMETRANSCRIPTION NEXT * O(X07) CHARACTER
    GENDER NEXT * O(X07) CHARACTER
    HOBBIES NEXT * O(X07) CHARACTER
    HONORIFIC NEXT * O(X07) CHARACTER
    JOBTITLE NEXT * O(X07) CHARACTER
    KEYWORDS NEXT * O(X07) CHARACTER
    LASTNAME NEXT * O(X07) CHARACTER
    LASTNAMETRANSCRIPTION NEXT * O(X07) CHARACTER
    NICKNAME NEXT * O(X07) CHARACTER
    PREFERREDLOCALE NEXT * O(X07) CHARACTER
    PREFERREDCURRENCY NEXT * O(X07) CHARACTER
    PROFESSION NEXT * O(X07) CHARACTER
    SECONDLASTNAME NEXT * O(X07) CHARACTER
    SECONDNAME NEXT * O(X07) CHARACTER
    SUFFIX NEXT * O(X07) CHARACTER
    TITLE NEXT * O(X07) CHARACTER
    CONFIRMATION NEXT * O(X07) CHARACTER
    DEFAULTADDRESSID NEXT * O(X07) CHARACTER
    BUSINESSPARTNERNO NEXT * O(X07) CHARACTER
    TYPECODE NEXT * O(X07) CHARACTER
    OCA NEXT * O(X07) CHARACTER
    SQL*Loader-704: Internal error: Maximum record length must be <= [10000000]

    As a second guess, the terminator changes or goes missing at some point in the data file. If you are running on *NIX, try wc -l data_file_name.  This will give a count of the number of lines (delimited by CHR(10) ) that are in the file.  If this is not close to the number you expected, then that is your problem.
    You could also try gradually working through the data file loading 100 records, then 200, then 300 etc. to see where it starts to fail.
    HTH
    John

  • Length ogf Internal Table

    Hi,
      I am using GUI_UPLOAD to upload the file from presentation server to my internal table. My problem is that the one of the records of testfile is 3000 in length. The internal table is not showing all the data from the testfile. is there any limitation to the record length of an internal table??
    DATA: FILENAME(100) VALUE   'C:\testfile.txt',
          G_FILE TYPE STRING.
    DATA: BEGIN OF T_DATATAB OCCURS 0,
             LINE(3000) type c,
          END OF T_DATATAB.
    G_FILE = FILENAME.
    CALL FUNCTION 'GUI_UPLOAD'
      EXPORTING
        FILENAME                      = G_FILE
        FILETYPE                      = 'ASC'
      HAS_FIELD_SEPARATOR           = ' '
      HEADER_LENGTH                 = 0
      READ_BY_LINE                  = 'X'
      DAT_MODE                      = ' '
      CODEPAGE                      = ' '
      IGNORE_CERR                   = ABAP_TRUE
      REPLACEMENT                   = '#'
      CHECK_BOM                     = ' '
    IMPORTING
      FILELENGTH                    =
      HEADER                        =
      TABLES
        DATA_TAB                      = T_DATATAB
    EXCEPTIONS
      FILE_OPEN_ERROR               = 1
      FILE_READ_ERROR               = 2
      NO_BATCH                      = 3
      GUI_REFUSE_FILETRANSFER       = 4
      INVALID_TYPE                  = 5
      NO_AUTHORITY                  = 6
      UNKNOWN_ERROR                 = 7
      BAD_DATA_FORMAT               = 8
      HEADER_NOT_ALLOWED            = 9
      SEPARATOR_NOT_ALLOWED         = 10
      HEADER_TOO_LONG               = 11
      UNKNOWN_DP_ERROR              = 12
      ACCESS_DENIED                 = 13
      DP_OUT_OF_MEMORY              = 14
      DISK_FULL                     = 15
      DP_TIMEOUT                    = 16
      OTHERS                        = 17
    IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    Regards,
    SB

    hi,
    are you imitating lsmw direct input program.
    don't include the all structures. only use the required fields which you are going to populate.,
    thanks
    vijay
    check  the below code..
    *& Report  Z__DIRECT__MAT___CREAT                                      *
    REPORT  Z__DIRECT__MAT___CREAT                  .
    INCLUDE Z_INCLUDE_MAT_CREAT.
    *  SELECTION SCREEN
    SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-002.
    PARAMETERS:P_FILE LIKE RLGRAP-FILENAME OBLIGATORY.
    SELECTION-SCREEN END OF BLOCK B1 .
    * AT SELECTION SCREEN
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
      CALL FUNCTION 'F4_FILENAME'
        EXPORTING
          PROGRAM_NAME  = SYST-CPROG
          DYNPRO_NUMBER = SYST-DYNNR
          FIELD_NAME    = 'P_FILE'
        IMPORTING
          FILE_NAME     = P_FILE.
    *START-OF-SELECTION
    START-OF-SELECTION.
    *Perform to upload the data from Presentation Server
      V_FILE = P_FILE.
      PERFORM UPLOAD_DATA.
    *Transfer the Data to the structure BGR00 BMMH1 BMM00
      PERFORM CONVERT_0000.                                     " BGR00
      PERFORM POPULATE_DATA CHANGING BMM00.
      PERFORM POPULATE_DATA CHANGING BMMH1.
    **Looping the flat file data and updating the structures BMM00 & BMMH1
      LOOP AT MATERIAL_MASTER.
    *Writing the Data to the Application Server in a proper Format
        OPEN DATASET C_ZTEST FOR APPENDING IN  TEXT MODE ENCODING
        DEFAULT.
    *Transfer the Data to the structure BMM00
        PERFORM CONVERT_0002.                                   " BMM00
    *Transfer the Data to the structure BMMh1
        PERFORM CONVERT_0003.                                   " BMMH1
    **Closing the dataset after transfering the data
        CLOSE DATASET  C_ZTEST.
      ENDLOOP.     "Endloop of MATERIAL_MASTER
    *END-OF-SELECTION
    END-OF-SELECTION.
    **Calling the Direct Input Program to Create the material
      SUBMIT RMDATIND WITH %%%_R_P = C_X
                        WITH %%%_PHY = C_ZTEST
                        WITH SPERR = C_N.
    *&  Include           Z_INCLUDE_MAT_CREAT                              *
    **Tables Used To Create the Material
    TABLES:
      BGR00,
      BMM00,
      BMMH1.
    DATA:C_ZTEST(60) type c,
         C_X TYPE C,
         C_N TYPE C,
         V_file type string.
    C_ZTEST = 'Ztest.lsmw.conv'(001).
    C_X = 'X'(003).
    C_N = 'N'(004).
    **FILED SYMBOLS
    FIELD-SYMBOLS: <F> .
    **Structure to Hold the Flat File
    data:
      begin of LSMW_MATERIAL_MASTER,
        MATNR(018) type C,  "Material number
        MTART(004) type C,  "Material type
        MBRSH(001) type C,  "Industry sector
        WERKS(004) type C,  "Plant
        MAKTX(040) type C,  "Material description
        DISMM(002) type C,  "Extra Field Added In the Program as it is required
        MEINS(003) type C,  "Base unit of measure
        MATKL(009) type C,  "Material group
        SPART(002) type C,  "Division
        LABOR(003) type C,  "Lab/office
        PRDHA(018) type C,  "Product hierarchy
        MSTAE(002) type C,  "X-plant matl status
        MTPOS_MARA(004) type C,  "Gen item cat group
        BRGEW(017) type C,  "Gross weight
        GEWEI(003) type C,  "Weight unit
        NTGEW(017) type C,  "Net weight
        GROES(032) type C,  "Size/Dimensions
        MAGRV(004) type C,  "Matl grp pack matls
        BISMT(018) type C,  "Old material number
        WRKST(048) type C,  "Basic material
        PROFL(003) type C,  "DG indicator profile
        KZUMW(001) type C,  "Environmentally rlvt
        BSTME(003) type C,  "Order unit
        VABME(001) type C,
        EKGRP(003) type C,  "Purchasing group
        XCHPF(001) type C,  "Batch management
        EKWSL(004) type C,  "Purchasing key value
        WEBAZ(003) type C,  "GR processing time
        MFRPN(040) type C,  "Manufacturer part number
        MFRNR(010) type C,  "Manufacturer number
        VPRSV(001) type C,  "Price control indicator
        STPRS(015) type C,  "Standard price
        BWPRH(014) type C,  "Commercial price1
      end of LSMW_MATERIAL_MASTER.
    **InternalTable to HOld the Flat File Data
    DATA:
      BEGIN OF MATERIAL_MASTER OCCURS 0.
            INCLUDE STRUCTURE LSMW_MATERIAL_MASTER.
    DATA:
      END OF MATERIAL_MASTER.
    *&      Form  upload_data From Presentation Server
    FORM UPLOAD_DATA.
      CALL FUNCTION 'GUI_UPLOAD'
        EXPORTING
          FILENAME                      = V_FILE
         FILETYPE                      = 'ASC'
         HAS_FIELD_SEPARATOR           = 'X'
    *     HEADER_LENGTH                 = 0
    *     READ_BY_LINE                  = 'X'
    *     DAT_MODE                      = ' '
    *     CODEPAGE                      = ' '
    *     IGNORE_CERR                   = ABAP_TRUE
    *     REPLACEMENT                   = '#'
    *   IMPORTING
    *     FILELENGTH                    =
    *     HEADER                        =
        TABLES
          DATA_TAB                      = MATERIAL_MASTER
       EXCEPTIONS
         FILE_OPEN_ERROR               = 1
         FILE_READ_ERROR               = 2
         NO_BATCH                      = 3
         GUI_REFUSE_FILETRANSFER       = 4
         INVALID_TYPE                  = 5
         NO_AUTHORITY                  = 6
         UNKNOWN_ERROR                 = 7
         BAD_DATA_FORMAT               = 8
         HEADER_NOT_ALLOWED            = 9
         SEPARATOR_NOT_ALLOWED         = 10
         HEADER_TOO_LONG               = 11
         UNKNOWN_DP_ERROR              = 12
         ACCESS_DENIED                 = 13
         DP_OUT_OF_MEMORY              = 14
         DISK_FULL                     = 15
         DP_TIMEOUT                    = 16
         OTHERS                        = 17
      IF SY-SUBRC = 0.
        DELETE MATERIAL_MASTER INDEX 1.
      ENDIF.
    ENDFORM.                    "upload_data
    *&    Updating the BGR00 Structure
    FORM CONVERT_0000.                                          " BGR00
    **Opening the Data Set to write the data to Application Server
      OPEN DATASET C_ZTEST FOR OUTPUT IN  TEXT MODE ENCODING DEFAULT
    MOVE: '0' TO BGR00-STYPE,
             'ZTEST' TO BGR00-GROUP,
             SY-MANDT TO BGR00-MANDT,
             SY-UNAME TO BGR00-USNAM,
             'X' TO BGR00-XKEEP,
             '/' TO BGR00-NODATA.
    *Transefering the Data To the Application Server File
      TRANSFER BGR00 TO C_ZTEST.
    *Closing the Dataset after Transfer
      CLOSE DATASET C_ZTEST.
    ENDFORM.                    "convert_0001
    *&     Updating BMM00 Structure
    FORM CONVERT_0002.                                          " BMM00
    * --- BMM00-STYPE
      BMM00-STYPE = '1'.
    * --- BMM00-TCODE
      BMM00-TCODE = 'MM01'.
    * --- BMM00-MATNR
      IF NOT MATERIAL_MASTER-MATNR IS INITIAL.
        BMM00-MATNR = MATERIAL_MASTER-MATNR.
      ELSE.
        BMM00-MATNR = '/'.
      ENDIF.
    * --- BMM00-MBRSH
      IF NOT MATERIAL_MASTER-MBRSH IS INITIAL.
        BMM00-MBRSH = MATERIAL_MASTER-MBRSH.
      ELSE.
        BMM00-MBRSH = '/'.
      ENDIF.
    * --- BMM00-MTART
      IF NOT MATERIAL_MASTER-MTART IS INITIAL.
        BMM00-MTART = MATERIAL_MASTER-MTART.
      ELSE.
        BMM00-MTART = '/'.
      ENDIF.
    * --- BMM00-WERKS
      IF NOT MATERIAL_MASTER-WERKS IS INITIAL.
        BMM00-WERKS = MATERIAL_MASTER-WERKS.
      ELSE.
        BMM00-WERKS = '/'.
      ENDIF.
      BMM00-XEIB1 = 'X'.  " BMM00-xeib1 = '/'.
      BMM00-XEIE1 = 'X'.  " BMM00-xeie1 = '/'.
      BMM00-XEIK1 = 'X'.  " BMM00-xeik1 = '/'.
    **Transfer the data to the Application Server File
      TRANSFER BMM00 TO C_ZTEST.
    ENDFORM.                    "convert_0002
    *&      UPdating BMMH1 Structure
    FORM CONVERT_0003.                                          " BMMH1
    * --- BMMH1-STYPE
      BMMH1-STYPE = '2'.
    * --- BMMH1-MEINS
      IF NOT MATERIAL_MASTER-MEINS IS INITIAL.
        BMMH1-MEINS = MATERIAL_MASTER-MEINS.
      ELSE.
        BMMH1-MEINS = '/'.
      ENDIF.
    * --- BMMH1-MAKTX
      IF NOT MATERIAL_MASTER-MAKTX IS INITIAL.
        BMMH1-MAKTX = MATERIAL_MASTER-MAKTX.
      ELSE.
        BMMH1-MAKTX = '/'.
      ENDIF.
    * --- BMMH1-MATKL
      IF NOT MATERIAL_MASTER-MATKL IS INITIAL.
        BMMH1-MATKL = MATERIAL_MASTER-MATKL.
      ELSE.
        BMMH1-MATKL = '/'.
      ENDIF.
    * --- BMMH1-BISMT
      IF NOT MATERIAL_MASTER-BISMT IS INITIAL.
        BMMH1-BISMT = MATERIAL_MASTER-BISMT.
      ELSE.
        BMMH1-BISMT = '/'.
      ENDIF.
    * --- BMMH1-LABOR
      IF NOT MATERIAL_MASTER-LABOR IS INITIAL.
        BMMH1-LABOR = MATERIAL_MASTER-LABOR.
      ELSE.
        BMMH1-LABOR = '/'.
      ENDIF.
    * --- BMMH1-WRKST
      IF NOT MATERIAL_MASTER-WRKST IS INITIAL.
        BMMH1-WRKST = MATERIAL_MASTER-WRKST.
      ELSE.
        BMMH1-WRKST = '/'.
      ENDIF.
    * --- BMMH1-BRGEW
      IF NOT MATERIAL_MASTER-BRGEW IS INITIAL.
        BMMH1-BRGEW = MATERIAL_MASTER-BRGEW.
      ELSE.
        BMMH1-BRGEW = '/'.
      ENDIF.
    * --- BMMH1-NTGEW
      IF NOT MATERIAL_MASTER-NTGEW IS INITIAL.
        BMMH1-NTGEW = MATERIAL_MASTER-NTGEW.
      ELSE.
        BMMH1-NTGEW = '/'.
      ENDIF.
    * --- BMMH1-GEWEI
      IF NOT MATERIAL_MASTER-GEWEI IS INITIAL.
        BMMH1-GEWEI = MATERIAL_MASTER-GEWEI.
      ELSE.
        BMMH1-GEWEI = '/'.
      ENDIF.
    * --- BMMH1-GROES
      IF NOT MATERIAL_MASTER-GROES IS INITIAL.
        BMMH1-GROES = MATERIAL_MASTER-GROES.
      ELSE.
        BMMH1-GROES = '/'.
      ENDIF.
    * --- BMMH1-SPART
      IF NOT MATERIAL_MASTER-SPART IS INITIAL.
        BMMH1-SPART = MATERIAL_MASTER-SPART.
      ELSE.
        BMMH1-SPART = '/'.
      ENDIF.
    * --- BMMH1-BSTME
      IF NOT MATERIAL_MASTER-BSTME IS INITIAL.
        BMMH1-BSTME = MATERIAL_MASTER-BSTME.
      ELSE.
        BMMH1-BSTME = '/'.
      ENDIF.
    * --- BMMH1-EKWSL
      IF NOT MATERIAL_MASTER-EKWSL IS INITIAL.
        BMMH1-EKWSL = MATERIAL_MASTER-EKWSL.
      ELSE.
        BMMH1-EKWSL = '/'.
      ENDIF.
    * --- BMMH1-EKGRP
      IF NOT MATERIAL_MASTER-EKGRP IS INITIAL.
        BMMH1-EKGRP = MATERIAL_MASTER-EKGRP.
      ELSE.
        BMMH1-EKGRP = '/'.
      ENDIF.
    * --- BMMH1-XCHPF
      IF NOT MATERIAL_MASTER-XCHPF IS INITIAL.
        BMMH1-XCHPF = MATERIAL_MASTER-XCHPF.
      ELSE.
        BMMH1-XCHPF = '/'.
      ENDIF.
    * --- BMMH1-WEBAZ
      IF NOT MATERIAL_MASTER-WEBAZ IS INITIAL.
        BMMH1-WEBAZ = MATERIAL_MASTER-WEBAZ.
      ELSE.
        BMMH1-WEBAZ = '/'.
      ENDIF.
      IF NOT MATERIAL_MASTER-DISMM IS INITIAL.
        BMMH1-DISMM = MATERIAL_MASTER-DISMM.
      ELSE.
        BMMH1-DISMM = '/'.
      ENDIF.
    * --- BMMH1-VPRSV
      IF NOT MATERIAL_MASTER-VPRSV IS INITIAL.
        BMMH1-VPRSV = MATERIAL_MASTER-VPRSV.
      ELSE.
        BMMH1-VPRSV = '/'.
      ENDIF.
      BMMH1-VERPR = '/'.
    * --- BMMH1-STPRS
      IF NOT MATERIAL_MASTER-STPRS IS INITIAL.
        BMMH1-STPRS = MATERIAL_MASTER-STPRS.
      ELSE.
        BMMH1-STPRS = '/'.
      ENDIF.
    * --- BMMH1-BWPRH
      IF NOT MATERIAL_MASTER-BWPRH IS INITIAL.
        BMMH1-BWPRH = MATERIAL_MASTER-BWPRH.
      ELSE.
        BMMH1-BWPRH = '/'.
      ENDIF.
    * --- BMMH1-PRDHA
      IF NOT MATERIAL_MASTER-PRDHA IS INITIAL.
        BMMH1-PRDHA = MATERIAL_MASTER-PRDHA.
      ELSE.
        BMMH1-PRDHA = '/'.
      ENDIF.
    * --- BMMH1-VABME
      IF NOT MATERIAL_MASTER-VABME IS INITIAL.
        BMMH1-VABME = MATERIAL_MASTER-VABME.
      ELSE.
        BMMH1-VABME = '/'.
      ENDIF.
    * --- BMMH1-MAGRV
      IF NOT MATERIAL_MASTER-MAGRV IS INITIAL.
        BMMH1-MAGRV = MATERIAL_MASTER-MAGRV.
      ELSE.
        BMMH1-MAGRV = '/'.
      ENDIF.
    * --- BMMH1-KZUMW
      IF NOT MATERIAL_MASTER-KZUMW IS INITIAL.
        BMMH1-KZUMW = MATERIAL_MASTER-KZUMW.
      ELSE.
        BMMH1-KZUMW = '/'.
      ENDIF.
    * --- BMMH1-MFRNR
      IF NOT MATERIAL_MASTER-MFRNR IS INITIAL.
        BMMH1-MFRNR = MATERIAL_MASTER-MFRNR.
      ELSE.
        BMMH1-MFRNR = '/'.
      ENDIF.
    * --- BMMH1-MFRPN
      IF NOT MATERIAL_MASTER-MFRPN IS INITIAL.
        BMMH1-MFRPN = MATERIAL_MASTER-MFRPN.
      ELSE.
        BMMH1-MFRPN = '/'.
      ENDIF.
      BMMH1-MPROF = '/'.
    * --- BMMH1-MSTAE
      IF NOT MATERIAL_MASTER-MSTAE IS INITIAL.
        BMMH1-MSTAE = MATERIAL_MASTER-MSTAE.
      ELSE.
        BMMH1-MSTAE = '/'.
      ENDIF.
    * --- BMMH1-PROFL
      IF NOT MATERIAL_MASTER-PROFL IS INITIAL.
        BMMH1-PROFL = MATERIAL_MASTER-PROFL.
      ELSE.
        BMMH1-PROFL = '/'.
      ENDIF.
    * --- BMMH1-MTPOS_MARA
      IF NOT MATERIAL_MASTER-MTPOS_MARA IS INITIAL.
        BMMH1-MTPOS_MARA = MATERIAL_MASTER-MTPOS_MARA.
      ELSE.
        BMMH1-MTPOS_MARA = '/'.
      ENDIF.
    **Transfer the Data to Application Server File
    TRANSFER BMMH1 TO C_ZTEST.
    ENDFORM.                    "convert_0003
    *&      Form  POPULATE_DATA
    *       text
    *      <--P_BLF text
    FORM POPULATE_DATA  CHANGING P_BLF.
      DATA: L_NUM TYPE I.
      DO.
        L_NUM = L_NUM + 1.
        ASSIGN COMPONENT L_NUM OF STRUCTURE P_BLF TO <F>.
        IF SY-SUBRC <> 0.
          EXIT.
        ENDIF.
        MOVE BGR00-NODATA TO <F>.
      ENDDO.
    ENDFORM.                    " POPULATE_DATA

  • Grouping records in an internal table

    Dear all,
    Pls follow the code and suggest me to get the specified format.
    Consider that  i have created a view to populate the reqd data and collect those in an internal table and do a calculation for one field and modify the internal table.
    when i pass this internal table to the function reuse_alv_grid , it throws out a report. But if i need to group the records of the internal table based on three fields, can i do that , if so , how should i do that, if not what method shud i adopt to get the grouped listing in ALV.
    kindly give your views.
    Code goes here..........
    select distinct edatu j_3akvgr6 mvgr4 matnr bismt vbeln auart bstkd bstkd_e ihrez_e
    bstdk_e bstdk bezei vrvez brgew ntgew volum werks kwmeng j_3asize posnr
    INTO CORRESPONDING FIELDS OF TABLE  itabdelshd
    from ZVDELISHED
    where J_3AKVGR6 IN CUSTOMER AND AUART IN ORDTYP
    AND BISMT IN STYLE  AND MATNR in FGMtrl AND bstdk_e IN PLNDATE
    AND J_3ASIZE IN GRIDVAL and werks in plant and mvgr4 in ppmon and
    bstkd in cpono and vbeln in Sales.
    LOOP AT itabdelshd INTO wadelshd.
          select sum( wmeng ) as tqty into wasumqty-tqty
          from vbep where edatu = wadelshd-edatu and vbeln = wadelshd-vbeln
          and j_3asize = wadelshd-j_3asize.
          select sum( lfimg ) as dqty into wasumqty-dqty
          from lips where vbelv = wadelshd-vbeln and j_3asize = wadelshd-j_3asize
          wadelshd-PLND_QTY = wasumqty-tqty - wasumqty-dqty.
          wadelshd-PLND_QTY = wadelshd-wmeng - wadelshd-lfimg.
          wadelshd-COLOR = wadelshd-j_3asize(4).
          MODIFY itabdelshd  FROM  wadelshd.
    ENDLOOP.
      PERFORM build_fieldcatalog.
      PERFORM build_layout.
      PERFORM display_alv_report.

    Dear Jorge,
    It is working out, But i need to do the sum for the grouped data, for instance , if the below data is grouped data seen in the alv,
    sales ord      | color    line.Item|  Ord.qty   | Pld.Qty     | Date          "
    | 0001000551  | 002V | 100       | 6,800.000 | 1,200.000 | 25.09.2006"
    | 0001000551  | 002V | 100       | 6,800.000 | 2,500.000 | 25.09.2006"
    | 0001000551  | 002V | 100       | 6,800.000 | 3,100.000 | 25.09.2006"
    | 0001000551  | 003K | 200       | 3,200.000 | 700.000    | 25.09.2006"
    | 0001000551  | 003K | 200       | 3,200.000 | 1,200.000 | 25.09.2006"
    | 0001000551  | 003K | 200       | 3,200.000  | 1,300.000 | 25.09.2006"
    and if want to sum the the planed qty based on the line.Item Grouping, meaning, can i get the report in the below form.
    sales ord      | color    line.Item|  Ord.qty   | Pld.Qty     | Date          "
    | 0001000551  | 002V | 100       | 6,800.000 | 6,800.000 | 25.09.2006"
    | 0001000551  | 003K | 200       | 6,800.000 | 3,200.000 | 25.09.2006"
    what should i do to get this form.

  • Can I run a Unix shell when insert some record on a specific table?

    Can I run a Unix shell when insert some record on a specific table?
    I need to run a Unix shell when a record be insert on a table. Is there a way in order to do that?
    THanks,
    Carlos.

    1. Make a backup of the extproc.c file in the c:\orant\rdbms80\extproc
    directory.
    2. Create a file called extern.c in the c:\orant\rdbms80\extproc directory.
    The "extern.c" file :
    #include <oci.h>
    #define NullValue -1
    #include<stdio.h>
    #include<string.h>
    long __declspec(dllexport) OutputString(context ,
                             path , path_ind ,
                             message , message_ind,
                             filemode , filemode_ind ,
                             len , len_ind )
    char *path;
    char *message; 
    char *filemode;
    int len;
    OCIExtProcContext *context;
    short path_ind;
    short message_ind;
    short filemode_ind;
    short len_ind;
    FILE *file_handle;
    int i ;
    char str[3];
    int value;
    /* Check whether any parameter passing is null */
    if (path_ind == OCI_IND_NULL || message_ind == OCI_IND_NULL ||
    filemode_ind == OCI_IND_NULL || len_ind == OCI_IND_NULL ) {
    text initial_msg = (text )"One of the Parameters Has a Null Value!!! ";
    text *error_msg;
    /* Allocate space for the error message text, and set it up.
    We do not have to free this memory - PL/SQL will do that automatically. */
    error_msg = OCIExtProcAllocCallMemory(context,
    strlen(path) + strlen(initial_msg) + 1);
    strcpy((char *)error_msg, (char *)initial_msg);
    /*strcat((char *)error_msg, path); */
    OCIExtProcRaiseExcpWithMsg(context, 20001, error_msg, 0);
    /* OCIExtProcRaiseExcp(context, 6502); */
    return 0;
    /* Open the file for writing. */
    file_handle = fopen(path, filemode);
    /* Check for success. If not, raise an error. */
    if (!file_handle) {
    text initial_msg = (text )"Cannot Create file ";
    text *error_msg ;
    /* Allocate space for the error message text, and set it up.
    We do not have to free this memory - PL/SQL will do that automatically. */
    error_msg = OCIExtProcAllocCallMemory(context,
    strlen(path) + strlen(initial_msg) + 1);
    strcpy((char *)error_msg, (char *)initial_msg);
    strcat((char *)error_msg, path);
    OCIExtProcRaiseExcpWithMsg(context, 20001, error_msg, 0);
    return 0;
    i = 0;
    while (i < len)
    /* Read the hexadecimal value(1). */
    str[0] = message;
         i++;
    /* Read the hexadecimal value(2). */
    str[1] = message[i];
    /* Convert the first byte to the binary value. */
    if (str[0] > 64 && str[0] < 71)
    str[0] = str[0] - 55;
    else
    str[0] = str[0] - 48;
    /* Convert the second byte to the binary value. */
    if (str[1] > 64 && str[1] < 71)
    str[1] = str[1] - 55;
    else
    str[1] = str[1] - 48;
    /* Convert the hex value to binary (first & second byte). */
    value = str[0] * 16 + str[1];
    /* Write the binary data to the binary file. */
    fprintf(file_handle,"%c",value);
              i++;
    /* Output the string followed by a newline. */
    /* fwrite(message,len,1,file_handle); */
    /* Close the file. */
    fclose(file_handle);
    3. Use the make.bat available in the c:\orant\rdbms80\extproc directory. You
    need to run vcvars32.bat file before running this batch file. This will
    create a dll file.
    4. Configure the tnsnames.ora and the listener.ora files.
    The tnsnames.ora should contain the following entries.
    extproc_connection_data.world =
    (DESCRIPTION =
    (ADDRESS =
    (PROTOCOL = IPC)
    (KEY = ORCL)
    (CONNECT_DATA = (SID = extproc)
    The listener.ora should contain the following entries.
    # P:\ORANT\NET80\ADMIN\LISTENER.ORA Configuration File:p:\orant\net80\admin\listener.ora
    # Generated by Oracle Net8 Assistant
    LISTENER8 =
    (ADDRESS = (PROTOCOL = TCP)(HOST = winnt_nsc)(PORT = 1521))
    SID_LIST_LISTENER8=
    (SID_LIST =
    (SID_DESC =
    (GLOBAL_DBNAME = winnt_nsc)
    (SID_NAME = ORCL)
    (SID_DESC =
    (SID_NAME = extproc)
    (PROGRAM = extproc)
    5. Login from sqlplus and issue the following statements.
    create library externProcedures as 'C:\orant\RDBMS80\EXTPROC\extern.dll';
    Create or replace PROCEDURE OutputString(
    p_Path IN VARCHAR2,
    p_Message IN VARCHAR2,
    p_mode in VARCHAR2,
    p_NumLines IN BINARY_INTEGER) AS EXTERNAL
    LIBRARY externProcedures
    NAME "OutputString"
    With context
    PARAMETERS (CONTEXT,
    p_Path STRING,
    p_path INDICATOR,
    p_Message STRING,
    p_message INDICATOR,
    p_mode STRING,
    p_mode INDICATOR,
    p_NumLines INT,
    p_numlines INDICATOR);
    This is the pl/sql block used to write the contents of the BLOB into a file.
    Set serveroutput on before running it.
    SQL> desc lob_tab;
    Name Null? Type
    C1 NUMBER
    C2 BLOB
    lob_tab is the table which contains the blob data.
    declare
    i1 blob;
    len number;
    my_vr raw(10000);
    i2 number;
    i3 number := 10000;
    begin
    -- get the blob locator
    SELECT c2 INTO i1 FROM lob_tab WHERE c1 = 2;
    -- find the length of the blob column
    len := DBMS_LOB.GETLENGTH(i1);
    dbms_output.put_line('Length of the Column : ' || to_char(len));
    -- Read 10000 bytes at a time
    i2 := 1;
    if len < 10000 then
    -- If the col length is < 10000
    DBMS_LOB.READ(i1,len,i2,my_vr);
    outputstring('p:\bfiles\ravi.bmp',rawtohex(my_vr),'wb',2*len);
    -- You have to convert the data to rawtohex format. Directly sending the buffer
    -- data will not work
    -- That is the reason why we are sending the length as the double the size of the data read
    dbms_output.put_line('Read ' || to_char(len) || 'Bytes');
    else
    -- If the col length is > 10000
    DBMS_LOB.READ(i1,i3,i2,my_vr);
    outputstring('p:\bfiles\ravi.bmp',rawtohex(my_vr),'wb',2*i3);
    dbms_output.put_line('Read ' || to_char(i3) || ' Bytes ');
    end if;
    i2 := i2 + 10000;
    while (i2 < len ) loop
    -- loop till entire data is fetched
    DBMS_LOB.READ(i1,i3,i2,my_vr);
    dbms_output.put_line('Read ' || to_char(i3+i2-1) || ' Bytes ');
    outputstring('p:\bfiles\ravi.bmp',rawtohex(my_vr),'ab',2*i3);
    i2 := i2 + 10000 ;
    end loop;
    end;

  • Inserting one table records to the another table

    Hi There
    Though i don't close the Result set , My program throws the following Exception
    java.sql.SQLException: ResultSet is ClosedBecause of this my program Inserts only one record in the another table
    My code is this
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.DefaultComboBoxModel.*;
    import javax.swing.table.*;
    import java.sql.*;
    import java.util.*;
    public class SearchBook extends JDialog implements ActionListener
         private JComboBox comboCategory,comboAuthor;
         private JSplitPane splitpane;
         private JTable table;
         private JToolBar toolBar;
         private JButton btnclose, btncancel;
         private JPanel panel1,panel2,panel3,panel4;
         private JLabel lblCategory,lblAuthor;
         private Container c;
         //DefaultTableModel model;
         Statement st;
         ResultSet rs;
         Vector v = new Vector();
         public SearchBook (Connection con)
              // Property for JDialog
              setTitle("Search Books");
              setLocation(40,110);
              setModal(true);
              setSize(750,450);
              // Creating ToolBar Button
              btnclose = new JButton(new ImageIcon("Images/export.gif"));
              btnclose.addActionListener(this);
              // Creating Tool Bar
              toolBar = new JToolBar();
              toolBar.add(btnclose);
              try
                   st=con.createStatement();
                   rs =st.executeQuery("SELECT BCat from Books Group By Books.BCat");
                   while(rs.next())
                        v.add(rs.getString(1));
              catch(SQLException ex)
                   System.out.println("Error");
              panel1= new JPanel();
              panel1.setLayout(new GridBagLayout());
              GridBagConstraints c = new GridBagConstraints();
              c.fill = GridBagConstraints.HORIZONTAL;
              lblCategory = new JLabel("Category:");
              lblCategory.setHorizontalAlignment (JTextField.CENTER);
              c.gridx=2;
              c.gridy=2;
              panel1.add(lblCategory,c);
              comboCategory = new JComboBox(v);
              comboCategory.addActionListener(this);
              c.ipadx=20;
              c.gridx=3;
              c.gridwidth=1;
              c.gridy=2;
              panel1.add(comboCategory,c);
              lblAuthor = new JLabel("Author/Publisher:");
              c.gridwidth=2;
              c.gridx=1;
              c.gridy=4;
              panel1.add(lblAuthor,c);
              lblAuthor.setHorizontalAlignment (JTextField.LEFT);
              comboAuthor = new JComboBox();
              comboAuthor.addActionListener(this);
              c.insets= new Insets(20,0,0,0);
              c.ipadx=20;
              c.gridx=3;
              c.gridy=4;
              panel1.add(comboAuthor,c);
              comboAuthor.setBounds (125, 165, 175, 25);
              table = new JTable();
              JScrollPane scrollpane = new JScrollPane(table);
              //panel2 = new JPanel();
              //panel2.add(scrollpane);
              splitpane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,panel1,scrollpane);
              splitpane.setDividerSize(15);
              splitpane.setDividerLocation(190);
              getContentPane().add(toolBar,BorderLayout.NORTH);
              getContentPane().add(splitpane);
         public void actionPerformed(ActionEvent ae)
              Object obj= ae.getSource();
              if(obj==comboCategory)
                   String selecteditem = (String)comboCategory.getSelectedItem();
                   displayAuthor(selecteditem);
                   System.out.println("Selected Item"+selecteditem);
              else if(obj==btnclose)
                   dispose();     
              else if(obj==comboAuthor)
                   String selecteditem1 = (String)comboAuthor.getSelectedItem();
                   displayavailablity(selecteditem1);
                   //System.out.println("Selected Item"+selecteditem1);
                   System.out.println("Selected Author"+selecteditem1);
         private void displayAuthor(String selecteditem)
              try
              {     Vector data = new Vector();
                   rs= st.executeQuery("SELECT BAuthorandPublisher FROM Books where BCat='" + selecteditem + "' Group By Books.BAuthorandPublisher");
                   System.out.println("Executing");
                   while(rs.next())
                        data.add(rs.getString(1));
                   //((DefaultComboBoxModel)comboAuthor.getModel()).setVectorData(data);
                   comboAuthor.setModel(new DefaultComboBoxModel(data));
                   //rs.close();
              catch(SQLException ex)
                   System.out.println("ERROR");
         private void displayavailablity(String selecteditem1)
                   try
                        Vector columnNames = new Vector();
                        Vector data1 = new Vector();
                        String bname,bauthor,bcategory,bref1,bavail,bid;
                        int bref,mid,num;
                        rs = st.executeQuery("SELECT * FROM Books where BAuthorandPublisher='" + selecteditem1 +"'");     
                        while(rs.next())
                             bname = rs.getString("BName");                         
                             bauthor = rs.getString("BAuthorandPublisher");
                             bcategory = rs.getString("BCat");
                             bref = rs.getInt("BRef");
                             if(bref==1)bref1="Yes";
                             else bref1 = "No";
                             mid = rs.getInt("Mid");
                             if(mid==0)bavail="Available";
                             else bavail="Issued To:"+mid;
                             bid = rs.getString("BId");
                             System.out.println("Book Name is::"+bname);
                             System.out.println("Book Availabilty::"+bavail);
                             num = st.executeUpdate("insert into BSearch Values('"+bid+"','"+bname+"','"+bcategory+"','"+bauthor+"','"+bavail+"','"+bref1+",')");
                             System.out.println("Inseted in the table");
                        /**ResultSetMetaData md= rs.getMetaData();
                        int columns =md.getColumnCount();
                        String booktblheading[]={"Book ID","Book NAME","BOOK AUTHOR/PUBLISHER","REFRENCE","CATEGORY"};
                        for(int i=1; i<= booktblheading.length;i++)
                             columnNames.addElement(booktblheading[i-1]);
                        while(rs.next())
                             Vector row = new Vector(columns);
                             for(int i=1;i<=columns;i++)
                                  row.addElement(rs.getObject(i));
                             data1.addElement(row);
                             //System.out.println("data is:"+data);
                        ((DefaultTableModel)table.getModel()).setDataVector(data1,columnNames);
                        //DefaultTableModel model = new DefaultTableModel(data1,columnNames);
                        //table.setModel(model);
                        //rs.close();
                        //st.close(); */
                   catch(SQLException ex)
                        ex.printStackTrace();
    }Please help me Friends. I am very new to java. otherwise give me some suggestion to implement this idea in effective manner.
    Thank you for your service
    Cheers

    Hi
    Here i am Posting My programs code
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.DefaultComboBoxModel.*;
    import javax.swing.table.*;
    import java.sql.*;
    import java.util.*;
    public class SearchBook extends JDialog implements ActionListener
         private JComboBox comboCategory,comboAuthor;
         private JSplitPane splitpane;
         private JTable table;
         private JToolBar toolBar;
         private JButton btnclose, btncancel;
         private JPanel panel1,panel2,panel3,panel4;
         private JLabel lblCategory,lblAuthor;
         private Container c;
         //DefaultTableModel model;
         Statement st,st1;
         ResultSet rs,rs1,rs2;
         Vector v = new Vector();
         public SearchBook (Connection con)
              // Property for JDialog
              setTitle("Search Books");
              setLocation(40,110);
              setModal(true);
              setSize(750,450);
              // Creating ToolBar Button
              btnclose = new JButton(new ImageIcon("Images/export.gif"));
              btnclose.addActionListener(this);
              // Creating Tool Bar
              toolBar = new JToolBar();
              toolBar.add(btnclose);
              try
                   st=con.createStatement();
                   rs =st.executeQuery("SELECT BCat from Books Group By Books.BCat");
                   while(rs.next())
                        v.add(rs.getString(1));
              catch(SQLException ex)
                   System.out.println("Error");
              panel1= new JPanel();
              panel1.setLayout(new GridBagLayout());
              GridBagConstraints c = new GridBagConstraints();
              c.fill = GridBagConstraints.HORIZONTAL;
              lblCategory = new JLabel("Category:");
              lblCategory.setHorizontalAlignment (JTextField.CENTER);
              c.gridx=2;
              c.gridy=2;
              panel1.add(lblCategory,c);
              comboCategory = new JComboBox(v);
              comboCategory.addActionListener(this);
              c.ipadx=20;
              c.gridx=3;
              c.gridwidth=1;
              c.gridy=2;
              panel1.add(comboCategory,c);
              lblAuthor = new JLabel("Author/Publisher:");
              c.gridwidth=2;
              c.gridx=1;
              c.gridy=4;
              panel1.add(lblAuthor,c);
              lblAuthor.setHorizontalAlignment (JTextField.LEFT);
              comboAuthor = new JComboBox();
              comboAuthor.addActionListener(this);
              c.insets= new Insets(20,0,0,0);
              c.ipadx=20;
              c.gridx=3;
              c.gridy=4;
              panel1.add(comboAuthor,c);
              comboAuthor.setBounds (125, 165, 175, 25);
              table = new JTable();
              JScrollPane scrollpane = new JScrollPane(table);
              //panel2 = new JPanel();
              //panel2.add(scrollpane);
              splitpane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,panel1,scrollpane);
              splitpane.setDividerSize(15);
              splitpane.setDividerLocation(190);
              getContentPane().add(toolBar,BorderLayout.NORTH);
              getContentPane().add(splitpane);
         public void actionPerformed(ActionEvent ae)
              Object obj= ae.getSource();
              if(obj==comboCategory)
                   String selecteditem = (String)comboCategory.getSelectedItem();
                   displayAuthor(selecteditem);
                   System.out.println("Selected Item"+selecteditem);
              else if(obj==btnclose)
                   dispose();     
              else if(obj==comboAuthor)
                   String selecteditem1 = (String)comboAuthor.getSelectedItem();
                   displayavailablity(selecteditem1);
                   //System.out.println("Selected Item"+selecteditem1);
                   System.out.println("Selected Author"+selecteditem1);
         private void displayAuthor(String selecteditem)
              try
              {     Vector data = new Vector();
                   rs1= st.executeQuery("SELECT BAuthorandPublisher FROM Books where BCat='" + selecteditem + "' Group By Books.BAuthorandPublisher");
                   System.out.println("Executing");
                   while(rs1.next())
                        data.add(rs1.getString(1));
                   //((DefaultComboBoxModel)comboAuthor.getModel()).setVectorData(data);
                   comboAuthor.setModel(new DefaultComboBoxModel(data));
              catch(SQLException ex)
                   System.out.println("ERROR");
         private void displayavailablity(String selecteditem1)
                   try
                        Vector columnNames = new Vector();
                        Vector data1 = new Vector();
                        String bname,bauthor,bcategory,bref1,bavail,bid;
                        int bref,mid,num;
                        //rs2.Open();
                        rs = st.executeQuery("SELECT * FROM Books where BAuthorandPublisher='" + selecteditem1 +"'");     
                        boolean tr=true;
                        while(rs.next())
                             if(true)
                                  bname = rs.getString("BName");                         
                                  bauthor = rs.getString("BAuthorandPublisher");
                                  bcategory = rs.getString("BCat");
                                  bref = rs.getInt("BRef");
                                  if(bref==1)bref1="Yes";
                                  else bref1 = "No";
                                  mid = rs.getInt("Mid");
                                  if(mid==0)bavail="Available";
                                  else bavail="Issued To:"+mid;
                                  bid = rs.getString("BId");
                                  System.out.println("Book Name is::"+bname);
                                  System.out.println("Book Availabilty::"+bavail);
                             num = st1.executeUpdate("insert into BSearch Values('"+bid+"','"+bname+"','"+bcategory+"','"+bauthor+"','"+bavail+"','"+bref1+",')");
                             System.out.println("Inseted in the table");
                   catch(SQLException ex)
                        ex.printStackTrace();
    }Thank you for your service

  • Comma after variable record length

    Hi guys,
    Can you tell me if it is possible (and how I should have my control file) to process a loader file that has a comma (CSV) after the byte length? I can't get it to work.
    e.g
    Example file record:-
    00047,1,MR SMITH,20 ANY STREET, ANY ADDRESS, ANY TOWN
    COLUMNS = "ID,NAME,ADDRESS1,ADDRESS2,ADDRESS3"
    So my infile reads
    infile 'example.dat' "var 5"
    but the only examples I have of using record length is where there is no comma separating the record length from the first field, ie in this format:
    000471,MR SMITH,20 ANY STREET, ANY ADDRESS, ANY TOWN
    I cant change the input data format, so any help to cater for this is greatly appreciated.
    Thanks

    Hello, I think you need to add a FILLER field, like this:
    LOAD DATA
    INFILE 'example.dat' "VAR 5"
    TRUNCATE INTO TABLE t1
    FIELDS TERMINATED BY ','
       DUMMY FILLER,
       ID  INTEGER EXTERNAL,
       NAME  CHAR,
       ADDRESS1  CHAR,
       ADDRESS2  CHAR,
       ADDRESS3  CHAR
    )

  • Sql loader (catching record length error)

    Guys is there any command in sqlldr that can catch record length error (less or more than certain length).I am using java to execute my sqlldr and would like to know if it is possible to catch those error.
    thanks
    Manohar.

    Use CHAR instead aof VARCHAR
    LOAD DATA
    INFILE *
    APPEND INTO TABLE test
    FIELDS TERMINATED BY ','
    OPTIONALLY ENCLOSED BY '"'
      first_id,
      second_id,
      third_id,
      language_code,
      display_text    CHAR(2000)
    )From the docu:
    A VARCHAR field is a length-value datatype.
    It consists of a binary length subfield followed by a character string of the specified length.
    http://download-west.oracle.com/docs/cd/A87860_01/doc/server.817/a76955/ch05.htm#20324

Maybe you are looking for

  • Do I have to create a new account for my iPhone, or can I use my iPod Touch account?

    I have an iPod Touch 32GB which I have an iTunes account for, & I need to know whether I have to create a new iTunes account for my new iPhone 4 16GB, or whether I can use the other one for. Would syncing cause problems?

  • Fatal! Book not bound error on B&N Nook upload of EPUB

    When exporting to EPUB, Indesign 2014 issues the following metadata: <metadata xmlns:dc="http://purl.org/dc/elements/1.1/"> If you've modified any of the metadata with opf attributes, this leads to the error "Fatal! book not bound" when uploading to

  • ITunes & quicktime crashes

    Hi guys... I've recently installed iTunes & quicktime onto my laptop, however when trying to run either application they immediately crash on start up.. iTunes.exe give the error : "An unhandled win32 exception occurred in iTunes.exe [1132] and as i

  • Jsf and Seam

    Hi, I have a JSF project and would like to add a Captcha on the new user page. I see several examples with Seam. http://www.digitalsanctuary.com/tech-blog/java/jboss/seam/captcha-with-seam-in-three-minutes.html http://thelabdude.blogspot.com/2009/05/

  • Help my after effects keeps crashing

    my affter effects cs6 keeps crashing when i add effects or after a period of around 10 mins... ive used this for about a year and its never done this! i have pleanty of RAM and SPACE for after effects and allowed it 400 GB for cach and 4 gb of RAM..