20240106

OPEN SQL

  METHOD tamplates_1 .

*   String template
*    x = |...literal...{expression}\...control characters...|

    WRITE:/ '*** Open SQL'.
    WRITE:/ '*** '.
    WRITE:/ '*** Comma separated lists'.
    WRITE:/ '*** Escape character for host variables'.
    WRITE:/ '*** SQL expressions'.

    WRITE:/ '.'.
    WRITE:/ '.'.

    WRITE:/ ' '.
    WRITE:/ |.|.

    ULINE.

  ENDMETHOD.










***
***   Exemplo Simples
***
  METHOD tamplates_2 .

    WRITE:/ '*** tamplates_2 - Forma Básica' .
    WRITE:/ '*** Listas de campo separadas por vírgula (,) ' .
    WRITE:/ '*** quando utilizadas declarações inline' .

**  Forma Antiga
    write:/ |--> |.
    write:/ |--> Forma Antiga|.
    write:/ |.| && ||.

**  Definições
    types: begin of y_mara,
             matnr      type matnr,
             meins      type meins,
             mtart      type mtart,
           end of y_mara.

    DATA t_mara TYPE STANDARD TABLE OF y_mara
             WITH EMPTY KEY.


    write:/ |    SELECT matnr  meins  mtart|.
    write:/ |      from mara|.
    write:/ |      into CORRESPONDING FIELDS OF TABLE t_mara.|.

**  Seleção de dados
    SELECT matnr  meins  mtart
      from mara
      into CORRESPONDING FIELDS OF TABLE t_mara.


*   LisTa dados
    LOOP AT t_mara INTO DATA(ls_mara).
       check sy-tabix < 6.
       write:/01 |MATNR: { ls_mara-matnr } |,
              25 |MEINS: { ls_mara-meins } |,
              45 |MTART: { ls_mara-mtart } | .
    ENDLOOP.
    WRITE:/ |.|.




**  Forma Nova
    write:/ |--> |.
    write:/ |--> Forma Nova|.
    write:/ |.| && ||.

**  Seleção de dados
       write:/ |    SELECT matnr,  meins,  mtart|.
       write:/ |      from mara|.
       write:/ |      into TABLE @DATA(t_mara2).|.

*   LisTa dados
    LOOP AT t_mara INTO DATA(ls_mara2).
       check sy-tabix < 6.
       write:/01 |MATNR: { ls_mara2-matnr } |,
              25 |MEINS: { ls_mara2-meins } |,
              45 |MTART: { ls_mara2-mtart } | .
    ENDLOOP.
    WRITE:/ |.|.

    ULINE.

  ENDMETHOD.







***
*** Literal + expression
***
  METHOD tamplates_3 .

    WRITE:/ '*** tamplates_3 -' .
    WRITE:/ '*** ESCAPE character (@) for host variables ' .
    WRITE:/ '*** ' .

**  Forma Antiga
    write:/ |--> |.
    write:/ |--> Forma Antiga|.
    write:/ |.| && ||.

**  Definições
    types: begin of y_mara,
             matnr      type matnr,
             meins      type meins,
             mtart      type mtart,
           end of y_mara.

    DATA t_mara TYPE STANDARD TABLE OF y_mara
             WITH EMPTY KEY.

    data v_mtart type mara-mtart VALUE 'HAWA'.

    write:/ |        DATA t_mara TYPE STANDARD TABLE OF y_mara|.
    write:/ |                 WITH EMPTY KEY.|.
    write:/ |    |.
    write:/ |        data v_mtart type mara-mtart VALUE 'HAWA'.|.
    write:/ |.    |.
    write:/ |    SELECT matnr  meins  mtart|.
    write:/ |      from mara|.
    write:/ |      into CORRESPONDING FIELDS OF TABLE t_mara |.
    write:/ |      WHERE mtart = v_mtart. |.

**  Seleção de dados
    SELECT matnr  meins  mtart
      from mara
      into CORRESPONDING FIELDS OF TABLE t_mara
      where mtart = v_mtart.


*   LisTa dados
    LOOP AT t_mara INTO DATA(ls_mara).
       check sy-tabix < 6.
       write:/01 |MATNR: { ls_mara-matnr } |,
              25 |MEINS: { ls_mara-meins } |,
              45 |MTART: { ls_mara-mtart } | .
    ENDLOOP.
    WRITE:/ |.|.




**  Forma Nova
    write:/ |--> |.
    write:/ |--> Forma Nova|.
    write:/ |.| && ||.

**  Seleção de dados
      write:/ |    SELECT matnr,  meins,  mtart|.
      write:/ |      from mara|.
      write:/ |      into TABLE @DATA(t_mara2) |.
      write:/ |      where mtart = @v_mtart |.

    SELECT matnr,  meins,  mtart
      from mara
      into TABLE @DATA(t_mara2)
      where mtart = @v_mtart .

*   LisTa dados
    LOOP AT t_mara2 INTO DATA(ls_mara2).
       check sy-tabix < 6.
       write:/01 |MATNR: { ls_mara2-matnr } |,
              25 |MEINS: { ls_mara2-meins } |,
              45 |MTART: { ls_mara2-mtart } | .
    ENDLOOP.
    WRITE:/ |.|.


    ULINE.


  ENDMETHOD.







***
***
***
  METHOD tamplates_4 .

    WRITE:/ '*** tamplates_4 - SQL expressions' .
    WRITE:/ '*** Concatenar campos' .


    WRITE:/ |--> SQL Expressions|.
    WRITE:/ |--> |.

    WRITE:/ |    SELECT SINGLE|.
    WRITE:/ |      ( name1 && '' && name2 ) as namefull|.
    WRITE:/ |      INTO @DATA(s_kunnr)|.
    WRITE:/ |      FROM kna1|.
    WRITE:/ |      where kunnr = '0001000000'.|.

    SELECT SINGLE
      ( name1 && ' ' && name2 ) as namefull
      INTO @DATA(s_kunnr)
      FROM kna1
      where kunnr = '0001000000'.

    WRITE:/ |--> |.
    WRITE:/ |S_KUNNR: { s_kunnr } |.
    WRITE:/ |--> |.


    ULINE.



  ENDMETHOD.







***
***
***
  METHOD tamplates_5 .

    WRITE:/ '*** tamplates_5 - SQL expressions'.
    WRITE:/ '*** Soma de campos' .


    WRITE:/ |--> SQL Expressions|.
    WRITE:/ |--> |.

    WRITE:/ |    SELECT SINGLE|.
    WRITE:/ |      ( kzwi1 + kzwi2 ) as kswi|.
    WRITE:/ |      INTO @DATA(s_soma)|.
    WRITE:/ |      FROM vbap|.
    WRITE:/ |      where vbeln = '0000000010'.|.
    WRITE:/ |        and posnr  = '00010'.|.

    SELECT SINGLE
      ( KZWI1 + KZWI1 ) as kswi
      INTO @DATA(s_soma)
      FROM vbap
      where vbeln  = '0000000010'
        and posnr  = '00010'.

    WRITE:/ |--> |.
    WRITE:/ |S_SOMA: { s_soma } |.
    WRITE:/ |--> |.

    ULINE.

  ENDMETHOD.