Performance in a case statement

Hi
I have a query like this -
SELECT
MAX(CASE WHEN field1 = 'xyz' THEN field2 END) AS alias1,
MAX(CASE WHEN field2 = 'abc' THEN field2 END) AS alias2
FROM table1
WHERE
field1 = 'xyz' and
field2 = 'abc' and
some fixed condition
Please note that the conditions in where clauses are same as corresponding case statements apart from one fixed condition.
In the actual query there are ~15 such conditions and 15 case statements for each selected field.
I have put the where clause to reduce the number of rows getting returned from the table.
My question is - what happens in terms of performance if I remove the where clause here. In other words will above query perform better or same as this
SELECT
MAX(CASE WHEN field1 = 'xyz' THEN field2 END) AS alias1,
MAX(CASE WHEN field2 = 'abc' THEN field2 END) AS alias2
FROM table1
WHERE
some fixed condition
Thanks
Kumar

It really depends on what you query is trying to accomplish. The two queries are not the same. Your first will select rows where both field1 = 'xyz' and field2 = 'abc', while the second would also return rows where, for example, field1 = 'xyz' and field2 = 'def'. In which case, your alias2 would be null.
John

Similar Messages

  • Diff b/w IF/ENDIF and CASE statement?

    Hi all,
    Plz let me know the difference between IF and CASE statements.Which one is better to be used in general...and are there any specific situations where we have to go for CASE insted of IF.
    Rgds,
    Reddy.

    Hi,
    Case statement is good for performance wise because here we declare cases
    and according to these cases program will be executed.
    When we use if statement then the cursur goes to in the loop, when ever
    the loop is not complete till then the programme will not execute.
    Thats by in performance basis the case statement is good.
    Let me try and explain using an example...
    1) For IF statement...
    Suppost you have a variable color..and you are checking it against color names.
    then your code will be
    IF COLOR == 'BLUE'.
        statements
    ELSEIF COLOR == 'BLACK'.
        statements.
    ...and so on....
    ENDIF.
    But if you use CASE Statement
    CASE COLOR.
    when 'BLUE'.
       statements.
    when 'BLACK'.
      statements.
    so follows that CASE is easy to use and performance wise is also better.
    Regards,
    Priyanka.

  • Case statement performance

    Hello,
    This is relating to one of the previous posts.
    CASE STATEMENT PERFORMANCE
    As it has been a discussion of case statement performance. I tried to compare both the filter function and case statement.
    they both actually generate the same physical query.
    So I just am trying to understand the difference.
    thanks,
    Deep

    Hi Deep,
    There would be some performance using CASE where as filter function would generate straight SQL that is WHERE clause is added into the SQL statement for better performance.
    Have a look at this http://www.biconsultinggroup.com/obiee-tips-and-tricks/using-a-filter-function-instead-of-case-statements.html
    http://prolynxuk.com/blog/?p=462
    UPDATED POST
    Can you paste both SQL's generated here.
    hope answered
    Cheers,
    KK
    Edited by: Kranthi.K on Apr 22, 2011 7:33 PM

  • CASE not found while executing CASE statement on Submit Form

    Hi to all APEX users and developers.
    I have several APEX applications and they are all working well, but recently I got one strange exception when I try to submit page:
    Session: Fetch session header information
    ...metadata, fetch page info
    ...Validate item page affinity.
    ...Validate hidden_protected items.
    Add error onto error stack
    ...Error data:
    ......message: Error processing request.
    ......additional_info: ORA-06592: CASE not found while executing CASE statement
    ......display_location: ON_ERROR_PAGE
    ......is_internal_error: true
    ......apex_error_code: APEX.UNHANDLED_ERROR
    ......ora_sqlcode: -6592
    ......ora_sqlerrm: ORA-06592: CASE not found while executing CASE statement
    .....error_backtrace: ORA-06512: at "APEX_040100.WWV_FLOW", line 9273
    ......component.type: APEX_APPLICATION_AUTH
    ......component.id: 41350431648668800
    ......component.name: MNRFR
    ...Show Error on Error Page
    ......Performing rollback
    Processes - point: AFTER_ERROR_HEADER
    Processes - point: BEFORE_ERROR_FOOTER
    End Page Processinga
    Page has more than 120 items (most of them are hidden), so my first thought is that page has problem with posting so many items, but APEX error message doesn't hel me at all. Any help would be very appreciated :)
    Almir

    Hi Almir,
    actually it is the 100 page item limit. See (http://download.oracle.com/docs/cd/E17556_01/doc/user.40/e15517/limits.htm)
    I also had a look into the source code and the code at the position where the error gets raised only supports 100 page items.
    Can you have a look into the generated HTML code and look if you have a page items which is mapped to p_t101 or a higher number ?
    I will file a bug to show a better error message.
    Regards
    Patrick
    My Blog: http://www.inside-oracle-apex.com
    APEX Plug-Ins: http://apex.oracle.com/plugins
    Twitter: http://www.twitter.com/patrickwolf

  • How to write a case statement for the totals column of two different years (2013 and 2014) of the same month so that I can get a +/- column

    Please Help!!!
    How to write a case statement for the totals column of two different years (2013 and 2014) of the same month so that I can get a +/- column.
                                      January 2014         January
    2013                            +/-
                    Region   Entry   Exit  Total    Entry   Exit   Total   (Total of Jan2014-Total of Jan2013)
                    A               2         3      
    40        5       7        30                    40-30= 10

    What is a table structure? Sorry cannot test it right now..
    SELECT <columns>,(SELECT Total FROM tbl WHERE Y=2014)-(SELECT Total FROM tbl WHERE Y=2013)
    FROM tbl
    Best Regards,Uri Dimant SQL Server MVP,
    http://sqlblog.com/blogs/uri_dimant/
    MS SQL optimization: MS SQL Development and Optimization
    MS SQL Consulting:
    Large scale of database and data cleansing
    Remote DBA Services:
    Improves MS SQL Database Performance
    SQL Server Integration Services:
    Business Intelligence

  • Query Tuning - using CASE statement in the WHERE clause

    Hi All,
    My query has been modified to use a CASE statement in the WHERE clause to consider data from certain columns based on a parameter value. This modified query is doing a full table scan and running endlessly. Please suggest what may be done to improve its performance:
    Query:
    SELECT LAST_DAY(TRUNC(TO_TIMESTAMP(os.requestdatetime, 'yyyymmddhh24:mi:ss.ff4'))) AS summary_date,
    os.acctnum,
    os.avieworigin_refid,
    COUNT(1) cnt_articleview,
    SUM(NVL(autocompletedterm,0)) cnt_autocompletedterm
    FROM TABLE1 os
    WHERE os.acctnum IS NOT NULL
    AND os.avieworigin_refid IS NOT NULL
    AND os.requestdatetime IS NOT NULL
    AND UPPER(os.success_ind) = 'S'
    AND CASE WHEN
    Param_ValueToCheck  = 'FULL' AND get_date_timestamp(os.requestdatetime)  BETWEEN
    TO_DATE('01-MAY-2011 00:00:00','DD-MON-YYYY HH24:MI:SS') AND
    TO_DATE('31-MAY-2011 00:00:00','DD-MON-YYYY HH24:MI:SS')
    THEN 1
    WHEN
    Param_ValueToCheck  = 'INCR' AND os.entry_createddate  BETWEEN
    TO_DATE('01-MAY-2011 00:00:00','DD-MON-YYYY HH24:MI:SS') AND
    TO_DATE('31-MAY-2011 00:00:00','DD-MON-YYYY HH24:MI:SS')
    THEN 1
    END = 1
    AND CASE WHEN
    Param_ValueToCheck  = 'FULL' AND os.entry_CreatedDate BETWEEN
    TO_DATE('01-APR-2011 00:00:00','DD-MON-YYYY HH24:MI:SS') AND
    TO_DATE('07-JUN-2011 00:00:00','DD-MON-YYYY HH24:MI:SS')
    THEN 1
    WHEN
    Param_ValueToCheck  = 'INCR' THEN 1
    END = 1
    GROUP BY LAST_DAY(TRUNC(TO_TIMESTAMP(os.requestdatetime, 'yyyymmddhh24:mi:ss.ff4'))), os.acctnum,os.avieworigin_refid;Table Description:
    (Number of rows : approx > 600,000,000)
    Name                           Null     Type      
    ARTICLEID                      NOT NULL NUMBER(20)
    USERKEY                                 NUMBER(10)
    AVIEWORIGIN_REFID                       VARCHAR2(10)
    SUCCESS_IND                             VARCHAR2(2)
    ENTRY_CREATEDDATE                       DATE      
    CREATED_BY                              VARCHAR2(10)
    FILENUMBER                              NUMBER(10)
    LINENUMBER                              NUMBER(10)
    ACCTNUM                                 VARCHAR2(10)
    AUTOCOMPLETEDTERM                       NUMBER(2) 
    REQUESTDATETIME                         VARCHAR2(19)Explain Plan
    SQL> select * from table(dbms_xplan.display);
    PLAN_TABLE_OUTPUT
    Plan hash value: 2224314832
    | Id  | Operation            | Name              | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
    |   0 | SELECT STATEMENT     |                   |   590 | 33040 |  2501K  (1)| 08:20:15 |       |       |
    |   1 |  HASH GROUP BY       |                   |   590 | 33040 |  2501K  (1)| 08:20:15 |       |       |
    |   2 |   PARTITION RANGE ALL|                   |   590 | 33040 |  2501K  (1)| 08:20:15 |     1 |1048575|
    |*  3 |    TABLE ACCESS FULL | TABLE1 |   590 | 33040 |  2501K  (1)| 08:20:15 |     1 |1048575|
    PLAN_TABLE_OUTPUT
    Predicate Information (identified by operation id):
       3 - filter(UPPER("OS"."SUCCESS_IND")='S' AND CASE  WHEN ('FULL'='FULL' AND
                  "OS"."ENTRY_CREATEDDATE">=TO_DATE(' 2011-04-01 00:00:00', 'syyyy-mm-dd hh24:mi:ss') AND
                  "OS"."ENTRY_CREATEDDATE"<=TO_DATE(' 2011-06-07 00:00:00', 'syyyy-mm-dd hh24:mi:ss')) THEN 1 WHEN
                  'FULL'='INCR' THEN 1 END =1 AND "OS"."REQUESTDATETIME" IS NOT NULL AND CASE  WHEN ('FULL'='FULL'
                  AND "ODS"."GET_DATE_TIMESTAMP"("REQUESTDATETIME")>=TO_DATE(' 2011-05-01 00:00:00', 'syyyy-mm-dd
                  hh24:mi:ss') AND "ODS"."GET_DATE_TIMESTAMP"("REQUESTDATETIME")<=TO_DATE(' 2011-05-31 00:00:00',
                  'syyyy-mm-dd hh24:mi:ss')) THEN 1 WHEN ('FULL'='INCR' AND "OS"."ENTRY_CREATEDDATE">=TO_DATE('
                  2011-05-01 00:00:00', 'syyyy-mm-dd hh24:mi:ss') AND "OS"."ENTRY_CREATEDDATE"<=TO_DATE('
    PLAN_TABLE_OUTPUT
                  2011-05-31 00:00:00', 'syyyy-mm-dd hh24:mi:ss')) THEN 1 END =1 AND "OS"."ACCTNUM" IS NOT NULL AND
                  "OS"."AVIEWORIGIN_REFID" IS NOT NULL)Edited by: Chaitanya on Jun 9, 2011 2:44 AM
    Edited by: Chaitanya on Jun 9, 2011 2:47 AM

    Hi Dom,
    Modified Query:
    SELECT LAST_DAY(TRUNC(TO_TIMESTAMP(os.requestdatetime, 'yyyymmddhh24:mi:ss.ff4'))) AS summary_date,
    os.acctnum,
    os.avieworigin_refid,
    COUNT(1) cnt_articleview,
    SUM(NVL(autocompletedterm,0)) cnt_autocompletedterm
    FROM TABLE1 os
    WHERE os.acctnum IS NOT NULL
    AND os.avieworigin_refid IS NOT NULL
    AND os.requestdatetime IS NOT NULL
    AND UPPER(os.success_ind) = 'S'
    AND (('FULL'  = 'FULL'
    AND  (get_date_timestamp(os.requestdatetime)  BETWEEN TO_DATE('01-MAY-2011 00:00:00','DD-MON-YYYY HH24:MI:SS')
                   AND TO_DATE('31-MAY-2011 00:00:00','DD-MON-YYYY HH24:MI:SS')
    AND   os.entry_CreatedDate BETWEEN TO_DATE('01-APR-2011 00:00:00','DD-MON-YYYY HH24:MI:SS')
                   AND TO_DATE('07-JUN-2011 00:00:00','DD-MON-YYYY HH24:MI:SS')
    OR ('FULL'  = 'INCR'
    AND os.entry_createddate  BETWEEN TO_DATE('01-MAY-2011 00:00:00','DD-MON-YYYY HH24:MI:SS')
                   AND TO_DATE('31-MAY-2011 00:00:00','DD-MON-YYYY HH24:MI:SS') ))
    GROUP BY LAST_DAY(TRUNC(TO_TIMESTAMP(os.requestdatetime, 'yyyymmddhh24:mi:ss.ff4'))), os.acctnum,os.avieworigin_refid;Execute Plan:
    PLAN_TABLE_OUTPUT
    Plan hash value: 3615447714
    | Id  | Operation                 | Name              | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     | Pstart| Pstop |
    |   0 | SELECT STATEMENT          |                   | 25125 |  1374K|       |   407K  (1)| 01:21:36 |       |       |
    |   1 |  HASH GROUP BY            |                   | 25125 |  1374K|  3768K|   407K  (1)| 01:21:36 |       |       |
    |   2 |   PARTITION RANGE ITERATOR|                   | 25125 |  1374K|       |   407K  (1)| 01:21:32 |    29 |    31 |
    |*  3 |    TABLE ACCESS FULL      | TABLE1 | 25125 |  1374K|       |   407K  (1)| 01:21:32 |    29 |    31 |
    PLAN_TABLE_OUTPUT
    Predicate Information (identified by operation id):
       3 - filter("OS"."ENTRY_CREATEDDATE">=TO_DATE(' 2011-04-01 00:00:00', 'syyyy-mm-dd hh24:mi:ss') AND
                  UPPER("OS"."SUCCESS_IND")='S' AND "OS"."REQUESTDATETIME" IS NOT NULL AND
                  "ODS"."GET_DATE_TIMESTAMP"("REQUESTDATETIME")>=TO_DATE(' 2011-05-01 00:00:00', 'syyyy-mm-dd hh24:mi:ss') AND
                  "ODS"."GET_DATE_TIMESTAMP"("REQUESTDATETIME")<=TO_DATE(' 2011-05-31 00:00:00', 'syyyy-mm-dd hh24:mi:ss') AND
                  "OS"."ACCTNUM" IS NOT NULL AND "OS"."AVIEWORIGIN_REFID" IS NOT NULL AND "OS"."ENTRY_CREATEDDATE"<=TO_DATE('
                  2011-06-07 00:00:00', 'syyyy-mm-dd hh24:mi:ss'))Edited by: Chaitanya on Jun 9, 2011 4:51 AM

  • Case Statement in Oracle Query.

    Hello Oracle Gurus,
    I need suggestion on whether I should use Case statement in Oracle queries.
    I have a sql statement which inserts the data by selecting data from other table. While selecting the data I have put a logic in the select statement for one column which is something like this and there are some more similar statements in the same query.
    CASE
                   WHEN (b.ACCOUNT = 'FIN' or b.ACCOUNT ='FIN ACC' or b.ACCOUNT like '%Global Eq%' or b.ACCOUNT like '%Flexible Bond%')
                   THEN
                        'MTM'
                             WHEN (substr(a.CTC,-3)='MTM')
                   THEN
                        'MTM'
                             WHEN (substr(a.CTC,-3)='AFS' or substr(a.CTC,-3)='HTM' OR substr(a.CTC,-3)='ACC' OR substr(a.CTC,-3)='HFI' )
                   THEN
                        'ACC'
                   ELSE
                                  'OTH'
              END,
    I wanted to get an suggestion about how much performance issue can I have due to this in my insert statement.
    Let me know if you need any other information.All comments are really appreciated.

    Hi,
    It's depends on the joins how you have performed with source table, stats and existing of indexes. If the volume of data is high - in case of any performance issue - why can't you perform the required things of logical conditions of data and popualte in one cluster so - that you can fetch out the chunks of required information with better way and in support with indexes.
    Let us know the ful query your working on
    Oracle version
    Explain plans - get it from dbms_xplan.
    - Pavan Kumar N
    - ORACLE - 9i/10g - OCP
    RHCE - Enterprize Linux 5.4

  • CASE statement in Oracle 8i PL/SQL

    I'm in the process of doing an upgrade from 8i to 10g and have the necessary instructions in performing it. however, after running the pre upgrade tasks (run utlu102i.sql) to show the preupgrade information, i found out that there are some INVALID objects.
    Miscellaneous Warnings
    WARNING: --> Database contains INVALID objects prior to upgrade.
    .... USER INGITRN has 1 INVALID objects.
    .... USER INGIUAT has 3 INVALID objects.
    .... USER OEMMON has 7 INVALID objects.
    .... USER RE_ITF_USER has 11 INVALID objects.
    .... USER SYS has 1 INVALID objects.
    Would it be ok to proceed with the upgrade and ignore the warnings?
    Also, as i checked the invalid object for SYS, it shows:
    OWNER OBJECT_NAME OBJECT_TYPE STATUS
    SYS UTL_RECOMP PACKAGE VALID
    SYS UTL_RECOMP PACKAGE BODY INVALID
    Further more, i tried to do a fix by invoking utlirp.sql and the same objects are showing up. Same thing shows when invoking utlrp.sql or even doing a manual compile for the affected objects. I later found out that CASE statements are not accepted in PL/SQL for Oracle 8i.
    Can you help me fixed the issue on the invalid object?
    Thanks

    Hi,
    Try first to (re)compile ll invalid objects. then
    you can run:
    select owner,type,count(*) from all_errors
    group by owner,typeif you still have uncompiled objects, then report the different errors:
    select * from all_errors...

  • Regarding case statement and decode function

    Hi Experts,
    I have question.....regarding case statement and decode statement....
    Can you please explain me that which one will be efficient,to place in insert statement...
    insert statement(
    (case when ........then
                         case when ....then
                         else
                         end)
      else
    end)
    or
    insert statement(
    case when.....then
    decode(....)
    else
    end)
    Can you people explain me which one is more efficient method?
    Thanks in advance.......

    The are major differences to talk about in case of CASE vs DECODE, but performance wise both are pretty much the same.
    Have a look at Tom's thread
    Ask Tom &amp;quot;better performance - case or decode&amp;quot;
    I would suggest to use CASE whenever possible. Don't worry about the performance part.

  • Using case statement in merge when matched

    Hi,
    I want to use case statement in the when matched clause of merge statement to ensure that I update only those fields that are undated.
    create table TEST1
    NAME1 VARCHAR2(25),
    NAME2 VARCHAR2(25),
    ID NUMBER not null
    create table TEST2
    ID NUMBER not null,
    ID2 NUMBER not null,
    NAME1 VARCHAR2(25),
    NAME2 VARCHAR2(25)
    merge into test1 t1
    using
    test2 t2
    ON (t1.id = t2.id)
    when matched
    then
    case
    when t1.name1 != t2.name1
    then
    update set t1.name1 != t2.name1
    when t1.name2 != t2.name2
    then
    update set t1.name2 != t2.name2
    else
    null;
    end
    it does not work and raises invalid sql command. Any idea how can I do that?
    Thanks.
    Sajid
    Edited by: 808255 on Nov 12, 2010 4:22 AM

    Hi
    In that case you would have to use multiple statements and you may as well just use UPDATE instead of MERGE. Also, are you sure that you aren't trying to to fix a problem that doesn't actually exist.
    Think about where the execution time is going to come from...
    I would be tempted to do 1 UPDATE like this...
       UPDATE test1 t1
       SET    (t1.name1,
               t1.name2) = (SELECT  t2.name1,
                                    t2.name2
                            FROM    test2 t2
                            WHERE  t1.id = t2.id
                            AND   (t1.name1 != t2.name1
                             OR    t1.name2 != t2.name2))If you get specific performance issue with this, then post an explain plan and trace and I'll have a look.
    I don't this the cost of the update is going to be as great as you think.
    Cheers
    Ben

  • Is it possible to use a case statement when joining different tables based on input parameters?

    Hi,
    I have a scenario where my stored procedure takes 5 parameters and the users can pass NULL or some value to these parameters and based on the parameters, I need to pull data from various tables.
    Is it possible to use a case statement in the join, similar the one in the below example. I'm getting error when I use the below type of statement.
    select a.*
    from a
    case
    when parameter1=1 then
    inner join a on a.id = b.id
    when parameter1=2 then
    inner join a on a.id = c.id
    end;
    Please let me know, if this type of statement works, and if it works will it create any performance issues?. If the above doesn't work, could you please give me some alternate solutions?
    Thanks.

    Here's a technique for joining A to B or C depending on the input parameters. In theory, you are joining to both tables but the execution plan includes filters to skip whichever join is not appropriate. The drawback is that you have to do outer joins, not inner ones.
    CREATE TABLE A AS SELECT LEVEL ak FROM dual CONNECT BY LEVEL <= 100;
    CREATE TABLE b AS SELECT ak, bk
    FROM A, (SELECT LEVEL bk FROM dual CONNECT BY LEVEL <= 10);
    CREATE TABLE c(ak, ck) AS SELECT ak, bk*10 FROM b;
    variable p1 NUMBER;
    variable p2 NUMBER;
    exec :p1 := 1;
    exec :p2 := 20;
    SELECT /*+ gather_plan_statistics */ A.ak, nvl(b.bk, c.ck) otherk FROM A
    LEFT JOIN b ON A.ak = b.ak AND :p1 IS NOT NULL AND b.bk = :p1
    LEFT JOIN c ON A.ak = c.ak AND :p1 is null and :p2 IS NOT NULL and c.ck = :p2
    WHERE A.ak <= 9;
    SELECT * FROM TABLE(dbms_xplan.display_cursor(NULL,NULL,'IOSTATS LAST'));
    | Id  | Operation             | Name            | Starts | E-Rows | A-Rows |   A-Time   | Buffers |
    |   0 | SELECT STATEMENT      |                 |      1 |        |      9 |00:00:00.01 |       7 |
    |*  1 |  HASH JOIN OUTER      |                 |      1 |      9 |      9 |00:00:00.01 |       7 |
    |*  2 |   HASH JOIN OUTER     |                 |      1 |      9 |      9 |00:00:00.01 |       7 |
    |*  3 |    TABLE ACCESS FULL  | A               |      1 |      9 |      9 |00:00:00.01 |       3 |
    |   4 |    VIEW               | VW_DCL_5532A50F |      1 |      9 |      9 |00:00:00.01 |       4 |
    |*  5 |     FILTER            |                 |      1 |        |      9 |00:00:00.01 |       4 |
    |*  6 |      TABLE ACCESS FULL| B               |      1 |      9 |      9 |00:00:00.01 |       4 |
    |   7 |   VIEW                | VW_DCL_5532A50F |      1 |      9 |      0 |00:00:00.01 |       0 |
    |*  8 |    FILTER             |                 |      1 |        |      0 |00:00:00.01 |       0 |
    |*  9 |     TABLE ACCESS FULL | C               |      0 |      9 |      0 |00:00:00.01 |       0 |
    Predicate Information (identified by operation id):
       1 - access("A"."AK"="ITEM_0")
       2 - access("A"."AK"="ITEM_1")
       3 - filter("A"."AK"<=9)
      5 - filter(:P1 IS NOT NULL)
       6 - filter(("B"."AK"<=9 AND "B"."BK"=:P1))
       8 - filter((:P2 IS NOT NULL AND :P1 IS NULL))
       9 - filter(("C"."AK"<=9 AND "C"."CK"=:P2))
    You can see that table C was not really accessed: the buffer count is 0.
    exec :p1 := NULL;
    SELECT /*+ gather_plan_statistics */ A.ak, nvl(b.bk, c.ck) otherk FROM A
    LEFT JOIN b ON A.ak = b.ak AND :p1 IS NOT NULL AND b.bk = :p1
    LEFT JOIN c ON A.ak = c.ak AND :p1 is null and :p2 IS NOT NULL and c.ck = :p2
    WHERE A.ak <= 9;
    SELECT * FROM TABLE(dbms_xplan.display_cursor(NULL,NULL,'IOSTATS LAST'));
    Now table B is not accessed.
    | Id  | Operation             | Name            | Starts | E-Rows | A-Rows |   A-Time   | Buffers | Reads  |
    |   0 | SELECT STATEMENT      |                 |      1 |        |      9 |00:00:00.02 |       7 |      2 |
    |*  1 |  HASH JOIN OUTER      |                 |      1 |      9 |      9 |00:00:00.02 |       7 |      2 |
    |*  2 |   HASH JOIN OUTER     |                 |      1 |      9 |      9 |00:00:00.01 |       3 |      0 |
    |*  3 |    TABLE ACCESS FULL  | A               |      1 |      9 |      9 |00:00:00.01 |       3 |      0 |
    |   4 |    VIEW               | VW_DCL_5532A50F |      1 |      9 |      0 |00:00:00.01 |       0 |      0 |
    |*  5 |     FILTER            |                 |      1 |        |      0 |00:00:00.01 |       0 |      0 |
    |*  6 |      TABLE ACCESS FULL| B               |      0 |      9 |      0 |00:00:00.01 |       0 |      0 |
    |   7 |   VIEW                | VW_DCL_5532A50F |      1 |      9 |      9 |00:00:00.01 |       4 |      2 |
    |*  8 |    FILTER             |                 |      1 |        |      9 |00:00:00.01 |       4 |      2 |
    |*  9 |     TABLE ACCESS FULL | C               |      1 |      9 |      9 |00:00:00.01 |       4 |      2 |

  • Case statement to decode

    Hello,
    I am used to using case within my select statements, I need to use decode if possible for this one. Its for a record group within in forms, and the case statement is not working. Could someone please help me write this with decode instead of case?
    SELECT CASE
           WHEN months_between(sysdate , c.birth_dt) BETWEEN 168 AND 216 THEN 1 --14 to 18
           WHEN months_between(sysdate , c.birth_dt) BETWEEN 217 AND 252 THEN 2 --18 to 21
           WHEN months_between(sysdate , c.birth_dt) BETWEEN 253 AND 780 THEN 3 --21 to 65
           WHEN months_between(sysdate , c.birth_dt) > 780 then 4 --older than 65
           ELSE NULL END
    FROM mw_clients cThanks in advance!
    Jim P.

    Below solution is very easy to write.
    But I think that performance will be bad.Not really as dual is internal to the SQL engine so there's little difference between the two...
    SQL> ed
    Wrote file afiedt.buf
      1  with mw_clients as (select add_months(sysdate,-200) as birth_dt from dual union
      2                      select add_months(sysdate,-220) from dual union
      3                      select add_months(sysdate,-400) from dual)
      4  -- END OF TEST DATA
      5  select 4+
      6         decode(Least(months_between(sysdate , c.birth_dt),168),
      7                168,decode(greatest(months_between(sysdate , c.birth_dt),216),
      8                           216,-3,0)
      9                ,0)+
    10         decode(Least(months_between(sysdate , c.birth_dt),217),
    11                217,decode(greatest(months_between(sysdate , c.birth_dt),252),
    12                           252,-2,0)
    13                ,0)+
    14         decode(Least(months_between(sysdate , c.birth_dt),253),
    15                253,decode(greatest(months_between(sysdate , c.birth_dt),780),
    16                           780,-1,0)
    17                ,0) as result
    18* from mw_clients c
    SQL> /
        RESULT
             3
             2
             1
    Elapsed: 00:00:00.01
    Execution Plan
    Plan hash value: 1277652150
    | Id  | Operation        | Name | Rows  | Bytes | Cost (%CPU)| Time     |
    |   0 | SELECT STATEMENT |      |     3 |    27 |     9  (34)| 00:00:01 |
    |   1 |  VIEW            |      |     3 |    27 |     9  (34)| 00:00:01 |
    |   2 |   SORT UNIQUE    |      |     3 |       |     9  (78)| 00:00:01 |
    |   3 |    UNION-ALL     |      |       |       |            |          |
    |   4 |     FAST DUAL    |      |     1 |       |     2   (0)| 00:00:01 |
    |   5 |     FAST DUAL    |      |     1 |       |     2   (0)| 00:00:01 |
    |   6 |     FAST DUAL    |      |     1 |       |     2   (0)| 00:00:01 |
    Statistics
              1  recursive calls
              0  db block gets
              0  consistent gets
              0  physical reads
              0  redo size
            456  bytes sent via SQL*Net to client
            396  bytes received via SQL*Net from client
              2  SQL*Net roundtrips to/from client
              1  sorts (memory)
              0  sorts (disk)
              3  rows processed
    SQL>
    SQL> ed
    Wrote file afiedt.buf
      1  with mw_clients as (select add_months(sysdate,-200) as birth_dt from dual union
      2                      select add_months(sysdate,-220) from dual union
      3                      select add_months(sysdate,-400) from dual)
      4  -- END OF TEST DATA
      5  select c.birth_dt,
      6         (select 1 from dual where months_between(sysdate , c.birth_dt) BETWEEN 168 AND 216 union
      7          select 2 from dual where months_between(sysdate , c.birth_dt) BETWEEN 217 AND 252 union
      8          select 3 from dual where months_between(sysdate , c.birth_dt) BETWEEN 253 AND 780 union
      9          select 4 from dual where months_between(sysdate , c.birth_dt) > 780
    10         ) as result
    11* from mw_clients c
    SQL> /
    BIRTH_DT                RESULT
    06/08/1974 10:15:39          3
    06/08/1989 10:15:39          2
    06/04/1991 10:15:39          1
    Elapsed: 00:00:00.01
    Execution Plan
    Plan hash value: 706016619
    | Id  | Operation        | Name | Rows  | Bytes | Cost (%CPU)| Time     |
    |   0 | SELECT STATEMENT |      |     3 |    27 |     9  (34)| 00:00:01 |
    |   1 |  SORT UNIQUE     |      |     4 |       |    12  (84)| 00:00:01 |
    |   2 |   UNION-ALL      |      |       |       |            |          |
    |*  3 |    FILTER        |      |       |       |            |          |
    |   4 |     FAST DUAL    |      |     1 |       |     2   (0)| 00:00:01 |
    |*  5 |    FILTER        |      |       |       |            |          |
    |   6 |     FAST DUAL    |      |     1 |       |     2   (0)| 00:00:01 |
    |*  7 |    FILTER        |      |       |       |            |          |
    |   8 |     FAST DUAL    |      |     1 |       |     2   (0)| 00:00:01 |
    |*  9 |    FILTER        |      |       |       |            |          |
    |  10 |     FAST DUAL    |      |     1 |       |     2   (0)| 00:00:01 |
    |  11 |  VIEW            |      |     3 |    27 |     9  (34)| 00:00:01 |
    |  12 |   SORT UNIQUE    |      |     3 |       |     9  (78)| 00:00:01 |
    |  13 |    UNION-ALL     |      |       |       |            |          |
    |  14 |     FAST DUAL    |      |     1 |       |     2   (0)| 00:00:01 |
    |  15 |     FAST DUAL    |      |     1 |       |     2   (0)| 00:00:01 |
    |  16 |     FAST DUAL    |      |     1 |       |     2   (0)| 00:00:01 |
    Predicate Information (identified by operation id):
       3 - filter(MONTHS_BETWEEN(SYSDATE@!,:B1)<=216 AND
                  MONTHS_BETWEEN(SYSDATE@!,:B2)>=168)
       5 - filter(MONTHS_BETWEEN(SYSDATE@!,:B1)<=252 AND
                  MONTHS_BETWEEN(SYSDATE@!,:B2)>=217)
       7 - filter(MONTHS_BETWEEN(SYSDATE@!,:B1)<=780 AND
                  MONTHS_BETWEEN(SYSDATE@!,:B2)>=253)
       9 - filter(MONTHS_BETWEEN(SYSDATE@!,:B1)>780)
    Statistics
              1  recursive calls
              0  db block gets
              0  consistent gets
              0  physical reads
              0  redo size
            538  bytes sent via SQL*Net to client
            396  bytes received via SQL*Net from client
              2  SQL*Net roundtrips to/from client
              4  sorts (memory)
              0  sorts (disk)
              3  rows processed
    SQL> ed

  • Oracle CASE statement logic

    Hi all,
    I have to compare the value of a varchar variable using a CASE statement and display the corresponding output.
    But when the following code is being executed, and i gave the value of dayrange as anything other than number, i am getting the error;
    The daysrange variable can be a number or a string (Hence i declared it as a varcahr2)
    Error report:
    ORA-06502: PL/SQL: numeric or value error: character to number conversion error
    ORA-06512: at line 5
    06502. 00000 - "PL/SQL: numeric or value error%s"
    *Cause:   
    *Action:
    declare
    daysrange varchar2(10):='abc';
    x varchar2(100);
    begin
    CASE WHEN DAYSRANGE = 1 THEN x := 'LD';
              WHEN DAYSRANGE BETWEEN 2 AND 7 THEN x := 'LW';
              WHEN DAYSRANGE BETWEEN 8 AND 30 THEN x:= 'LM';
              WHEN DAYSRANGE BETWEEN 31 AND 90 THEN x:= 'L3M';
              WHEN DAYSRANGE BETWEEN 91 AND 180 THEN x:= 'L6M';
              WHEN DAYSRANGE BETWEEN 181 AND 365 THEN x:= 'LY';
              WHEN DAYSRANGE BETWEEN 366 AND 730 THEN x:= 'L2Y';
              WHEN DAYSRANGE > 730 THEN x:= 'O2Y';
         ELSE x:='x:= x';
         END case;--DATERANGE
    exception
    when case_not_found then
    x:='something';
    dbms_output.put_line(x);
    end;
    Edited by: Chaitanya on Nov 25, 2010 1:25 AM

    Hi,
    Chaitanya wrote:
    ... The daysrange variable can be a number or a string (Hence i declared it as a varcahr2)That's usually not a good design. It would be better to have two variables (or columns) if necessary, a VARCHAR2 and a NUMBER.
    If you can't change the design, then test daysrange, and then do different things depending on whether it is a number or not.
    For example:
    declare
         daysrange      varchar2(10)     := '17';
         daysrange_n     NUMBER;
         x           varchar2(100);
    begin
         IF  REGEXP_LIKE (daysrange, '^\d+$')
         THEN
              daysrange_n := TO_NUMBER (daysrange);
              x := CASE 
                   WHEN daysrange_n > 730     THEN 'O2Y'
                   WHEN daysrange_n > 365     THEN 'L2Y'
                   WHEN daysrange_n > 180     THEN 'L1Y'
                   WHEN daysrange_n >  90     THEN 'L6M'
                   WHEN daysrange_n >  30     THEN 'L3M'
                   WHEN daysrange_n >   7     THEN 'LM'
                   WHEN daysrange_n >   1     THEN 'LW'
                   WHEN daysrange_n =   1     THEN 'LD'
                                  ELSE  x          -- If necessary
                   END;
         END IF;
    ...The tests in a CASE expression are done in order. The n-th WHEN condition is tried only after conditions 1 through n have failed. That's why we can saY, for example,
    "daysrange_n > 365" instead of
    "daysrange_n BETWEEN 366 AND 730". If the 2nd test is even being performed, we know that the 1st test failed, and that daysrnage_n is not > 730.
    I'm not saying that you have to write CASE expressions like this, or that it's necessarily better. You should know that it's possible, then choose whichever way makes the most sense in this situation.

  • Performance Issie in SQL Statement Using Hints

    Hi,
    I am using Oracle version 10G.
    I am using a INSERT statement as:
    INSERT /*+ PARALLEL (TEST,4) */ INTO TEST(COL1,COL2,COL3) SELECT COL1,COL2,COL3 FROM DUMMY;
    For increasing the Performance I am using the above statement.
    Will the usage of Hints increase the Performance?
    Any help will be highly needful.
    Thanks and Regards

    user598986 wrote:
    I am using Oracle version 10G.
    I am using a INSERT statement as:
    INSERT /*+ PARALLEL (TEST,4) */ INTO TEST(COL1,COL2,COL3) SELECT COL1,COL2,COL3 FROM DUMMY;
    For increasing the Performance I am using the above statement.
    Will the usage of Hints increase the Performance?The way you're asking the question suggests that you're not sure what this particular hint is supposed to imply.
    Using this hint suggests that you want to take advantage of direct-path parallel DML operations. Note that you explicitly need to enable parallel DML in your session, it is disabled by default, because it has some significant implications and restrictions. You should think about parallelizing the query on DUMMY, too, if it is not marked as PARALLEL in the dictionary, because otherwise you're combining a parallel DML operation with a serial query which might not be that efficient.
    Note that there is no general answer to the question if this particular hint will actually increase the performance of the DML statement. There are many things to consider, among them are if your system scales reasonably with parallel operations and if the underlying object structure actually allows to benefit from the parallel operation. There are cases where a serial operation might be faster than a parallel operation.
    For more information about direct-path and parallel execution, its implications and restrictions, see the documentation:
    http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/statements_9014.htm#i2163698
    http://download.oracle.com/docs/cd/B28359_01/server.111/b28313/usingpe.htm#CACEJACE
    You can use the EXPLAIN PLAN and the DBMS_XPLAN.DISPLAY function to get the execution plan of your statement that shows you what kind of parallel operations the optimizer estimates to perform.
    Regards,
    Randolf
    Oracle related stuff blog:
    http://oracle-randolf.blogspot.com/
    SQLTools++ for Oracle (Open source Oracle GUI for Windows):
    http://www.sqltools-plusplus.org:7676/
    http://sourceforge.net/projects/sqlt-pp/

  • I have 6 radio buttons.i want to use a case statement to read them.

    i have 6 radio buttons.i grouped them.i want to read them in a subroutine using a case statement.how can i read them

    Hi Leela,
    You cannot use the Case statement to read the radio buttons.
    nstead you will have to use Loop at Screen under At Selection Screen Output.
    Please refer to the below code or the reference:
    *& Report  ZHYPERION                                                   *
    *& Project : SubSea7
    Created on : 07/02/2007
    Created by : Puneet Jhari.
    *& Purpose : For SAP Interface download Hyperion.
    REPORT  zhyperion NO STANDARD PAGE HEADING  MESSAGE-ID zhyper.
    Start of Data Declaration
    TYPE-POOLS : truxs,vrm.
    TABLES : glpct,cepc.
    DATA : var TYPE i,
            total TYPE f.
    DATA : BEGIN OF wa2,
           ryear LIKE glpct-ryear,
           rbukrs LIKE glpct-rbukrs,
           racct LIKE glpct-racct,
           ksl01 LIKE glpct-ksl01,
           END OF wa2.
    DATA : BEGIN OF wa3,
           ryear LIKE glpct-ryear,
           rbukrs LIKE glpct-rbukrs,
           racct LIKE glpct-racct,
           ksl01 LIKE glpct-ksl01,
           END OF wa3.
    DATA : BEGIN OF wa4,
           racct LIKE glpct-racct,
           END OF wa4.
    DATA : BEGIN OF wa5,
           rbukrs LIKE glpct-rbukrs,
           racct LIKE glpct-racct,
           total1(8) TYPE p DECIMALS 2,
           END OF wa5.
    DATA : BEGIN OF wa9,
           khinr LIKE cepc-khinr,
           racct LIKE glpct-racct,
           total1(8) TYPE p DECIMALS 2,
           END OF wa9.
    DATA : BEGIN OF wa6,
           khinr LIKE cepc-khinr,
           prctr LIKE cepc-prctr,
           rprctr LIKE glpct-rprctr,
           ryear LIKE glpct-ryear,
           rbukrs LIKE glpct-rbukrs,
           racct LIKE glpct-racct,
           ksl01 LIKE glpct-ksl01,
           END OF wa6.
    DATA : BEGIN OF wa7,
           khinr LIKE cepc-khinr,
           prctr LIKE cepc-prctr,
           rprctr LIKE glpct-rprctr,
           ryear LIKE glpct-ryear,
           rbukrs LIKE glpct-rbukrs,
           racct LIKE glpct-racct,
           ksl01 LIKE glpct-ksl01,
           END OF wa7.
    DATA : itab3 LIKE TABLE OF wa2,
           itab4 LIKE TABLE OF wa3,
           itab5 LIKE TABLE OF wa4 WITH HEADER LINE,
           itab6 LIKE TABLE OF wa5 WITH HEADER LINE,
           itab7 LIKE TABLE OF wa6,
           itab8 LIKE TABLE OF wa7,
           itab10 LIKE TABLE OF wa9.
    DATA : flag(1) TYPE c,
           temp(6) TYPE c.
    DATA : itab2 TYPE truxs_t_text_data,
           itab9 TYPE truxs_t_text_data WITH HEADER LINE.
    DATA : name TYPE vrm_id,
           list TYPE vrm_values,
           value LIKE LINE OF list,
           FILNAM11 TYPE STRING,
           FILNAM21 TYPE STRING.
    End of Data Declaration
    Begin of Selection Screen
    SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
    PARAMETERS: r1 DEFAULT 'X' RADIOBUTTON GROUP g1 USER-COMMAND rad1,
    r2 RADIOBUTTON GROUP g1 .
    SELECTION-SCREEN END OF BLOCK b1.
    SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-005.
    PARAMETERS: rbukrs1 TYPE glpct-rbukrs MODIF ID ful,
                khinr1 TYPE cepc-khinr AS LISTBOX VISIBLE LENGTH 20
                MODIF ID sam ,
                ryear1 TYPE glpct-ryear MODIF ID ful,
                ryear2 TYPE glpct-ryear MODIF ID sam,
                rpmax1 TYPE i MODIF ID ful,
                rpmax2 TYPE i MODIF ID sam,
                filnam1 TYPE rlgrap-filename MODIF ID ful,
                filnam2 TYPE RLGRAP-FILENAME MODIF ID sam.
    SELECTION-SCREEN END OF BLOCK b3.
    End of Selection Screen
    AT SELECTION-SCREEN OUTPUT
    AT SELECTION-SCREEN OUTPUT.
    PERFORM populate.          "For populating the drop-down list.
    CLEAR VALUE.
    REFRESH LIST.
    NAME = 'KHINR1'.
    VALUE-KEY = '1S7_NOCASV'.
    VALUE-TEXT = '1S7_NOCASV'.
    APPEND VALUE TO LIST.
    VALUE-KEY = '1S7_NOCJOT'.
    VALUE-TEXT = '1S7_NOCJOT'.
    APPEND VALUE TO LIST.
    LOOP AT SCREEN.            "For toggling between the selection screens.
        IF r1 EQ 'X'.
          IF screen-group1 = 'SAM'.
            screen-active = 0.
          ENDIF.
        ELSEIF r2 EQ 'X'.
          IF screen-group1 = 'FUL'.
            screen-active = 0.
          ENDIF.
        ENDIF.
        MODIFY SCREEN.
      ENDLOOP.
    For the Drop-Down Listbox
      CALL FUNCTION 'VRM_SET_VALUES'
        EXPORTING
          id                    = name
          values                = list
    EXCEPTIONS
      ID_ILLEGAL_NAME       = 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.
    Begin of Data Selection
    START-OF-SELECTION.
    When Company Code radio button is selected.
      IF r1 EQ 'X'.            "If Company Code radio button is selected.
        IF rbukrs1 IS INITIAL.
          MESSAGE i002.
          LEAVE TO SCREEN 1000.
        ENDIF.
        IF rpmax1 IS INITIAL.
          MESSAGE i002.
          LEAVE TO SCREEN 1000.
        ENDIF.
        IF ryear1 IS INITIAL.
          MESSAGE i002.
          LEAVE TO SCREEN 1000.
        ENDIF.
        IF filnam1 IS INITIAL.
          MESSAGE i002.
          LEAVE TO SCREEN 1000.
        ENDIF.
    MOVE FILNAM1 TO FILNAM11.
        CASE rpmax1.
          WHEN '01'.
            SELECT ryear rbukrs racct ksl01
    FROM glpct INTO TABLE itab3 WHERE rbukrs EQ rbukrs1 AND ryear EQ ryear1.
          WHEN '02'.
            SELECT ryear rbukrs racct ksl02
    FROM glpct INTO TABLE itab3 WHERE rbukrs EQ rbukrs1 AND ryear EQ ryear1.
          WHEN '03'.
            SELECT ryear rbukrs racct ksl03
    FROM glpct INTO TABLE itab3 WHERE rbukrs EQ rbukrs1 AND ryear EQ ryear1.
          WHEN '04'.
            SELECT ryear rbukrs racct ksl04
    FROM glpct INTO TABLE itab3 WHERE rbukrs EQ rbukrs1 AND ryear EQ ryear1.
          WHEN '05'.
            SELECT ryear rbukrs racct ksl05
    FROM glpct INTO TABLE itab3 WHERE rbukrs EQ rbukrs1 AND ryear EQ ryear1.
          WHEN '06'.
            SELECT ryear rbukrs racct ksl06
    FROM glpct INTO TABLE itab3 WHERE rbukrs EQ rbukrs1 AND ryear EQ ryear1.
          WHEN '07'.
            SELECT ryear rbukrs racct ksl07
    FROM glpct INTO TABLE itab3 WHERE rbukrs EQ rbukrs1 AND ryear EQ ryear1.
          WHEN '08'.
            SELECT ryear rbukrs racct ksl08
    FROM glpct INTO TABLE itab3 WHERE rbukrs EQ rbukrs1 AND ryear EQ ryear1.
          WHEN '09'.
            SELECT ryear rbukrs racct ksl09
    FROM glpct INTO TABLE itab3 WHERE rbukrs EQ rbukrs1 AND ryear EQ ryear1.
          WHEN '10'.
            SELECT ryear rbukrs racct ksl10
    FROM glpct INTO TABLE itab3 WHERE rbukrs EQ rbukrs1 AND ryear EQ ryear1.
          WHEN '11'.
            SELECT ryear rbukrs racct ksl11
    FROM glpct INTO TABLE itab3 WHERE rbukrs EQ rbukrs1 AND ryear EQ ryear1.
          WHEN '12'.
            SELECT ryear rbukrs racct ksl12
    FROM glpct INTO TABLE itab3 WHERE rbukrs EQ rbukrs1 AND ryear EQ ryear1.
          WHEN '13'.
            SELECT ryear rbukrs racct ksl13
    FROM glpct INTO TABLE itab3 WHERE rbukrs EQ rbukrs1 AND ryear EQ ryear1.
          WHEN '14'.
            SELECT ryear rbukrs racct ksl14
    FROM glpct INTO TABLE itab3 WHERE rbukrs EQ rbukrs1 AND ryear EQ ryear1.
          WHEN '15'.
            SELECT ryear rbukrs racct ksl15
    FROM glpct INTO TABLE itab3 WHERE rbukrs EQ rbukrs1 AND ryear EQ ryear1.
          WHEN '16'.
            SELECT ryear rbukrs racct ksl16
    FROM glpct INTO TABLE itab3 WHERE rbukrs EQ rbukrs1 AND ryear EQ ryear1.
        ENDCASE.
        MOVE itab3 TO itab4.
        LOOP AT itab3 INTO wa2.
          flag = 0.
          LOOP AT itab5 INTO wa4.
            IF wa2-racct EQ wa4-racct.
              flag = 1.
              EXIT.
            ENDIF.
          ENDLOOP.
          DELETE ADJACENT DUPLICATES FROM itab5.
          IF flag = 1.
            CONTINUE.
          ENDIF.
          LOOP AT itab4 INTO wa3.
            IF wa2-rbukrs EQ wa3-rbukrs AND wa2-racct EQ wa3-racct AND
            wa2-ryear EQ wa3-ryear.
              total = total + wa3-ksl01.
            ENDIF.
          ENDLOOP.
          wa5-rbukrs = wa2-rbukrs.
          wa5-racct = wa2-racct+4(6).
          wa5-total1 = total.
          APPEND wa5 TO itab6.
          CLEAR total.
          APPEND wa2-racct TO itab5.
        ENDLOOP.
    If no data is available corresponding to the values entered.
        IF itab6[] IS INITIAL.
          MESSAGE i003.
        ENDIF.
    For making the file Comma separated
        CALL FUNCTION 'SAP_CONVERT_TO_TEX_FORMAT'
          EXPORTING
            i_field_seperator          = ','
    I_LINE_HEADER              =
      I_FILENAME                 =
      I_APPL_KEEP                = ' '
          TABLES
            i_tab_sap_data             = itab6
         CHANGING
           i_tab_converted_data       = itab2
    EXCEPTIONS
      CONVERSION_FAILED          = 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.
    For downloading it to the Presentation Server
       MOVE itab2[] TO itab9[].
       OPEN DATASET filnam1 FOR OUTPUT IN LEGACY TEXT MODE.
       LOOP AT itab9.
         TRANSFER itab9 TO filnam1.
       ENDLOOP.
       CLOSE DATASET filnam1.
       IF sy-subrc EQ 0.
         MESSAGE s004.
       ENDIF.
    CALL FUNCTION 'GUI_DOWNLOAD'
      EXPORTING
      BIN_FILESIZE                    =
        filename                        = FILNAM11
      FILETYPE                        = 'ASC'
      APPEND                          = ' '
      WRITE_FIELD_SEPARATOR           = ' '
      HEADER                          = '00'
      TRUNC_TRAILING_BLANKS           = ' '
      WRITE_LF                        = 'X'
      COL_SELECT                      = ' '
      COL_SELECT_MASK                 = ' '
      DAT_MODE                        = ' '
      CONFIRM_OVERWRITE               = ' '
      NO_AUTH_CHECK                   = ' '
      CODEPAGE                        = ' '
      IGNORE_CERR                     = ABAP_TRUE
      REPLACEMENT                     = '#'
      WRITE_BOM                       = ' '
      TRUNC_TRAILING_BLANKS_EOL       = 'X'
      WK1_N_FORMAT                    = ' '
      WK1_N_SIZE                      = ' '
      WK1_T_FORMAT                    = ' '
      WK1_T_SIZE                      = ' '
      WRITE_LF_AFTER_LAST_LINE        = ABAP_TRUE
    IMPORTING
      FILELENGTH                      =
      tables
        data_tab                        = itab2
      FIELDNAMES                      =
    EXCEPTIONS
      FILE_WRITE_ERROR                = 1
      NO_BATCH                        = 2
      GUI_REFUSE_FILETRANSFER         = 3
      INVALID_TYPE                    = 4
      NO_AUTHORITY                    = 5
      UNKNOWN_ERROR                   = 6
      HEADER_NOT_ALLOWED              = 7
      SEPARATOR_NOT_ALLOWED           = 8
      FILESIZE_NOT_ALLOWED            = 9
      HEADER_TOO_LONG                 = 10
      DP_ERROR_CREATE                 = 11
      DP_ERROR_SEND                   = 12
      DP_ERROR_WRITE                  = 13
      UNKNOWN_DP_ERROR                = 14
      ACCESS_DENIED                   = 15
      DP_OUT_OF_MEMORY                = 16
      DISK_FULL                       = 17
      DP_TIMEOUT                      = 18
      FILE_NOT_FOUND                  = 19
      DATAPROVIDER_EXCEPTION          = 20
      CONTROL_FLUSH_ERROR             = 21
      OTHERS                          = 22
    IF sy-subrc eq 0.
    message s004.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    When Region radio button is selected.
      ELSEIF r2 EQ 'X'.
        IF khinr1 IS INITIAL.
          MESSAGE i002.
          LEAVE TO SCREEN 1000.
        ENDIF.
        IF rpmax2 IS INITIAL.
          MESSAGE i002.
          LEAVE TO SCREEN 1000.
        ENDIF.
        IF ryear2 IS INITIAL.
          MESSAGE i002.
          LEAVE TO SCREEN 1000.
        ENDIF.
        IF filnam2 IS INITIAL.
          MESSAGE i002.
          LEAVE TO SCREEN 1000.
        ENDIF.
    MOVE FILNAM2 TO FILNAM21.
        CASE rpmax2.
          WHEN '01'.
           SELECT ckhinr cprctr grprctr gryear grbukrs gracct g~ksl01
           INTO CORRESPONDING FIELDS OF TABLE itab7
           FROM (  glpct AS g
                   INNER JOIN cepc AS c ON grprctr = cprctr )
           WHERE c~khinr = khinr1 AND
                 g~ryear = ryear2.
          WHEN '02'.
           SELECT ckhinr cprctr grprctr gryear grbukrs gracct g~ksl02
           INTO CORRESPONDING FIELDS OF TABLE itab7
           FROM (  glpct AS g
                   INNER JOIN cepc AS c ON grprctr = cprctr )
           WHERE c~khinr = khinr1 AND
                 g~ryear = ryear2.
          WHEN '03'.
           SELECT ckhinr cprctr grprctr gryear grbukrs gracct g~ksl03
           INTO CORRESPONDING FIELDS OF TABLE itab7
           FROM (  glpct AS g
                   INNER JOIN cepc AS c ON grprctr = cprctr )
           WHERE c~khinr = khinr1 AND
                 g~ryear = ryear2.
          WHEN '04'.
           SELECT ckhinr cprctr grprctr gryear grbukrs gracct g~ksl04
           INTO CORRESPONDING FIELDS OF TABLE itab7
           FROM (  glpct AS g
                   INNER JOIN cepc AS c ON grprctr = cprctr )
           WHERE c~khinr = khinr1 AND
                 g~ryear = ryear2.
          WHEN '05'.
           SELECT ckhinr cprctr grprctr gryear grbukrs gracct g~ksl05
           INTO CORRESPONDING FIELDS OF TABLE itab7
           FROM (  glpct AS g
                   INNER JOIN cepc AS c ON grprctr = cprctr )
           WHERE c~khinr = khinr1 AND
                 g~ryear = ryear2.
          WHEN '06'.
           SELECT ckhinr cprctr grprctr gryear grbukrs gracct g~ksl06
           INTO CORRESPONDING FIELDS OF TABLE itab7
           FROM (  glpct AS g
                   INNER JOIN cepc AS c ON grprctr = cprctr )
           WHERE c~khinr = khinr1 AND
                 g~ryear = ryear2.
          WHEN '07'.
           SELECT ckhinr cprctr grprctr gryear grbukrs gracct g~ksl07
           INTO CORRESPONDING FIELDS OF TABLE itab7
           FROM (  glpct AS g
                   INNER JOIN cepc AS c ON grprctr = cprctr )
           WHERE c~khinr = khinr1 AND
                 g~ryear = ryear2.
          WHEN '08'.
           SELECT ckhinr cprctr grprctr gryear grbukrs gracct g~ksl08
           INTO CORRESPONDING FIELDS OF TABLE itab7
           FROM (  glpct AS g
                   INNER JOIN cepc AS c ON grprctr = cprctr )
           WHERE c~khinr = khinr1 AND
                 g~ryear = ryear2.
          WHEN '09'.
           SELECT ckhinr cprctr grprctr gryear grbukrs gracct g~ksl09
           INTO CORRESPONDING FIELDS OF TABLE itab7
           FROM (  glpct AS g
                   INNER JOIN cepc AS c ON grprctr = cprctr )
           WHERE c~khinr = khinr1 AND
                 g~ryear = ryear2.
          WHEN '10'.
           SELECT ckhinr cprctr grprctr gryear grbukrs gracct g~ksl10
           INTO CORRESPONDING FIELDS OF TABLE itab7
           FROM (  glpct AS g
                   INNER JOIN cepc AS c ON grprctr = cprctr )
           WHERE c~khinr = khinr1 AND
                 g~ryear = ryear2.
          WHEN '11'.
           SELECT ckhinr cprctr grprctr gryear grbukrs gracct g~ksl11
           INTO CORRESPONDING FIELDS OF TABLE itab7
           FROM (  glpct AS g
                   INNER JOIN cepc AS c ON grprctr = cprctr )
           WHERE c~khinr = khinr1 AND
                 g~ryear = ryear2.
          WHEN '12'.
           SELECT ckhinr cprctr grprctr gryear grbukrs gracct g~ksl12
           INTO CORRESPONDING FIELDS OF TABLE itab7
           FROM (  glpct AS g
                   INNER JOIN cepc AS c ON grprctr = cprctr )
           WHERE c~khinr = khinr1 AND
                 g~ryear = ryear2.
          WHEN '13'.
           SELECT ckhinr cprctr grprctr gryear grbukrs gracct g~ksl13
           INTO CORRESPONDING FIELDS OF TABLE itab7
           FROM (  glpct AS g
                   INNER JOIN cepc AS c ON grprctr = cprctr )
           WHERE c~khinr = khinr1 AND
                 g~ryear = ryear2.
          WHEN '14'.
           SELECT ckhinr cprctr grprctr gryear grbukrs gracct g~ksl14
           INTO CORRESPONDING FIELDS OF TABLE itab7
           FROM (  glpct AS g
                   INNER JOIN cepc AS c ON grprctr = cprctr )
           WHERE c~khinr = khinr1 AND
                 g~ryear = ryear2.
          WHEN '15'.
           SELECT ckhinr cprctr grprctr gryear grbukrs gracct g~ksl15
           INTO CORRESPONDING FIELDS OF TABLE itab7
           FROM (  glpct AS g
                   INNER JOIN cepc AS c ON grprctr = cprctr )
           WHERE c~khinr = khinr1 AND
                 g~ryear = ryear2.
          WHEN '16'.
           SELECT ckhinr cprctr grprctr gryear grbukrs gracct g~ksl16
           INTO CORRESPONDING FIELDS OF TABLE itab7
           FROM (  glpct AS g
                   INNER JOIN cepc AS c ON grprctr = cprctr )
           WHERE c~khinr = khinr1 AND
                 g~ryear = ryear2.
        ENDCASE.
        MOVE itab7 TO itab8.
        LOOP AT itab7 INTO wa6.
          flag = 0.
          LOOP AT itab5 INTO wa4.
            IF wa6-racct EQ wa4-racct.
              flag = 1.
              EXIT.
            ENDIF.
          ENDLOOP.
          DELETE ADJACENT DUPLICATES FROM itab5.
          IF flag = 1.
            CONTINUE.
          ENDIF.
          LOOP AT itab8 INTO wa7.
            IF wa6-rbukrs EQ wa7-rbukrs AND wa6-racct EQ wa7-racct AND
            wa6-ryear EQ wa7-ryear.
              total = total + wa7-ksl01.
            ENDIF.
          ENDLOOP.
          wa9-khinr = khinr1.
          wa9-racct = wa6-racct+4(6).
          wa9-total1 = total.
          APPEND wa9 TO itab10.
          CLEAR total.
          APPEND wa6-racct TO itab5.
        ENDLOOP.
    *If no data is available corresponding to the values entered.
        IF itab10 IS INITIAL.
          MESSAGE i003.
        ENDIF.
    For making the file Comma separated
        CALL FUNCTION 'SAP_CONVERT_TO_TEX_FORMAT'
          EXPORTING
            i_field_seperator          = ','
      I_LINE_HEADER              =
      I_FILENAME                 =
      I_APPL_KEEP                = ' '
          TABLES
            i_tab_sap_data             = itab10
         CHANGING
           i_tab_converted_data       = itab2
    EXCEPTIONS
      CONVERSION_FAILED          = 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.
    For downloading it to the Presentation Server
       MOVE itab2[] TO itab9[].
       OPEN DATASET filnam2 FOR OUTPUT IN LEGACY TEXT MODE.
       LOOP AT itab9.
         TRANSFER itab9 TO filnam2.
       ENDLOOP.
       CLOSE DATASET filnam2.
       IF sy-subrc EQ 0.
         MESSAGE s004.
       ENDIF.
    CALL FUNCTION 'GUI_DOWNLOAD'
      EXPORTING
      BIN_FILESIZE                    =
        filename                        = FILNAM21
      FILETYPE                        = 'ASC'
      APPEND                          = ' '
      WRITE_FIELD_SEPARATOR           = ' '
      HEADER                          = '00'
      TRUNC_TRAILING_BLANKS           = ' '
      WRITE_LF                        = 'X'
      COL_SELECT                      = ' '
      COL_SELECT_MASK                 = ' '
      DAT_MODE                        = ' '
      CONFIRM_OVERWRITE               = ' '
      NO_AUTH_CHECK                   = ' '
      CODEPAGE                        = ' '
      IGNORE_CERR                     = ABAP_TRUE
      REPLACEMENT                     = '#'
      WRITE_BOM                       = ' '
      TRUNC_TRAILING_BLANKS_EOL       = 'X'
      WK1_N_FORMAT                    = ' '
      WK1_N_SIZE                      = ' '
      WK1_T_FORMAT                    = ' '
      WK1_T_SIZE                      = ' '
      WRITE_LF_AFTER_LAST_LINE        = ABAP_TRUE
    IMPORTING
      FILELENGTH                      =
      tables
        data_tab                        = itab2
      FIELDNAMES                      =
    EXCEPTIONS
      FILE_WRITE_ERROR                = 1
      NO_BATCH                        = 2
      GUI_REFUSE_FILETRANSFER         = 3
      INVALID_TYPE                    = 4
      NO_AUTHORITY                    = 5
      UNKNOWN_ERROR                   = 6
      HEADER_NOT_ALLOWED              = 7
      SEPARATOR_NOT_ALLOWED           = 8
      FILESIZE_NOT_ALLOWED            = 9
      HEADER_TOO_LONG                 = 10
      DP_ERROR_CREATE                 = 11
      DP_ERROR_SEND                   = 12
      DP_ERROR_WRITE                  = 13
      UNKNOWN_DP_ERROR                = 14
      ACCESS_DENIED                   = 15
      DP_OUT_OF_MEMORY                = 16
      DISK_FULL                       = 17
      DP_TIMEOUT                      = 18
      FILE_NOT_FOUND                  = 19
      DATAPROVIDER_EXCEPTION          = 20
      CONTROL_FLUSH_ERROR             = 21
      OTHERS                          = 22
    IF sy-subrc eq 0.
    message s004.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
      ENDIF.
    *&      Form  POPULATE
          text
    FORM populate.
      CLEAR value.
      REFRESH list.
      name = 'KHINR1'.
      value-key = '1S7_SUBSEA'.
      value-text = '1S7_SUBSEA'.
      APPEND value TO list.
      value-key = '1S7_GEN'.
      value-text = '1S7_GEN'.
      APPEND value TO list.
      value-key = '1S7'.
      value-text = '1S7'.
      APPEND value TO list.
      value-key = '1S7_CORPTP'.
      value-text = '1S7_CORPTP'.
      APPEND value TO list.
      value-key = '1S7_BRRE'.
      value-text = '1S7_BRRE'.
      APPEND value TO list.
      value-key = '1S7_BRCON'.
      value-text = '1S7_BRCON'.
      APPEND value TO list.
      value-key = '1S7_BRCJOB'.
      value-text = '1S7_BRCJOB'.
      APPEND value TO list.
      value-key = '1S7_BRCJBU'.
      value-text = '1S7_BRCJBU'.
      APPEND value TO list.
      value-key = '1S7_BRCJCO'.
      value-text = '1S7_BRCJCO'.
      APPEND value TO list.
      value-key = '1S7_BRCJIR'.
      value-text = '1S7_BRCJIR'.
      APPEND value TO list.
      value-key = '1S7_BRCJEN'.
      value-text = '1S7_BRCJEN'.
      APPEND value TO list.
      value-key = '1S7_BRCJPI'.
      value-text = '1S7_BRCJPI'.
      APPEND value TO list.
      value-key = '1S7_BRCJSU'.
      value-text = '1S7_BRCJSU'.
      APPEND value TO list.
      value-key = '1S7_BRCJFL'.
      value-text = '1S7_BRCJFL'.
      APPEND value TO list.
      value-key = '1S7_BRCJOT'.
      value-text = '1S7_BRCJOT'.
      APPEND value TO list.
      value-key = '1S7_BRCASV'.
      value-text = '1S7_BRCASV'.
      APPEND value TO list.
      value-key = '1S7_BRCASE'.
      value-text = '1S7_BRCASE'.
      APPEND value TO list.
      value-key = '1S7_BRCOOC'.
      value-text = '1S7_BRCOOC'.
      APPEND value TO list.
      value-key = '1S7_BRCOHD'.
      value-text = '1S7_BRCOHD'.
      APPEND value TO list.
      value-key = '1S7_BRCGEN'.
      value-text = '1S7_BRCGEN'.
      APPEND value TO list.
      value-key = '1S7_BRDRI'.
      value-text = '1S7_BRDRI'.
      APPEND value TO list.
      value-key = '1S7_BRDJOB'.
      value-text = '1S7_BRDJOB'.
      APPEND value TO list.
      value-key = '1S7_BRDASV'.
      value-text = '1S7_BRDASV'.
      APPEND value TO list.
      value-key = '1S7_BRDASE'.
      value-text = '1S7_BRDASE'.
      APPEND value TO list.
      value-key = '1S7_BRDAEW'.
      value-text = '1S7_BRDAEW'.
      APPEND value TO list.
      value-key = '1S7_BRDAEO'.
      value-text = '1S7_BRDAEO'.
      APPEND value TO list.
      value-key = '1S7_BRDAET'.
      value-text = '1S7_BRDAET'.
      APPEND value TO list.
      value-key = '1S7_BRDOOC'.
      value-text = '1S7_BRDOOC'.
      APPEND value TO list.
      value-key = '1S7_BRDOHD'.
      value-text = '1S7_BRDOHD'.
      APPEND value TO list.
      value-key = '1S7_BRVER'.
      value-text = '1S7_BRVER'.
      APPEND value TO list.
      value-key = '1S7_BRVJOB'.
      value-text = '1S7_BRVJOB'.
      APPEND value TO list.
      value-key = '1S7_BRVASV'.
      value-text = '1S7_BRVASV'.
      APPEND value TO list.
      value-key = '1S7_BRVASE'.
      value-text = '1S7_BRVASE'.
      APPEND value TO list.
      value-key = '1S7_BRVOOC'.
      value-text = '1S7_BRVOOC'.
      APPEND value TO list.
      value-key = '1S7_BRVOHD'.
      value-text = '1S7_BRVOHD'.
      APPEND value TO list.
      value-key = '1S7_UKRE'.
      value-text = '1S7_UKRE'.
      APPEND value TO list.
      value-key = '1S7_UKCON'.
      value-text = '1S7_UKCON'.
      APPEND value TO list.
      value-key = '1S7_UKCJOB'.
      value-text = '1S7_UKCJOB'.
      APPEND value TO list.
      value-key = '1S7_UKCJBU'.
      value-text = '1S7_UKCJBU'.
      APPEND value TO list.
      value-key = '1S7_UKCJCO'.
      value-text = '1S7_UKCJCO'.
      APPEND value TO list.
      value-key = '1S7_UKCJIR'.
      value-text = '1S7_UKCJIR'.
      APPEND value TO list.
      value-key = '1S7_UKCJEN'.
      value-text = '1S7_UKCJEN'.
      APPEND value TO list.
      value-key = '1S7_UKCJPI'.
      value-text = '1S7_UKCJPI'.
      APPEND value TO list.
      value-key = '1S7_UKCJSU'.
      value-text = '1S7_UKCJSU'.
      APPEND value TO list.
      value-key = '1S7_UKCJFL'.
      value-text = '1S7_UKCJFL'.
      APPEND value TO list.
      value-key = '1S7_UKCJOT'.
      value-text = '1S7_UKCJOT'.
      APPEND value TO list.
      value-key = '1S7_UKCASV'.
      value-text = '1S7_UKCASV'.
      APPEND value TO list.
      value-key = '1S7_UKCASE'.
      value-text = '1S7_UKCASE'.
      APPEND value TO list.
      value-key = '1S7_UKCOOC'.
      value-text = '1S7_UKCOOC'.
      APPEND value TO list.
      value-key = '1S7_UKBA'.
      value-text = '1S7_UKBA'.
      APPEND value TO list.
      value-key = '1S7_UKBATE'.
      value-text = '1S7_UKBATE'.
      APPEND value TO list.
      value-key = '1S7_UKCOHD'.
      value-text = '1S7_UKCOHD'.
      APPEND value TO list.
      value-key = '1S7_UKCGEN'.
      value-text = '1S7_UKCGEN'.
      APPEND value TO list.
      value-key = '1S7_UKDRI'.
      value-text = '1S7_UKDRI'.
      APPEND value TO list.
      value-key = '1S7_UKDJOB'.
      value-text = '1S7_UKDJOB'.
      APPEND value TO list.
      value-key = '1S7_UKDASV'.
      value-text = '1S7_UKDASV'.
      APPEND value TO list.
      value-key = '1S7_UKDASE'.
      value-text = '1S7_UKDASE'.
      APPEND value TO list.
      value-key = '1S7_UKDAEW'.
      value-text = '1S7_UKDAEW'.
      APPEND value TO list.
      value-key = '1S7_UKDAEO'.
      value-text = '1S7_UKDAEO'.
      APPEND value TO list.
      value-key = '1S7_UKDAET'.
      value-text = '1S7_UKDAET'.
      APPEND value TO list.
      value-key = '1S7_UKDOOC'.
      value-text = '1S7_UKDOOC'.
      APPEND value TO list.
      value-key = '1S7_UKDOHD'.
      value-text = '1S7_UKDOHD'.
      APPEND value TO list.
      value-key = '1S7_UKVER'.
      value-text = '1S7_UKVER'.
      APPEND value TO list.
      value-key = '1S7_UKVJOB'.
      value-text = '1S7_UKVJOB'.
      APPEND value TO list.
      value-key = '1S7_UKVASV'.
      value-text = '1S7_UKVASV'.
      APPEND value TO list.
      value-key = '1S7_UKVASE'.
      value-text = '1S7_UKVASE'.
      APPEND value TO list.
      value-key = '1S7_UKVOOC'.
      value-text = '1S7_UKVOOC'.
      APPEND value TO list.
      value-key = '1S7_UKVOHD'.
      value-text = '1S7_UKVOHD'.
      APPEND value TO list.
      value-key = '1S7_NORE'.
      value-text = '1S7_NORE'.
      APPEND value TO list.
      value-key = '1S7_NOCON'.
      value-text = '1S7_NOCON'.
      APPEND value TO list.
      value-key = '1S7_NOCJOB'.
      value-text = '1S7_NOCJOB'.
      APPEND value TO list.
      value-key = '1S7_NOCJBU'.
      value-text = '1S7_NOCJBU'.
      APPEND value TO list.
      value-key = '1S7_NOCJCO'.
      value-text = '1S7_NOCJCO'.
      APPEND value TO list.
      value-key = '1S7_NOCJIR'.
      value-text = '1S7_NOCJIR'.
      APPEND value TO list.
      value-key = '1S7_NOCJEN'.
      value-text = '1S7_NOCJEN'.
      APPEND value TO list.
      value-key = '1S7_NOCJPI'.
      value-text = '1S7_NOCJPI'.
      APPEND value TO list.
      value-key = '1S7_NOCJSU'.
      value-text = '1S7_NOCJSU'.
      APPEND value TO list.
      value-key = '1S7_NOCJFL'.
      value-text = '1S7_NOCJFL'.
      APPEND value TO list.
      value-key = '1S7_NOCJOT'.
      value-text = '1S7_NOCJOT'.
      APPEND value TO list.
      value-key = '1S7_NOCASV'.
      value-text = '1S7_NOCASV'.
      APPEND value TO list.
      value-key = '1S7_NOCASE'.
      value-text = '1S7_NOCASE'.
      APPEND value TO list.
      value-key = '1S7_NOCOOC'.
      value-text = '1S7_NOCOOC'.
      APPEND value TO list.
      value-key = '1S7_NOCOHD'.
      value-text = '1S7_NOCOHD'.
      APPEND value TO list.
      value-key = '1S7_NOCGEN'.
      value-text = '1S7_NOCGEN'.
      APPEND value TO list.
      value-key = '1S7_NODRI'.
      value-text = '1S7_NODRI'.
      APPEND value TO list.
      value-key = '1S7_NODJOB'.
      value-text = '1S7_NODJOB'.
      APPEND value TO list.
      value-key = '1S7_NODASV'.
      value-text = '1S7_NODASV'.
      APPEND value TO list.
      value-key = '1S7_NODASE'.
      value-text = '1S7_NODASE'.
      APPEND value TO list.
      value-key = '1S7_NODAEW'.
      value-text = '1S7_NODAEW'.
      APPEND value TO list.
      value-key = '1S7_NODAEO'.
      value-text = '1S7_NODAEO'.
      APPEND value TO list.
      value-key = '1S7_NODAET'.
      value-text = '1S7_NODAET'.
      APPEND value TO list.
      value-key = '1S7_NODOOC'.
      value-text = '1S7_NODOOC'.
      APPEND value TO list.
      value-key = '1S7_NODOHD'.
      value-text = '1S7_NODOHD'.
      APPEND value TO list.
      value-key = '1S7_NOVER'.
      value-text = '1S7_NOVER'.
      APPEND value TO list.
      value-key = '1S7_NOVJOB'.
      value-text = '1S7_NOVJOB'.
      APPEND value TO list.
      value-key = '1S7_NOVASV'.
      value-text = '1S7_NOVASV'.
      APPEND value TO list.
      value-key = '1S7_NOVASE'.
      value-text = '1S7_NOVASE'.
      APPEND value TO list.
      value-key = '1S7_NOVOOC'.
      value-text = '1S7_NOVOOC'.
      APPEND value TO list.
      value-key = '1S7_NOVOHD'.
      value-text = '1S7_NOVOHD'.
      APPEND value TO list.
      value-key = '1S7_GORE'.
      value-text = '1S7_GORE'.
      APPEND value TO list.
      value-key = '1S7_GOCON'.
      value-text = '1S7_GOCON'.
      APPEND value TO list.
      value-key = '1S7_GOCJOB'.
      value-text = '1S7_GOCJOB'.
      APPEND value TO list.
      value-key = '1S7_GOCJBU'.
      value-text = '1S7_GOCJBU'.
      APPEND value TO list.
      value-key = '1S7_GOCJCO'.
      value-text = '1S7_GOCJCO'.
      APPEND value TO list.
      value-key = '1S7_GOCJIR'.
      value-text = '1S7_GOCJIR'.
      APPEND value TO list.
      value-key = '1S7_GOCJEN'.
      value-text = '1S7_GOCJEN'.
      APPEND value TO list.
      value-key = '1S7_GOCJPI'.
      value-text = '1S7_GOCJPI'.
      APPEND value TO list.
      value-key = '1S7_GOCJSU'.
      value-text = '1S7_GOCJSU'.
      APPEND value TO list.
      value-key = '1S7_GOCJFL'.
      value-text = '1S7_GOCJFL'.
      APPEND value TO list.
      value-key = '1S7_GOCJOT'.
      value-text = '1S7_GOCJOT'.
      APPEND value TO list.
      value-key = '1S7_GOCASV'.
      value-text = '1S7_GOCASV'.
      APPEND value TO list.
      value-key = '1S7_GOCASE'.
      value-text = '1S7_GOCASE'.
      APPEND value TO list.
      value-key = '1S7_GOCOOC'.
      value-text = '1S7_GOCOOC'.
      APPEND value TO list.
      value-key = '1S7_GOCOHD'.
      value-text = '1S7_GOCOHD'.
      APPEND value TO list.
      value-key = '1S7_GOCGEN'.
      value-text = '1S7_GOCGEN'.
      APPEND value TO list.
      value-key = '1S7_GODRI'.
      value-text = '1S7_GODRI'.
      APPEND value TO list.
      value-key = '1S7_GODJOB'.
      value-text = '1S7_GODJOB'.
      APPEND value TO list.
      value-key = '1S7_GODASV'.
      value-text = '1S7_GODASV'.
      APPEND value TO list.
      value-key = '1S7_GODASE'.
      value-text = '1S7_GODASE'.
      APPEND value TO list.
      value-key = '1S7_GODAEW'.
      value-text = '1S7_GODAEW'.
      APPEND value TO list.
      value-key = '1S7_GODAEO'.
      value-text = '1S7_GODAEO'.
      APPEND value TO list.
      value-key = '1S7_GODAET'.
      value-text = '1S7_GODAET'.
      APPEND value TO list.
      value-key = '1S7_GODOOC'.
      value-text = '1S7_GODOOC'.
      APPEND value TO list.
      value-key = '1S7_GODOHD'.
      value-text = '1S7_GODOHD'.
      APPEND value TO list.
      value-key = '1S7_GOVER'.
      value-text = '1S7_GOVER'.
      APPEND value TO list.
      value-key = '1S7_GOVJOB'.
      value-text = '1S7_GOVJOB'.
      APPEND value TO list.
      value-key = '1S7_GOVASV'.
      value-text = '1S7_GOVASV'.
      APPEND value TO list.
      value-key = '1S7_GOVASE'.
      value-text = '1S7_GOVASE'.
      APPEND value TO list.
      value-key = '1S7_GOVOOC'.
      value-text = '1S7_GOVOOC'.
      APPEND value TO list.
      value-key = '1S7_GOVOHD'.
      value-text = '1S7_GOVOHD'.
      APPEND value TO list.
      value-key = '1S7_GVRE'.
      value-text = '1S7_GVRE'.
      APPEND value TO list.
      value-key = '1S7_GVCON'.
      value-text = '1S7_GVCON'.
      APPEND value TO list.
      value-key = '1S7_GVCJOB'.
      value-text = '1S7_GVCJOB'.
      APPEND value TO list.
      value-key = '1S7_GVCJBU'.
      value-text = '1S7_GVCJBU'.
      APPEND value TO list.
      value-key = '1S7_GVCJCO'.
      value-text = '1S7_GVCJCO'.
      APPEND value TO list.
      value-key = '1S7_GVCJIR'.
      value-text = '1S7_GVCJIR'.
      APPEND value TO list.
      value-key = '1S7_GVCJEN'.
      value-text = '1S7_GVCJEN'.
      APPEND value TO list.
      value-key = '1S7_GVCJPI'.
      value-text = '1S7_GVCJPI'.
      APPEND value TO list.
      value-key = '1S7_GVCJSU'.
      value-text = '1S7_GVCJSU'.
      APPEND value TO list.
      value-key = '1S7_GVCJFL'.
      value-text = '1S7_GVCJFL'.
      APPEND value TO list.
      value-key = '1S7_GVCJOT'.
      value-text = '1S7_GVCJOT'.
      APPEND value TO list.
      value-key = '1S7_GVCASV'.
      value-text = '1S7_GVCASV'.
      APPEND value TO list.
      value-key = '1S7_GVCASE'.
      value-text = '1S7_GVCASE'.
      APPEND value TO list.
      value-key = '1S7_GVCOOC'.
      value-text = '1S7_GVCOOC'.
      APPEND value TO list.
      value-key = '1S7_GVCOHD'.
      value-text = '1S7_GVCOHD'.
      APPEND value TO list.
      value-key = '1S7_GVCGEN'.
      value-text = '1S7_GVCGEN'.
      APPEND value TO list.
      value-key = '1S7_GVDRI'.
      value-text = '1S7_GVDRI'.
      APPEND value TO list.
      value-key = '1S7_GVDJOB'.
      value-text = '1S7_GVDJOB'.
      APPEND value TO list.
      value-key = '1S7_GVDASV'.
      value-text = '1S7_GVDASV'.
      APPEND value TO list.
      value-key = '1S7_GVDASE'.
      value-text = '1S7_GVDASE'.
      APPEND value TO list.
      value-key = '1S7_GVDOOC'.
      value-text = '1S7_GVDOOC'.
      APPEND value TO list.
      value-key = '1S7_GVDOHD'.
      value-text = '1S7_GVDOHD'.
      APPEND value TO list.
      value-key = '1S7_GVVER'.
      value-text = '1S7_GVVER'.
      APPEND value TO list.
      value-key = '1S7_GVVJOB'.
      value-text = '1S7_GVVJOB'.
      APPEND value TO list.
      value-key = '1S7_GVVASV'.
      value-text = '1S7_GVVASV'.
      APPEND value TO list.
      value-key = '1S7_GVVASE'.
      value-text = '1S7_GVVASE'.
      APPEND value TO list.
      value-key = '1S7_GVVOOC'.
      value-text = '1S7_GVVOOC'.
      APPEND value TO list.
      value-key = '1S7_GVVOHD'.
      value-text = '1S7_GVVOHD'.
      APPEND value TO list.
      value-key = '1S7_GCRE'.
      value-text = '1S7_GCRE'.
      APPEND value TO list.
      value-key = '1S7_GCCON'.
      value-text = '1S7_GCCON'.
      APPEND value TO list.
      value-key = '1S7_GCCJOB'.
      value-text = '1S7_GCCJOB'.
      APPEND value TO list.
      value-key = '1S7_GCCJBU'.
      value-text = '1S7_GCCJBU'.
      APPEND value TO list.
      value-key = '1S7_GCCJCO'.
      value-text = '1S7_GCCJCO'.
      APPEND value TO list.
      value-key = '1S7_GCCJIR'.
      value-text = '1S7_GCCJIR'.
      APPEND value TO list.
      value-key = '1S7_GCCJEN'.
      value-text = '1S7_GCCJEN'.
      APPEND value TO list.
      value-key = '1S7_GCCJPI'.
      value-text = '1S7_GCCJPI'.
      APPEND value TO list.
      value-key = '1S7_GCCJSU'.
      value-text = '1S7_GCCJSU'.
      APPEND value TO list.
      value-key = '1S7_GCCJFL'.
      value-text = '1S7_GCCJFL'.
      APPEND value TO list.
      value-key = '1S7_GCCJOT'.
      value-text = '1S7_GCCJOT'.
      APPEND value TO list.
      value-key = '1S7_GCCASV'.
      value-text = '1S7_GCCASV'.
      APPEND value TO list.
      value-key = '1S7_GCCASE'.
      value-text = '1S7_GCCASE'.
      APPEND value TO list.
      value-key = '1S7_GCCOOC'.
      value-text = '1S7_GCCOOC'.
      APPEND value TO list.
      value-key = '1S7_GCCOHD'.
      value-text = '1S7_GCCOHD'.
      APPEND value TO list.
      value-key = '1S7_GCCRD'.
      value-text = '1S7_GCCRD'.
      APPEND value TO list.
      value-key = '1S7_GCCGEN'.
      value-text = '1S7_GCCGEN'.
      APPEND value TO list.
      value-key = '1S7_GCDRI'.
      value-text = '1S7_GCDRI'.
      APPEND value TO list.
      value-key = '1S7_GCDJOB'.
      value-text = '1S7_GCDJOB'.
      APPEND value TO list.
      value-key = '1S7_GCDASV'.
      value-text = '1S7_GCDASV'.
      APPEND value TO list.
      value-key = '1S7_GCDASE'.
      value-text = '1S7_GCDASE'.
      APPEND value TO list.
      value-key = '1S7_GCDOOC'.
      value-text = '1S7_GCDOOC'.
      APPEND value TO list.
      value-key = '1S7_GCDOHD'.
      value-text = '1S7_GCDOHD'.
      APPEND value TO list.
      value-key = '1S7_GCVER'.
      value-text = '1S7_GCVER'.
      APPEND value TO list.
      value-key = '1S7_GCVJOB'.
      value-text = '1S7_GCVJOB'.
      APPEND value TO list.
      value-key = '1S7_GCVASV'.
      value-text = '1S7_GCVASV'.
      APPEND value TO list.
      value-key = '1S7_GCVASE'.
      value-text = '1S7_GCVASE'.
      APPEND value TO list.
      value-key = '1S7_GCVOOC'.
      value-text = '1S7_GCVOOC'.
      APPEND value TO list.
      value-key = '1S7_GCVOHD'.

Maybe you are looking for