SAP转Oracle时间取数【函数】

说明:在工作中有一个需求是根据日期去oracle数据库中读取数据,但是Oracle的日期到SAP的内表中的格式有些奇怪,例如“2020-11-10”,会展示为“11-NOV-20”,所以我们要进行一下转换,才能在where条件中生效,这边写了一个函数来转换。

函数名:Z_ORACLE_DATE
入参:I_DATE
出参:O_DATE
函数代码:

FUNCTION z_oracle_date.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     REFERENCE(I_DATE)
*"  EXPORTING
*"     REFERENCE(O_DATE)
*"----------------------------------------------------------------------
  DATA:lv_years  TYPE char02.
  DATA:lv_month  TYPE char04.
  DATA:lv_month1 TYPE char02.
  DATA:lv_date   TYPE char02.

  lv_years  = i_date+2(2).
  lv_date   = i_date+6(2).
  lv_month1 = i_date+4(2).

  CASE lv_month1.
    WHEN '01'.
      lv_month = 'JAN'.
    WHEN '02'.
      lv_month = 'FEB'.
    WHEN '03'.
      lv_month = 'MAR'.
    WHEN '04'.
      lv_month = 'APR'.
    WHEN '05'.
      lv_month = 'MAY'.
    WHEN '06'.
      lv_month = 'JUN'.
    WHEN '07'.
      lv_month = 'JUL'.
    WHEN '08'.
      lv_month = 'AUG'.
    WHEN '09'.
      lv_month = 'SEPT'.
    WHEN '10'.
      lv_month = 'OCT'.
    WHEN '11'.
      lv_month = 'NOV'.
    WHEN '12'.
      lv_month = 'DEC'.
  ENDCASE.
  o_date = lv_date && '-' && lv_month && '-' && lv_years.
ENDFUNCTION.

具体的使用场景如图。

  CALL FUNCTION 'Z_ORACLE_DATE'
    EXPORTING
      i_date = p_date
    IMPORTING
      o_date = lv_date.

*调用NATIVE SQL 语句获取数据( OPEN SQL 不支持 join 一个SQL语句的查询结果,native sql 支持.可以简化开发).
    DATA conn TYPE dbcon-con_name.
    conn = 'MTD'.   “链接名
    EXEC SQL.
      CONNECT TO :conn
    ENDEXEC.

*  EXEC SQL.
*    SET CONNECTION :conn.
*  ENDEXEC.

    EXEC SQL.
      OPEN dbcur FOR
      SELECT
      zmatnr1,
      eantp,
      ean11,
      zmatkl,
      zzbrand,
      zwherr,
      umrez,
      meins,
      ferth,
      groes,
      ztaxm1,
      zeinr,
      hoehe,
      breit,
      laeng,
      mhdhb,
      bismt,
      raube,
      magrv,
      labor,
      maktx,
      zmstae,
      to_char( DATAB , 'yyyy-mm-dd' ) AS datab,  "Oracle的日期拿过来也要用to_data函数转一下
      to_char( ZDATE , 'yyyy-mm-dd' ) AS zdate
      FROM DANIANG.ztmd014_JTERP_01
      where zdate >= :lv_date  "经过转化的日期
    ENDEXEC.

    "将取到的数据写入内表
    DO.
      EXEC SQL.
        FETCH NEXT dbcur INTO :GT_DATA1-zmatnr1,
                              :GT_DATA1-eantp,
                              :GT_DATA1-ean11,
                              :GT_DATA1-zmatkl,
                              :GT_DATA1-zzbrand,
                              :GT_DATA1-zwherr,
                              :GT_DATA1-umrez,
                              :GT_DATA1-meins,
                              :GT_DATA1-ferth,
                              :GT_DATA1-groes,
                              :GT_DATA1-ztaxm1,
                              :GT_DATA1-zeinr,
                              :GT_DATA1-hoehe,
                              :GT_DATA1-breit,
                              :GT_DATA1-laeng,
                              :GT_DATA1-mhdhb,
                              :GT_DATA1-bismt,
                              :GT_DATA1-raube,
                              :GT_DATA1-magrv,
                              :GT_DATA1-labor,
                              :GT_DATA1-maktx,
                              :GT_DATA1-zmstae,
                              :GT_DATA1-DATAB,
                              :GT_DATA1-ZDATE
      ENDEXEC.
      IF sy-subrc <> 0.
        EXIT.
      ELSE.
        READ TABLE lt_table1 INTO DATA(lw_table) WITH KEY zmatnr1 = gt_data1-zmatnr1 BINARY SEARCH.
        IF sy-subrc <> 0.
          gt_data1-date_c = sy-datum.
          gt_data1-time_c = sy-uzeit.
          gt_data1-datab = gt_data1-datab(4) && gt_data1-datab+5(2) && gt_data1-datab+8(2).
          gt_data1-zdate = gt_data1-zdate(4) && gt_data1-zdate+5(2) && gt_data1-zdate+8(2).
          APPEND gt_data1 .
          DATA(lv_lines) = lines( gt_data1 ).
          IF lv_lines = 500000.
            lv_sum = lv_sum + lv_lines.
            MOVE-CORRESPONDING gt_data1[] TO gt_save1[].
            MODIFY ztmd014_jterp_01 FROM TABLE gt_save1.
            IF sy-subrc = 0.
              REFRESH:gt_data1[],gt_save1[].
              CLEAR : lv_lines.
            ENDIF.
          ENDIF.
        ENDIF.

      ENDIF.
    ENDDO.

    EXEC SQL.
      CLOSE dbcur
    ENDEXEC.

作者:小飞猪猪猪猪猪猪猪–CSDN
注意:转发请注明作者

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小飞猪猪猪猪猪猪猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值