如何获取数据库表的行数



我只是abap语言的新手,我正在尝试练习内部连接语句,但我不知道我是否能够在输出之前获得我的选择语句的行数。

这就是我想要达到的目标。

<--------------------------------------- >
< total number of rows > Record(s) found |
Column Header 1|Column Header 2 ..
< data 
 ....
 retrieved >

<--------------------------------------- >
下面是我的select语句:
 SELECT spfli~carrid scarr~carrname sflight~planetype sflight~fldate sflight~price spfli~cityfrom spfli~cityto
   INTO (g_carrid ,g_carrname ,g_planetype,g_fldate ,g_price ,g_cityfrom ,g_cityto) FROM spfli
  INNER JOIN sflight
     ON spfli~carrid = sflight~carrid AND spfli~connid = sflight~connid
  INNER JOIN scarr
     ON scarr~carrid = spfli~carrid
  WHERE spfli~carrid = s_carrid-low.
  WRITE: / g_carrname ,g_planetype,g_fldate ,g_price ,g_cityfrom ,g_cityto.
 ENDSELECT.

如果你对如何使用内部表有任何建议和想法,请给我一个样品。我真的很想学。谢谢你,上帝保佑你。

系统变量SY-DBCNT应该给您选择的行数,但只在选择结束后。

select - endselect的另一种选择是使用select INTO TABLE一次性将所有行选择到一个内部表中(前提是您不会一次选择太多!)。

例如:

data: lt_t000 type table of t000.
select * from t000 into table lt_t000.

这将把该表中的所有内容一次选择到内部表中。因此,您可以做的是声明一个内部表,其中包含当前INTO子句中的所有字段,然后为您的内部表指定INTO table。

SELECT执行后,SY-DBCNT将包含所选的行数。

下面是一个完整的例子,围绕你的问题中的SELECT语句构建,我没有检查是否正常,所以我希望它能工作!

tables: spfli.
select-options: s_carrid for spfli-carrid.
* Definition of the line/structure
data: begin of ls_dat,
        carrid type s_carr_id,
        carrname type s_carrname,
        planetype type s_planetye,
        fldate type s_date,
        price type s_price,
        cityfrom type s_from_cit,
        cityto type s_to_city,
      end of ls_dat.
* Definition of the table:
data: lt_dat like table of ls_dat.
* Select data
select spfli~carrid scarr~carrname sflight~planetype sflight~fldate sflight~price spfli~cityfrom spfli~cityto
  into table lt_dat
  from spfli
  inner join sflight
  on spfli~carrid = sflight~carrid and spfli~connid = sflight~connid
  inner join scarr
  on scarr~carrid = spfli~carrid
  where spfli~carrid = s_carrid-low.
* Output data
write: 'Total records selected', sy-dbcnt.
loop at lt_dat into ls_dat.
  write: / ls_dat-carrid, ls_dat-carrname, ls_dat-planetype, ls_dat-fldate, ls_dat-price, ls_dat-cityfrom, ls_dat-cityto.
endloop.

注意:报表(类型1)程序仍然支持声明带有头行的内部表的概念,以向后兼容,但这是不鼓励的!希望它有效!

如果您只需要行数而不需要检索数据本身,那么下面的语法也可以使用

SELECT COUNT(*)
  FROM spfli
 INNER JOIN sflight
 ...

执行此查询后,您将能够从SY-DBCNT获得行计数值,并且DB负载将比通常的SELECT ... INTO itab少得多。然而,只有在不需要实际数据的情况下,这才是正确的。如果您需要行数和数据本身,那么将其拆分为单独的select语句是不明智的。

相关内容

  • 没有找到相关文章

最新更新