SAP ABAP - 原生 SQL 概述

  • 简述

    术语“原生 SQL”是指所有可以静态传输到数据库接口的原生 SQL 接口的语句。本机 SQL 语句不属于 ABAP 的语言范围,也不遵循 ABAP 语法。ABAP 仅包含用于隔离程序部分的语句,其中可以列出本机 SQL 语句。
    原生 SQL 语句
    在本机 SQL 中,主要可以使用特定于数据库的 SQL 语句。这些内容原封不动地从本机 SQL 接口传输到数据库系统并执行。可以使用相关数据库的完整 SQL 语言范围,并且不必在 ABAP 字典中声明所寻址的数据库表。还有一小组特定于 SAP 的本机 SQL 语句,由本机 SQL 接口以特定方式处理。
    要使用本机 SQL 语句,必须在其前面添加 EXEC SQL 语句并以 ENDEXEC 语句结束。
    以下是语法 -
    
    EXEC SQL PERFORMING <form>.  
       <原生 SQL statement> 
    ENDEXEC.
    
    这些语句定义了 ABAP 程序中的一个区域,可以在其中列出一个或多个本机 SQL 语句。输入的语句将传递到本机 SQL 接口,然后按如下方式进行处理 -
    • 可以在 EXEC 和 ENDEXEC 之间列出对所寻址的数据库系统的程序接口有效的所有 SQL 语句,特别是 DDL(数据定义语言)语句。
    • 这些 SQL 语句从 原生 SQL 接口传递到数据库系统时基本没有变化。语法规则是由数据库系统指定的,特别是数据库对象的区分大小写规则。
    • 如果语法允许各个语句之间使用分隔符,则可以在 EXEC 和 ENDEXEC 之间包含许多本机 SQL 语句。
    • 可以在 EXEC 和 ENDEXEC 之间指定 SAP 特定的本机 SQL 语言元素。这些语句不是直接从 原生 SQL 接口传递到数据库,而是进行了适当的转换。
  • 例子

    SPFLI 是一个标准 SAP 表,用于存储航班时刻表信息。这在 R/3 SAP 系统中可用,具体取决于版本和发行级别。当您将表名称 SPFLI 输入相关 SAP 事务(例如 SE11 或 SE80)时,您可以查看此信息。您还可以使用这两个事务来查看此数据库表中包含的数据。
    
    REPORT ZDEMO原生_SQL. 
    DATA: BEGIN OF wa,  
          connid  TYPE SPFLI-connid,
          cityfrom TYPE SPFLI-cityfrom,
          cityto  TYPE SPFLI-cityto,  
          END OF wa. 
       
    DATA c1 TYPE SPFLI-carrid VALUE 'LH'. 
    EXEC SQL PERFORMING loop_output.
       SELECT connid, cityfrom, cityto  
       INTO :wa  
       FROM SPFLI  
       WHERE carrid = :c1 
    ENDEXEC. 
    FORM loop_output.  
       WRITE: / wa-connid, wa-cityfrom, wa-cityto. 
    ENDFORM.
    
    上面的代码产生以下输出 -
    
    0400  FRANKFURT  NEW YORK 
    2402  FRANKFURT  BERLIN 
    0402  FRANKFURT  NEW YORK