热门关键字:  ubuntu  分区  Fedora  linux系统进程  函数

非平面内表的用法

来源: 作者: 时间:2007-12-06 Tag: 点击:

*&---------------------------------------------------------------------*
*& Report  z_barry_deep_itab                                           *
*& Barry.bai@sap.com                                                   *
*&---------------------------------------------------------------------*

REPORT z_barry_deep_itab.

TABLES ekko.

DATA: BEGIN OF itab OCCURS 0 ,
        ebeln LIKE ekko-ebeln ,
        lifnr LIKE ekko-lifnr ,
        bedat LIKE ekko-bedat ,
        ebelp LIKE ekpo-ebelp ,
        matnr LIKE ekbe-matnr ,
      END OF itab.

TYPES : BEGIN OF tp_ptab  ,
          ebeln LIKE ekbe-ebeln ,
          ebelp LIKE ekpo-ebelp ,
          matnr LIKE ekbe-matnr ,
        END OF tp_ptab .
TYPES tt_ptab TYPE STANDARD TABLE OF tp_ptab WITH DEFAULT KEY  .
DATA: it_ptab TYPE STANDARD TABLE OF tp_ptab WITH HEADER LINE .
DATA: wa_ptab LIKE LINE OF it_ptab .

TYPES : BEGIN OF tp_ktab ,
          ebeln LIKE ekko-ebeln ,
          lifnr LIKE ekko-lifnr ,
          bedat LIKE ekko-bedat ,
          ptab  TYPE tt_ptab ,
        END OF tp_ktab .
DATA: it_ktab TYPE STANDARD TABLE OF tp_ktab WITH HEADER LINE .
DATA: tmpebeln LIKE ekko-ebeln.

SELECT-OPTIONS: s_aedat FOR ekko-aedat.

START-OF-SELECTION.

  PERFORM getdata.
  PERFORM fixdata.
*---------------------------------------------------------------------*
*       FORM getdata                                                  *
*---------------------------------------------------------------------*
FORM getdata.
  SELECT ekko~ebeln ekko~lifnr ekko~bedat
         ekpo~ebelp ekpo~matnr
  INTO CORRESPONDING FIELDS OF TABLE itab
  FROM ekko INNER JOIN ekpo ON ekko~ebeln = ekpo~ebeln
  WHERE ekko~aedat IN s_aedat.
ENDFORM.
*---------------------------------------------------------------------*
*       FORM fixdata                                                  *
*---------------------------------------------------------------------*
FORM fixdata.

  LOOP AT itab .
    ON CHANGE OF itab-ebeln .
      CLEAR it_ktab-ptab.
      CLEAR tmpebeln .
      tmpebeln = itab-ebeln .
      LOOP AT itab WHERE ebeln = tmpebeln .
        wa_ptab-ebeln = itab-ebeln .
        wa_ptab-ebelp = itab-ebelp .
        wa_ptab-matnr = itab-matnr .
        COLLECT wa_ptab INTO it_ktab-ptab .
      ENDLOOP .
      SORT it_ktab-ptab BY ebeln matnr .
      it_ktab-ebeln = itab-ebeln .
      it_ktab-lifnr = itab-lifnr .
      it_ktab-bedat = itab-bedat .
      APPEND it_ktab .
    ENDON .
  ENDLOOP .

ENDFORM.

注:deep 内表不能直接用户Select的INTO语句



相关文章:
SQLite3 C/C++ 开发接口简介(API函数) 二
SQLite3 使用教学
Scaling out MySQL - Hardware today and tomorro
SQLite适用的范围
sybase cursor declare
SQL语句大全精要
用户配额
decode函数
Oracle 数据库创建表空间、创建用户指定表空间
MySQL教会我使用GnuPG验证软件包
MySQL中MyISAM引擎与InnoDB引擎性能简单测试
initdb
mysqladmin在线帮助文档
CentOS 4.7 安装Oracle 9.2.0.4的一些问题
文本如何导入oracle(sqlldr 的用法)
ORA-00600: 内部错误代码,自变量: [16201], [],
分布式Oracle的database link
install a MySQL source distribution
Mysql备份脚本(未验证)
oracle 9.2.0.1 update 9.2.0.5
每小时Dump所有mysql数据库到NAS存储设备上
Oracle SCN机制解析
Account LOCKED(TIMED)
MySQL数据库5.0的my.cnf配置选项
oracle存储过程中调用其他用户的表
修改sqlplus提示符
MYSQL建表实例
一些对Mysql DBA有用的脚本
Oracle DBA 强悍挑战OS 64位 Solaris 10-真正休
[Bugzilla]由Mysql迁移到Oracle的方法