SQLScript mit AMDP (ABAP): Unterschied zwischen den Versionen
Aus Matts Wiki
Matt (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung  | 
				Matt (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung  | 
				||
| (5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 3: | Zeile 3: | ||
Siehe auch: [[AMDP_(ABAP)]]  | Siehe auch: [[AMDP_(ABAP)]]  | ||
<syntaxhighlight lang="abap">  | |||
CLASS ZMO_CL_AMDP_01 DEFINITION  | |||
  PUBLIC  | |||
  FINAL  | |||
  CREATE PUBLIC .  | |||
  PUBLIC SECTION.  | |||
    " Interface notwendig, um in Klasse AMDP nutzen zu können  | |||
    INTERFACES: IF_AMDP_MARKER_HDB.  | |||
    TYPES:  | |||
      BEGIN OF TY_DATECALC_RES,  | |||
        KEY_FIELD     TYPE N LENGTH 10,  | |||
        FROM_AMOUNT   TYPE P LENGTH 10 DECIMALS 2,  | |||
        FROM_CURRENCY TYPE C LENGTH 10,  | |||
        FROM_DATE     TYPE DATS,  | |||
        TO_AMOUNT     TYPE P LENGTH 10 DECIMALS 2,  | |||
        TO_DATE       TYPE DATS,  | |||
        TEXT          TYPE C LENGTH 255,  | |||
      END OF TY_DATECALC_RES.  | |||
    TYPES:  | |||
      TT_DATECALC_RES TYPE STANDARD TABLE OF TY_DATECALC_RES WITH EMPTY KEY,  | |||
      TV_CURR         TYPE C LENGTH 5.  | |||
    CLASS-METHODS EXCEPTION_HANDLING_AMDP_HDB  | |||
      IMPORTING  | |||
                VALUE(IV_SQL_OBJECT_SCHEMA) TYPE ZTW_CL_AMDP_01=>TV_SQL_OBJECT_SCHEMA  | |||
                VALUE(IV_SQL_OBJECT_NAME)   TYPE ZTW_CL_AMDP_01=>TV_SQL_OBJECT_NAME  | |||
                VALUE(IV_SQL_ERROR_CODE)    TYPE INTEGER  | |||
                VALUE(IV_SQL_ERROR_MESSAGE) TYPE ZTW_CL_AMDP_01=>TV_SQL_ERROR_MESSAGE  | |||
      CHANGING  | |||
                VALUE(CT_MESG)              TYPE TREXT_PE_MSG  | |||
      RAISING   CX_AMDP_ERROR.  | |||
    "!Aufgabe 1: Inhalt der Tabelle ZTW_AMDP_DEMO_01 zurückgeben  | |||
    "! Import- und Export-Parameter werden als VALUE übergeben  | |||
    "! Export-Parameter einen statischen Datentyp / Tabellentyp haben  | |||
    CLASS-METHODS METHOD_01_READ  | |||
      EXPORTING  | |||
        VALUE(ET_AMDP) TYPE ZTW_TT_AMDP_DEMO_01  | |||
      RAISING  | |||
        CX_AMDP_ERROR.  | |||
    "!Aufgabe 2: Inhalt der Tabelle ZTW_AMDP_DEMO_01 zurückgeben;  | |||
    "! Jeden Satz umgerechnen nach EUR;  | |||
    "! Neues Feld DATE_FIELD_NEW: Datum in DATE_FIELD um 30 Tage erhöhen  | |||
    "! Stichtag Umrechnung: 1.1. des Jahres aus DATE_FIELD  | |||
    "! Umrechnungskurs INVB  | |||
    CLASS-METHODS  | |||
      METHOD_02_SQLSCRIPT  | |||
        EXPORTING  | |||
          VALUE(ET_AMDP) TYPE TT_DATECALC_RES  | |||
        RAISING  | |||
          CX_AMDP_ERROR.  | |||
    "!Aufgabe 3: Inhalt der Tabelle ZTW_AMDP_DEMO_01 zurückgeben;  | |||
    "! Jeden Satz umrechnen nach iv_curr;  | |||
    "! Neues Feld DATE_FIELD_NEW: Datum in DATE_FIELD um iv_days Tage erhöhen  | |||
    "! Stichtag Umrechnung: 1.1. des Jahres aus DATE_FIELD  | |||
    "! Umrechnungskurs INVB  | |||
    CLASS-METHODS  | |||
      METHOD_03_IMPORT  | |||
        IMPORTING  | |||
          VALUE(IV_CURR) TYPE TV_CURR  | |||
          VALUE(IV_DAYS) TYPE I  | |||
        EXPORTING  | |||
          VALUE(ET_AMDP) TYPE TT_DATECALC_RES  | |||
          VALUE(ET_MESG) TYPE TREXT_PE_MSG  | |||
        RAISING  | |||
          CX_AMDP_ERROR.  | |||
    "!Aufgabe 5: Erhoehung von iv_days um 5, dann Aufruf der  | |||
    "! DB Prozedur ZMO_CL_AMDP_01=>method03_sqlscript_import  | |||
    "! mit iv_curr und iv_days und Rueckgabe der Ergebnisse  | |||
    CLASS-METHODS  | |||
      METHOD_05_USING  | |||
        IMPORTING  | |||
          VALUE(IV_CURR) TYPE TV_CURR  | |||
          VALUE(IV_DAYS) TYPE I  | |||
        EXPORTING  | |||
          VALUE(ET_AMDP) TYPE TT_DATECALC_RES  | |||
          VALUE(ET_MESG) TYPE TREXT_PE_MSG  | |||
        RAISING  | |||
          CX_AMDP_ERROR.  | |||
    "!Aufgabe 6: Filtere in der Rückgabe der Methode die  | |||
    "! Tabelle ZTW_AMDP_DEMO_01 dynamisch, je nach Input der Methode  | |||
    CLASS-METHODS  | |||
      METHOD_06_FILTER  | |||
        IMPORTING  | |||
          VALUE(IV_FILTER) TYPE STRING  | |||
        EXPORTING  | |||
          VALUE(ET_AMDP) TYPE ztw_tt_amdp_demo_01  | |||
          VALUE(ET_MESG) TYPE TREXT_PE_MSG  | |||
        RAISING  | |||
          CX_AMDP_ERROR.  | |||
    CLASS-METHODS: START.  | |||
  PROTECTED SECTION.  | |||
  PRIVATE SECTION.  | |||
ENDCLASS.  | |||
CLASS ZMO_CL_AMDP_01 IMPLEMENTATION.  | |||
  METHOD EXCEPTION_HANDLING_AMDP_HDB  BY DATABASE PROCEDURE FOR HDB LANGUAGE SQLSCRIPT OPTIONS READ-ONLY.  | |||
    /*  | |||
    credits @Leon Struski, PROCON IT  | |||
    */  | |||
    declare exit handler FOR SQLEXCEPTION  | |||
    BEGIN  | |||
      CT_MESG = SELECT  | |||
      'ZTW_MSG'                                 as "MSGID",  | |||
      '000'                                     as "MSGNO",  | |||
      'E'                                       as "MSGTY",  | |||
      'SQL Exception occured. In'               as "MSGV1",  | |||
      'Error Code is:'                          as "MSGV2",  | |||
      CAST (::SQL_ERROR_CODE   as NVARCHAR(50)) as "MSGV3",  | |||
      ''                                        as "MSGV4",  | |||
      ''                                        as "CONTEXT"  | |||
      FROM DUMMY  | |||
      union all  | |||
      SELECT  | |||
      'ZTW_MSG'                                                                                 as "MSGID",  | |||
      '000'                                                                                               as "MSGNO",  | |||
      'E'                                                                                                 as "MSGTY",  | |||
      CAST ( SUBSTRING(::CURRENT_OBJECT_SCHEMA || '.' ||::CURRENT_OBJECT_NAME, 1, 50)   as NVARCHAR(50))  as "MSGV1",  | |||
      CAST ( SUBSTRING(::CURRENT_OBJECT_SCHEMA || '.' ||::CURRENT_OBJECT_NAME, 51, 50)  as NVARCHAR(50))  as "MSGV2",  | |||
      CAST ( SUBSTRING(::CURRENT_OBJECT_SCHEMA || '.' ||::CURRENT_OBJECT_NAME, 101, 50) as NVARCHAR(50))  as "MSGV3",  | |||
      CAST ( SUBSTRING(::CURRENT_OBJECT_SCHEMA || '.' ||::CURRENT_OBJECT_NAME, 152, 50) as NVARCHAR(50))  as "MSGV4",  | |||
      ''                                                                                                  as "CONTEXT"  | |||
      FROM DUMMY  | |||
      union all  | |||
      SELECT  | |||
      'ZTW_MSG'                                               as "MSGID",  | |||
      '000'                                                             as "MSGNO",  | |||
      'E'                                                               as "MSGTY",  | |||
      CAST( SUBSTRING(::SQL_ERROR_MESSAGE , 1, 50)    as NVARCHAR(50))  as "MSGV1",  | |||
      CAST( SUBSTRING(::SQL_ERROR_MESSAGE , 51, 50)   as NVARCHAR(50))  as "MSGV2",  | |||
      CAST( SUBSTRING(::SQL_ERROR_MESSAGE , 101, 50)  as NVARCHAR(50))  as "MSGV3",  | |||
      CAST( SUBSTRING(::SQL_ERROR_MESSAGE , 153, 50)  as NVARCHAR(50))  as "MSGV4",  | |||
      ''                                                                as "CONTEXT"  | |||
      FROM DUMMY  | |||
      union all select * from :CT_MESG;  | |||
    END;  | |||
    CT_MESG = SELECT  | |||
    'ZTW_MSG'                         as "MSGID",  | |||
    '000'                                       as "MSGNO",  | |||
    'E'                                         as "MSGTY",  | |||
    'SQL Exception occured.'                    as "MSGV1",  | |||
    'Error Code is:'                            as "MSGV2",  | |||
    CAST ( iv_SQL_ERROR_CODE   as NVARCHAR(50)) as "MSGV3",  | |||
    ''                                          as "MSGV4",  | |||
    ''                                          as "CONTEXT"  | |||
    FROM DUMMY  | |||
    union all  | |||
    SELECT  | |||
    'ZTW_MSG'                                                                           as "MSGID",  | |||
    '000'                                                                                         as "MSGNO",  | |||
    'E'                                                                                           as "MSGTY",  | |||
    CAST ( SUBSTRING(IV_SQL_OBJECT_SCHEMA || '.' ||IV_SQL_OBJECT_NAME, 1, 50)   as NVARCHAR(50))  as "MSGV1",  | |||
    CAST ( SUBSTRING(IV_SQL_OBJECT_SCHEMA || '.' ||IV_SQL_OBJECT_NAME, 51, 50)  as NVARCHAR(50))  as "MSGV2",  | |||
    CAST ( SUBSTRING(IV_SQL_OBJECT_SCHEMA || '.' ||IV_SQL_OBJECT_NAME, 102, 50) as NVARCHAR(50))  as "MSGV3",  | |||
    CAST ( SUBSTRING(IV_SQL_OBJECT_SCHEMA || '.' ||IV_SQL_OBJECT_NAME, 153, 50) as NVARCHAR(50))  as "MSGV4",  | |||
    ''                                                                                            as "CONTEXT"  | |||
    FROM DUMMY  | |||
    union all  | |||
    SELECT  | |||
    'ZTW_MSG'                                               as "MSGID",  | |||
    '000'                                                             as "MSGNO",  | |||
    'E'                                                               as "MSGTY",  | |||
    CAST( SUBSTRING(iv_SQL_ERROR_MESSAGE , 1, 50)   as NVARCHAR(50))  as "MSGV1",  | |||
    CAST( SUBSTRING(iv_SQL_ERROR_MESSAGE , 51, 50)  as NVARCHAR(50))  as "MSGV2",  | |||
    CAST( SUBSTRING(iv_SQL_ERROR_MESSAGE , 101, 50) as NVARCHAR(50))  as "MSGV3",  | |||
    CAST( SUBSTRING(iv_SQL_ERROR_MESSAGE , 153, 50) as NVARCHAR(50))  as "MSGV4",  | |||
    ''                                                                as "CONTEXT"  | |||
    FROM DUMMY  | |||
    union all select * from :CT_MESG;  | |||
  ENDMETHOD.  | |||
  METHOD METHOD_01_READ BY DATABASE PROCEDURE FOR HDB LANGUAGE SQLSCRIPT OPTIONS READ-ONLY USING ZTW_AMDP_DEMO_01.  | |||
    et_amdp =  | |||
      select * from ZTW_AMDP_DEMO_01;  | |||
  ENDMETHOD.  | |||
  METHOD METHOD_02_SQLSCRIPT BY DATABASE PROCEDURE FOR HDB LANGUAGE SQLSCRIPT OPTIONS READ-ONLY USING ZTW_AMDP_DEMO_01.  | |||
    et_amdp =  | |||
      select  | |||
            key_field,  | |||
            amount as from_amount,  | |||
            currency as from_currency,  | |||
            date_field as from_date,  | |||
            CONVERT_CURRENCY(  | |||
                amount              => amount,  | |||
                source_unit_column  => currency,  | |||
                schema              => ::CURRENT_OBJECT_SCHEMA,  | |||
                target_unit_column  => 'EUR',  | |||
                steps               => 'shift,convert,shift_back',  | |||
                reference_date      => TO_DATE('2018-01-01'),  | |||
                client              => '010',  | |||
                conversion_type     => 'INVB'  | |||
              ) AS to_amount,  | |||
            to_dats(add_days(date_field, 30)) as to_date,  | |||
            text  | |||
        from ZTW_AMDP_DEMO_01;  | |||
  ENDMETHOD.  | |||
  METHOD METHOD_03_IMPORT BY DATABASE PROCEDURE FOR HDB LANGUAGE SQLSCRIPT OPTIONS READ-ONLY USING ZTW_AMDP_DEMO_01 ZMO_CL_AMDP_01=>EXCEPTION_HANDLING_AMDP_HDB.  | |||
    DECLARE EXIT HANDLER FOR SQLEXCEPTION  | |||
      BEGIN  | |||
        call "ZMO_CL_AMDP_01=>EXCEPTION_HANDLING_AMDP_HDB"(  | |||
        iv_sql_object_schema  => ::CURRENT_OBJECT_SCHEMA,  | |||
        iv_sql_OBJECT_NAME    => ::CURRENT_OBJECT_NAME,  | |||
        iv_SQL_ERROR_CODE     => ::SQL_ERROR_CODE,  | |||
        iv_SQL_ERROR_MESSAGE  => ::SQL_ERROR_MESSAGE,  | |||
        ct_mesg__IN__         => :et_mesg,  | |||
        ct_mesg               => :et_mesg );  | |||
      END;  | |||
    et_amdp =  | |||
      select  | |||
            key_field,  | |||
            amount as from_amount,  | |||
            currency as from_currency,  | |||
            date_field as from_date,  | |||
            CONVERT_CURRENCY(  | |||
                amount              => amount,  | |||
                source_unit_column  => currency,  | |||
                schema              => ::CURRENT_OBJECT_SCHEMA,  | |||
                target_unit_column  => :iv_curr,  | |||
                steps               => 'shift,convert,shift_back',  | |||
                reference_date      => TO_DATE('2018-01-01'),  | |||
                client              => '010',  | |||
                conversion_type     => 'INVB'  | |||
              ) AS to_amount,  | |||
            to_dats(add_days(date_field, :iv_days)) as to_date,  | |||
            text  | |||
        from ZTW_AMDP_DEMO_01;  | |||
  ENDMETHOD.  | |||
  METHOD METHOD_05_USING BY DATABASE PROCEDURE FOR HDB LANGUAGE SQLSCRIPT OPTIONS READ-ONLY USING ZMO_CL_AMDP_01=>METHOD_03_IMPORT.  | |||
    iv_days = iv_days + 5;  | |||
    call "ZMO_CL_AMDP_01=>METHOD_03_IMPORT" (  | |||
      iv_curr => :iv_curr,  | |||
      iv_days => :iv_days,  | |||
      et_amdp => :et_amdp,  | |||
      et_mesg => :et_mesg  | |||
    );  | |||
  ENDMETHOD.  | |||
  METHOD METHOD_06_FILTER BY DATABASE PROCEDURE FOR HDB LANGUAGE SQLSCRIPT OPTIONS READ-ONLY USING ZTW_AMDP_DEMO_01 ZMO_CL_AMDP_01=>EXCEPTION_HANDLING_AMDP_HDB.  | |||
    DECLARE EXIT HANDLER FOR SQLEXCEPTION  | |||
      BEGIN  | |||
        call "ZMO_CL_AMDP_01=>EXCEPTION_HANDLING_AMDP_HDB"(  | |||
        iv_sql_object_schema  => ::CURRENT_OBJECT_SCHEMA,  | |||
        iv_sql_OBJECT_NAME    => ::CURRENT_OBJECT_NAME,  | |||
        iv_SQL_ERROR_CODE     => ::SQL_ERROR_CODE,  | |||
        iv_SQL_ERROR_MESSAGE  => ::SQL_ERROR_MESSAGE,  | |||
        ct_mesg__IN__         => :et_mesg,  | |||
        ct_mesg               => :et_mesg );  | |||
      END;  | |||
    et_amdp = APPLY_FILTER (ZTW_AMDP_DEMO_01,:iv_filter);  | |||
  ENDMETHOD.  | |||
  METHOD START.  | |||
    "zmo_cl_amdp_01=>  | |||
  ENDMETHOD.  | |||
ENDCLASS.  | |||
</syntaxhighlight>  | |||
[[Category:ABAP]]  | [[Category:ABAP]]  | ||
[[Kategorie:SQL]]  | |||
[[Kategorie:SAP]]  | |||
Aktuelle Version vom 7. Juni 2024, 16:47 Uhr
SQLscript kann per AMDP in ABAP-Klassen mit ADT oder mit SE80 (nicht empfohlen) codiert werden.
Siehe auch: AMDP_(ABAP)
CLASS ZMO_CL_AMDP_01 DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC .
  PUBLIC SECTION.
    " Interface notwendig, um in Klasse AMDP nutzen zu können
    INTERFACES: IF_AMDP_MARKER_HDB.
    TYPES:
      BEGIN OF TY_DATECALC_RES,
        KEY_FIELD     TYPE N LENGTH 10,
        FROM_AMOUNT   TYPE P LENGTH 10 DECIMALS 2,
        FROM_CURRENCY TYPE C LENGTH 10,
        FROM_DATE     TYPE DATS,
        TO_AMOUNT     TYPE P LENGTH 10 DECIMALS 2,
        TO_DATE       TYPE DATS,
        TEXT          TYPE C LENGTH 255,
      END OF TY_DATECALC_RES.
    TYPES:
      TT_DATECALC_RES TYPE STANDARD TABLE OF TY_DATECALC_RES WITH EMPTY KEY,
      TV_CURR         TYPE C LENGTH 5.
    CLASS-METHODS EXCEPTION_HANDLING_AMDP_HDB
      IMPORTING
                VALUE(IV_SQL_OBJECT_SCHEMA) TYPE ZTW_CL_AMDP_01=>TV_SQL_OBJECT_SCHEMA
                VALUE(IV_SQL_OBJECT_NAME)   TYPE ZTW_CL_AMDP_01=>TV_SQL_OBJECT_NAME
                VALUE(IV_SQL_ERROR_CODE)    TYPE INTEGER
                VALUE(IV_SQL_ERROR_MESSAGE) TYPE ZTW_CL_AMDP_01=>TV_SQL_ERROR_MESSAGE
      CHANGING
                VALUE(CT_MESG)              TYPE TREXT_PE_MSG
      RAISING   CX_AMDP_ERROR.
    "!Aufgabe 1: Inhalt der Tabelle ZTW_AMDP_DEMO_01 zurückgeben
    "! Import- und Export-Parameter werden als VALUE übergeben
    "! Export-Parameter einen statischen Datentyp / Tabellentyp haben
    CLASS-METHODS METHOD_01_READ
      EXPORTING
        VALUE(ET_AMDP) TYPE ZTW_TT_AMDP_DEMO_01
      RAISING
        CX_AMDP_ERROR.
    "!Aufgabe 2: Inhalt der Tabelle ZTW_AMDP_DEMO_01 zurückgeben;
    "! Jeden Satz umgerechnen nach EUR;
    "! Neues Feld DATE_FIELD_NEW: Datum in DATE_FIELD um 30 Tage erhöhen
    "! Stichtag Umrechnung: 1.1. des Jahres aus DATE_FIELD
    "! Umrechnungskurs INVB
    CLASS-METHODS
      METHOD_02_SQLSCRIPT
        EXPORTING
          VALUE(ET_AMDP) TYPE TT_DATECALC_RES
        RAISING
          CX_AMDP_ERROR.
    "!Aufgabe 3: Inhalt der Tabelle ZTW_AMDP_DEMO_01 zurückgeben;
    "! Jeden Satz umrechnen nach iv_curr;
    "! Neues Feld DATE_FIELD_NEW: Datum in DATE_FIELD um iv_days Tage erhöhen
    "! Stichtag Umrechnung: 1.1. des Jahres aus DATE_FIELD
    "! Umrechnungskurs INVB
    CLASS-METHODS
      METHOD_03_IMPORT
        IMPORTING
          VALUE(IV_CURR) TYPE TV_CURR
          VALUE(IV_DAYS) TYPE I
        EXPORTING
          VALUE(ET_AMDP) TYPE TT_DATECALC_RES
          VALUE(ET_MESG) TYPE TREXT_PE_MSG
        RAISING
          CX_AMDP_ERROR.
    "!Aufgabe 5: Erhoehung von iv_days um 5, dann Aufruf der
    "! DB Prozedur ZMO_CL_AMDP_01=>method03_sqlscript_import
    "! mit iv_curr und iv_days und Rueckgabe der Ergebnisse
    CLASS-METHODS
      METHOD_05_USING
        IMPORTING
          VALUE(IV_CURR) TYPE TV_CURR
          VALUE(IV_DAYS) TYPE I
        EXPORTING
          VALUE(ET_AMDP) TYPE TT_DATECALC_RES
          VALUE(ET_MESG) TYPE TREXT_PE_MSG
        RAISING
          CX_AMDP_ERROR.
    "!Aufgabe 6: Filtere in der Rückgabe der Methode die
    "! Tabelle ZTW_AMDP_DEMO_01 dynamisch, je nach Input der Methode
    CLASS-METHODS
      METHOD_06_FILTER
        IMPORTING
          VALUE(IV_FILTER) TYPE STRING
        EXPORTING
          VALUE(ET_AMDP) TYPE ztw_tt_amdp_demo_01
          VALUE(ET_MESG) TYPE TREXT_PE_MSG
        RAISING
          CX_AMDP_ERROR.
    CLASS-METHODS: START.
  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.
CLASS ZMO_CL_AMDP_01 IMPLEMENTATION.
  METHOD EXCEPTION_HANDLING_AMDP_HDB  BY DATABASE PROCEDURE FOR HDB LANGUAGE SQLSCRIPT OPTIONS READ-ONLY.
    /*
    credits @Leon Struski, PROCON IT
    */
    declare exit handler FOR SQLEXCEPTION
    BEGIN
      CT_MESG = SELECT
      'ZTW_MSG'                                 as "MSGID",
      '000'                                     as "MSGNO",
      'E'                                       as "MSGTY",
      'SQL Exception occured. In'               as "MSGV1",
      'Error Code is:'                          as "MSGV2",
      CAST (::SQL_ERROR_CODE   as NVARCHAR(50)) as "MSGV3",
      ''                                        as "MSGV4",
      ''                                        as "CONTEXT"
      FROM DUMMY
      union all
      SELECT
      'ZTW_MSG'                                                                                 as "MSGID",
      '000'                                                                                               as "MSGNO",
      'E'                                                                                                 as "MSGTY",
      CAST ( SUBSTRING(::CURRENT_OBJECT_SCHEMA || '.' ||::CURRENT_OBJECT_NAME, 1, 50)   as NVARCHAR(50))  as "MSGV1",
      CAST ( SUBSTRING(::CURRENT_OBJECT_SCHEMA || '.' ||::CURRENT_OBJECT_NAME, 51, 50)  as NVARCHAR(50))  as "MSGV2",
      CAST ( SUBSTRING(::CURRENT_OBJECT_SCHEMA || '.' ||::CURRENT_OBJECT_NAME, 101, 50) as NVARCHAR(50))  as "MSGV3",
      CAST ( SUBSTRING(::CURRENT_OBJECT_SCHEMA || '.' ||::CURRENT_OBJECT_NAME, 152, 50) as NVARCHAR(50))  as "MSGV4",
      ''                                                                                                  as "CONTEXT"
      FROM DUMMY
      union all
      SELECT
      'ZTW_MSG'                                               as "MSGID",
      '000'                                                             as "MSGNO",
      'E'                                                               as "MSGTY",
      CAST( SUBSTRING(::SQL_ERROR_MESSAGE , 1, 50)    as NVARCHAR(50))  as "MSGV1",
      CAST( SUBSTRING(::SQL_ERROR_MESSAGE , 51, 50)   as NVARCHAR(50))  as "MSGV2",
      CAST( SUBSTRING(::SQL_ERROR_MESSAGE , 101, 50)  as NVARCHAR(50))  as "MSGV3",
      CAST( SUBSTRING(::SQL_ERROR_MESSAGE , 153, 50)  as NVARCHAR(50))  as "MSGV4",
      ''                                                                as "CONTEXT"
      FROM DUMMY
      union all select * from :CT_MESG;
    END;
    CT_MESG = SELECT
    'ZTW_MSG'                         as "MSGID",
    '000'                                       as "MSGNO",
    'E'                                         as "MSGTY",
    'SQL Exception occured.'                    as "MSGV1",
    'Error Code is:'                            as "MSGV2",
    CAST ( iv_SQL_ERROR_CODE   as NVARCHAR(50)) as "MSGV3",
    ''                                          as "MSGV4",
    ''                                          as "CONTEXT"
    FROM DUMMY
    union all
    SELECT
    'ZTW_MSG'                                                                           as "MSGID",
    '000'                                                                                         as "MSGNO",
    'E'                                                                                           as "MSGTY",
    CAST ( SUBSTRING(IV_SQL_OBJECT_SCHEMA || '.' ||IV_SQL_OBJECT_NAME, 1, 50)   as NVARCHAR(50))  as "MSGV1",
    CAST ( SUBSTRING(IV_SQL_OBJECT_SCHEMA || '.' ||IV_SQL_OBJECT_NAME, 51, 50)  as NVARCHAR(50))  as "MSGV2",
    CAST ( SUBSTRING(IV_SQL_OBJECT_SCHEMA || '.' ||IV_SQL_OBJECT_NAME, 102, 50) as NVARCHAR(50))  as "MSGV3",
    CAST ( SUBSTRING(IV_SQL_OBJECT_SCHEMA || '.' ||IV_SQL_OBJECT_NAME, 153, 50) as NVARCHAR(50))  as "MSGV4",
    ''                                                                                            as "CONTEXT"
    FROM DUMMY
    union all
    SELECT
    'ZTW_MSG'                                               as "MSGID",
    '000'                                                             as "MSGNO",
    'E'                                                               as "MSGTY",
    CAST( SUBSTRING(iv_SQL_ERROR_MESSAGE , 1, 50)   as NVARCHAR(50))  as "MSGV1",
    CAST( SUBSTRING(iv_SQL_ERROR_MESSAGE , 51, 50)  as NVARCHAR(50))  as "MSGV2",
    CAST( SUBSTRING(iv_SQL_ERROR_MESSAGE , 101, 50) as NVARCHAR(50))  as "MSGV3",
    CAST( SUBSTRING(iv_SQL_ERROR_MESSAGE , 153, 50) as NVARCHAR(50))  as "MSGV4",
    ''                                                                as "CONTEXT"
    FROM DUMMY
    union all select * from :CT_MESG;
  ENDMETHOD.
  METHOD METHOD_01_READ BY DATABASE PROCEDURE FOR HDB LANGUAGE SQLSCRIPT OPTIONS READ-ONLY USING ZTW_AMDP_DEMO_01.
    et_amdp =
      select * from ZTW_AMDP_DEMO_01;
  ENDMETHOD.
  METHOD METHOD_02_SQLSCRIPT BY DATABASE PROCEDURE FOR HDB LANGUAGE SQLSCRIPT OPTIONS READ-ONLY USING ZTW_AMDP_DEMO_01.
    et_amdp =
      select
            key_field,
            amount as from_amount,
            currency as from_currency,
            date_field as from_date,
            CONVERT_CURRENCY(
                amount              => amount,
                source_unit_column  => currency,
                schema              => ::CURRENT_OBJECT_SCHEMA,
                target_unit_column  => 'EUR',
                steps               => 'shift,convert,shift_back',
                reference_date      => TO_DATE('2018-01-01'),
                client              => '010',
                conversion_type     => 'INVB'
              ) AS to_amount,
            to_dats(add_days(date_field, 30)) as to_date,
            text
        from ZTW_AMDP_DEMO_01;
  ENDMETHOD.
  METHOD METHOD_03_IMPORT BY DATABASE PROCEDURE FOR HDB LANGUAGE SQLSCRIPT OPTIONS READ-ONLY USING ZTW_AMDP_DEMO_01 ZMO_CL_AMDP_01=>EXCEPTION_HANDLING_AMDP_HDB.
    DECLARE EXIT HANDLER FOR SQLEXCEPTION
      BEGIN
        call "ZMO_CL_AMDP_01=>EXCEPTION_HANDLING_AMDP_HDB"(
        iv_sql_object_schema  => ::CURRENT_OBJECT_SCHEMA,
        iv_sql_OBJECT_NAME    => ::CURRENT_OBJECT_NAME,
        iv_SQL_ERROR_CODE     => ::SQL_ERROR_CODE,
        iv_SQL_ERROR_MESSAGE  => ::SQL_ERROR_MESSAGE,
        ct_mesg__IN__         => :et_mesg,
        ct_mesg               => :et_mesg );
      END;
    et_amdp =
      select
            key_field,
            amount as from_amount,
            currency as from_currency,
            date_field as from_date,
            CONVERT_CURRENCY(
                amount              => amount,
                source_unit_column  => currency,
                schema              => ::CURRENT_OBJECT_SCHEMA,
                target_unit_column  => :iv_curr,
                steps               => 'shift,convert,shift_back',
                reference_date      => TO_DATE('2018-01-01'),
                client              => '010',
                conversion_type     => 'INVB'
              ) AS to_amount,
            to_dats(add_days(date_field, :iv_days)) as to_date,
            text
        from ZTW_AMDP_DEMO_01;
  ENDMETHOD.
  METHOD METHOD_05_USING BY DATABASE PROCEDURE FOR HDB LANGUAGE SQLSCRIPT OPTIONS READ-ONLY USING ZMO_CL_AMDP_01=>METHOD_03_IMPORT.
    iv_days = iv_days + 5;
    call "ZMO_CL_AMDP_01=>METHOD_03_IMPORT" (
      iv_curr => :iv_curr,
      iv_days => :iv_days,
      et_amdp => :et_amdp,
      et_mesg => :et_mesg
    );
  ENDMETHOD.
  METHOD METHOD_06_FILTER BY DATABASE PROCEDURE FOR HDB LANGUAGE SQLSCRIPT OPTIONS READ-ONLY USING ZTW_AMDP_DEMO_01 ZMO_CL_AMDP_01=>EXCEPTION_HANDLING_AMDP_HDB.
    DECLARE EXIT HANDLER FOR SQLEXCEPTION
      BEGIN
        call "ZMO_CL_AMDP_01=>EXCEPTION_HANDLING_AMDP_HDB"(
        iv_sql_object_schema  => ::CURRENT_OBJECT_SCHEMA,
        iv_sql_OBJECT_NAME    => ::CURRENT_OBJECT_NAME,
        iv_SQL_ERROR_CODE     => ::SQL_ERROR_CODE,
        iv_SQL_ERROR_MESSAGE  => ::SQL_ERROR_MESSAGE,
        ct_mesg__IN__         => :et_mesg,
        ct_mesg               => :et_mesg );
      END;
    et_amdp = APPLY_FILTER (ZTW_AMDP_DEMO_01,:iv_filter);
  ENDMETHOD.
  METHOD START.
    "zmo_cl_amdp_01=>
  ENDMETHOD.
ENDCLASS.
