SAP(四)NATIVE SQL

NATIVE SQL
1.1 基本语句是以EXEC SQL开头、以ENDEXEC结束 。使用变量时要在变量名前加冒号:,另外NATIVE SQL中一定要追加区分客户的MANDT字段。
ABAP常用系统变量(SY-)

DATA : gv_carrid LIKE sflight-carrid VALUE 'AA',
       gv_connid LIKE sflight-connid.
       EXEC SQL.
         SELECT A.CONNID
            INTO :GV_CONNID "这个冒号后面要紧挨着变量
            FROM SFLIGHT A
            WHERE A.MANDT = :SY-MANDT "这个冒号前面和等于号之间要有空格。
            AND A.CARRID = :GV_CARRID

       ENDEXEC.
       WRITE gv_connid.

ABAP访问ORACLE数据库步骤

1.2 NATIVE SQL与内表
使用PERFORMING语句一次性往内表插入多条数据,当每次执行SELECT语句读取一条数据时,PERFORMING语句都会执行Subroutine.

TYPES : BEGIN OF t_str,
      carrid LIKE sflight-carrid,
      connid LIKE sflight-connid,
      END OF t_str.

      DATA gt_itab TYPE TABLE OF t_str.
      DATA gs_wa TYPE t_str.
      DATA gv_carrid LIKE sflight-carrid VALUE 'AA'.

      EXEC SQL PERFORMING APPEND_ITAB.
        SELECT A.CARRID , A.CONNID
        INTO :GS_WA-CARRID, :GS_WA-CONNID  
     *INTO语句中虽然单独指定了某些字段,但是也可以使用工作区一次性保存所有值。
     *INTO :GS_WA
        FROM SFLIGHT A
        WHERE A.MANDT = :SY-MANDT
        AND A.CARRID = :GV_CARRID
      ENDEXEC.

     FORM append_itab.
     WRITE : / gs_wa-carrid,gs_wa-connid.
     APPEND gs_wa TO gt_itab.
     CLEAR gt_itab.
     ENDFORM.

1.3 NATIVE SQL与表连接。
NATIVE SQL中也可以连接多个表读取所需的数据。

TYPES : BEGIN OF t_str,
      carrid LIKE sflight-carrid,
      connid LIKE sflight-connid,
      carrname LIKE scarr-carrname,
      END OF t_str.

      DATA gs_wa TYPE t_str.
      DATA gv_carrid LIKE sflight-carrid VALUE 'AA'.


      EXEC SQL PERFORMING WRITE_DATA.
        SELECT A.CARRID , B.CARRNAME
        INTO :GS_WA-CARRID, :GS_WA-CARRNAME
        FROM  SFLIGHT A, SCARR B
        WHERE A.MANDT = B.MANDT
       AND A.CARRID = B.CARRID
       AND A.MANDT = :SY-MANDT
        AND A.CARRID = :GV_CARRID
      ENDEXEC.

     FORM write_data.
     WRITE : / gs_wa-carrid,gs_wa-carrname.
     ULINE.
     ENDFORM.

为了看清EXEC SQL PERFORMING WRITE_DATA.执行步骤,我们在FROM里加了ULIKE,debug如下图。
在这里插入图片描述
在这里插入图片描述最终执行结果如下图。可以看出一条一条执行,每一次都会调用WRITE_DATA输出相应的数据。
在这里插入图片描述1.4 NATIVE SQL与子字字符串。
1、substr函数格式 (俗称:字符截取函数)

格式1: substr(string string, int a, int b);SUBSTR(变量,开始位,长度)
   1、string 需要截取的字符串
2、a 截取字符串的开始位置(注:当a等于0或1时,都是从第一位开始截取)
3、b 要截取的字符串的长度

格式2:substr(string string, int a) ;
1、string 需要截取的字符串
2、a 可以理解为从第a个字符开始截取后面所有的字符串。

 TYPES : BEGIN OF t_str,
      carrid LIKE sflight-carrid,
      connid LIKE sflight-connid,
      carrname LIKE scarr-carrname,
      END OF t_str.

      DATA gs_wa TYPE t_str.
      DATA gv_carrid LIKE sflight-carrid VALUE 'AA'.


      EXEC SQL PERFORMING WRITE_DATA.
        SELECT A.CARRID , SUBSTR(B.CARRNAME,2,6)
        INTO :GS_WA-CARRID, :GS_WA-CARRNAME
        FROM  SFLIGHT A, SCARR B
        WHERE A.MANDT = B.MANDT
       AND A.CARRID = B.CARRID
       AND A.MANDT = :SY-MANDT
        AND A.CARRID = :GV_CARRID
      ENDEXEC.

     FORM write_data.
     WRITE : / gs_wa-carrid,gs_wa-carrname.
     ULINE.
     ENDFORM.

1.5 NATIVE SQL与DB LINK
DB LINK就是指数据连接
,语句 数据库表名@数据库连接名
远程SAP系统之间连接经常使用RFC实现的方法,使用NATIVE SQL可以直接读取远程数据库中的数据。下面将远程数据库连接名命名为SERVER2,然后在远程数据库表MARA中读取数据的语句。
SAP与外部数据连接步骤

   EXEC SQL
       SELECT matnr
       FROM MARA@SERVER2
     ENDEXEC.

DB LINK 设置要向BC(Basis Consultant)申请,然后用下列语句连接Oracle.

CREATE[public|private]DATABASE LIKE(名字)
     CONNECT TO (账号) IDENTIFIED BY(密码)using '(连接字符串)'

事务码/oDBACOCKPIT 建立数据库连接
在这里插入图片描述注:测试连接如果出错,可以用ADBC_TEST_CONNECTION 测试,ADBC_TEST_CONNECTION 测试后有个图标可以点进trace文件,拉到最后,就是出错的具体信息。

连接成功后可以用ADBC_QUERY查询表结构和数据

1.6 执行NATIVE SQL的工具。事务码ST04
在这里插入图片描述输入SQL语句点击执行。
在这里插入图片描述可以得到查询结果如下:
在这里插入图片描述

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SAP ABAP中,可以使用以下几种方式来删除表中的数据: 1. 使用DELETE语句删除多行数据。可以使用DELETE FROM语句,后跟表名和WHERE子句来指定删除的条件。例如:DELETE FROM dbtab WHERE <condition>。 2. 使用内表删除多行数据。可以使用DELETE语句,后跟内表名和FROM TABLE子句来删除内表中的数据。例如:DELETE dbtab [CLIENT SPECIFIED] FROM TABLE itab。 需要注意的是,删除表中的数据操作是不可逆的,请在执行删除操作之前确保你已经备份了数据或确认不再需要这些数据。 参考资料: SAP Help Portal. DELETE - Data Deletion. https://help.sap.com/doc/abapdocu_750_index_htm/7.50/en-US/abendelete.htm SAP Help Portal. DELETE - Internal Table. https://help.sap.com/doc/abapdocu_750_index_htm/7.50/en-US/abeninternal_table.htm<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [SAP ABAP openSQL数据库操作(三)](https://blog.csdn.net/weixin_49198221/article/details/126645881)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [SAP ABAP——内表(九)【删除内表数据】](https://blog.csdn.net/weixin_59480481/article/details/127957539)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值