SAP ABAP游标的使用(示例)
2013-07-28 17:24
429 查看
文章转自 http://blog.csdn.net/szlaptop/article/details/8565285
REPORT Z_WUWEI_0019.
*/DECLARING CURSORS-C1 AND C2
DATA: C1 TYPE CURSOR,
C2 TYPE CURSOR.
DATA: WORK_AREA1 TYPE MARA,
WORK_AREA2 TYPE MARA.
DATA: FLAG1(1) TYPE C,
FLAG2(1) TYPE C.
*/OPENING CURSORS-C1 AND C2
OPEN CURSOR: C1 FOR SELECT MATNR "物料号
ERSDA "创建日期
ERNAM "创建对象的人员名称
FROM MARA "常规物料数据
WHERE ERNAM = 'ZHANGSHEN',
C2 FOR SELECT LAEDA "上次更改的日期
AENAM "更改对象用户的名称
FROM MARA
WHERE ERNAM = 'ZHANGSHEN'.
DO.
IF FLAG1 NE 'X'.
*/USING THE C1 CURSOR TO FETCH THE DATA
FETCH NEXT CURSOR C1 INTO CORRESPONDING FIELDS OF WORK_AREA1.
IF SY-SUBRC <> 0.
*/CLOSING THE C1 CURSOR
CLOSE CURSOR C1.
FLAG1 = 'X'.
ELSE.
WRITE: / '物料号:' COLOR 7 , WORK_AREA1-MATNR,'创建日期:' COLOR 6 , WORK_AREA1-ERSDA ,'创建对象的人员名称:' COLOR 5,WORK_AREA1-ERNAM .
ENDIF.
ENDIF.
IF FLAG2 NE 'X'.
*/USING THE C2 CURSOR TO FETCH THE DATA
FETCH NEXT CURSOR C2 INTO CORRESPONDING FIELDS OF WORK_AREA2.
IF SY-SUBRC <> 0.
*/CLOSING THE C2 CURSOR
CLOSE CURSOR C2.
FLAG2 = 'X'.
ELSE.
WRITE: / '上次更改的日期:' COLOR 4 , WORK_AREA2-LAEDA ,'更改对象用户的名称:' COLOR 3 , WORK_AREA2-AENAM.
ENDIF.
ENDIF.
IF FLAG1 = 'X' AND FLAG2 = 'X'.
EXIT.
ENDIF.
ENDDO.
文章转自 http://blog.csdn.net/wengyupeng/article/details/6302261
BC - ABAP Programming中三个例子,很好,摘抄如下,以供学习
1.
DATA: C1 TYPE CURSOR,
C2 TYPE CURSOR.
DATA: WA1 TYPE SPFLI,
WA2 TYPE SPFLI.
DATA: FLAG1,
FLAG2.
OPEN CURSOR: C1 FOR SELECT CARRID CONNID
FROM SPFLI
WHERE CARRID = 'LH',
C2 FOR SELECT CARRID CONNID CITYFROM CITYTO
FROM SPFLI
WHERE CARRID = 'AZ'.
DO.
IF FLAG1 NE 'X'.
FETCH NEXT CURSOR C1 INTO CORRESPONDING FIELDS OF WA1.
IF SY-SUBRC <> 0.
CLOSE CURSOR C1.
FLAG1 = 'X'.
ELSE.
WRITE: / WA1-CARRID, WA1-CONNID.
ENDIF.
ENDIF.
IF FLAG2 NE 'X'.
FETCH NEXT CURSOR C2 INTO CORRESPONDING FIELDS OF WA2.
IF SY-SUBRC <> 0.
CLOSE CURSOR C2.
FLAG2 = 'X'.
ELSE.
WRITE: / WA2-CARRID, WA2-CONNID,
WA2-CITYFROM, WA2-CITYTO.
ENDIF.
ENDIF.
IF FLAG1 = 'X' AND FLAG2 = 'X'.
EXIT.
ENDIF.
ENDDO.
2.
DATA C TYPE CURSOR.
DATA WA TYPE SBOOK.
OPEN CURSOR C FOR SELECT CARRID CONNID FLDATE BOOKID SMOKER
FROM SBOOK
ORDER BY CARRID CONNID FLDATE SMOKER BOOKID.
FETCH NEXT CURSOR C INTO CORRESPONDING FIELDS OF WA.
WHILE SY-SUBRC = 0.
IF WA-SMOKER = ' '.
PERFORM NONSMOKER USING C.
ELSEIF WA-SMOKER = 'X'.
PERFORM SMOKER USING C.
SKIP.
ELSE.
EXIT.
ENDIF.
ENDWHILE.
FORM NONSMOKER USING N_CUR TYPE CURSOR.
WHILE WA-SMOKER = ' ' AND SY-SUBRC = 0.
FORMAT COLOR = 5.
WRITE: / WA-CARRID, WA-CONNID, WA-FLDATE, WA-BOOKID.
FETCH NEXT CURSOR N_CUR INTO CORRESPONDING FIELDS OF WA.
ENDWHILE.
ENDFORM.
FORM SMOKER USING S_CUR TYPE CURSOR.
WHILE WA-SMOKER = 'X' AND SY-SUBRC = 0.
FORMAT COLOR = 6.
WRITE: / WA-CARRID, WA-CONNID, WA-FLDATE, WA-BOOKID.
FETCH NEXT CURSOR S_CUR INTO CORRESPONDING FIELDS OF WA.
ENDWHILE.
ENDFORM.
The program opens a cursor for the database table SBOOK. After the first FETCH
statement, a subroutine is called, which is dependent on the contents of the
SMOKER column. The cursor is passed to an interface parameter in the subroutine.
The subroutines read further lines until the contents of the SMOKER column change.
The subroutines perform different tasks using the lines read by the cursor.
3.
DATA: WA_SPFLI TYPE SPFLI,
WA_SFLIGHT TYPE SFLIGHT.
DATA: C1 TYPE CURSOR,
C2 TYPE CURSOR.
OPEN CURSOR C1 FOR SELECT *
FROM SPFLI
ORDER BY PRIMARY KEY.
OPEN CURSOR C2 FOR SELECT *
FROM SFLIGHT
ORDER BY PRIMARY KEY.
DO.
FETCH NEXT CURSOR C1 INTO WA_SPFLI.
IF SY-SUBRC NE 0.
EXIT.
ENDIF.
WRITE: / WA_SPFLI-CARRID, WA_SPFLI-CONNID.
DO.
FETCH NEXT CURSOR C2 INTO WA_SFLIGHT.
IF SY-SUBRC <> 0 OR WA_SFLIGHT-CARRID <> WA_SPFLI-CARRID
OR WA_SFLIGHT-CONNID <> WA_SPFLI-CONNID.
EXIT.
ELSE.
WRITE: / WA_SFLIGHT-CARRID, WA_SFLIGHT-CONNID,
WA_SFLIGHT-FLDATE.
ENDIF.
ENDDO.
The program opens a cursor for each of the table SPFLI and SFLIGHT. Since both
tables are linked by a foreign key relationship, it is possible to program a nested loop
by sorting the selection by its primary key, so that the data read in the inner loop
depends on the data in the outer loop.
This programming method is quicker than
using nested SELECT statements, since the cursor for the inner loop does not
continually have to be reopened.
REPORT Z_WUWEI_0019.
*/DECLARING CURSORS-C1 AND C2
DATA: C1 TYPE CURSOR,
C2 TYPE CURSOR.
DATA: WORK_AREA1 TYPE MARA,
WORK_AREA2 TYPE MARA.
DATA: FLAG1(1) TYPE C,
FLAG2(1) TYPE C.
*/OPENING CURSORS-C1 AND C2
OPEN CURSOR: C1 FOR SELECT MATNR "物料号
ERSDA "创建日期
ERNAM "创建对象的人员名称
FROM MARA "常规物料数据
WHERE ERNAM = 'ZHANGSHEN',
C2 FOR SELECT LAEDA "上次更改的日期
AENAM "更改对象用户的名称
FROM MARA
WHERE ERNAM = 'ZHANGSHEN'.
DO.
IF FLAG1 NE 'X'.
*/USING THE C1 CURSOR TO FETCH THE DATA
FETCH NEXT CURSOR C1 INTO CORRESPONDING FIELDS OF WORK_AREA1.
IF SY-SUBRC <> 0.
*/CLOSING THE C1 CURSOR
CLOSE CURSOR C1.
FLAG1 = 'X'.
ELSE.
WRITE: / '物料号:' COLOR 7 , WORK_AREA1-MATNR,'创建日期:' COLOR 6 , WORK_AREA1-ERSDA ,'创建对象的人员名称:' COLOR 5,WORK_AREA1-ERNAM .
ENDIF.
ENDIF.
IF FLAG2 NE 'X'.
*/USING THE C2 CURSOR TO FETCH THE DATA
FETCH NEXT CURSOR C2 INTO CORRESPONDING FIELDS OF WORK_AREA2.
IF SY-SUBRC <> 0.
*/CLOSING THE C2 CURSOR
CLOSE CURSOR C2.
FLAG2 = 'X'.
ELSE.
WRITE: / '上次更改的日期:' COLOR 4 , WORK_AREA2-LAEDA ,'更改对象用户的名称:' COLOR 3 , WORK_AREA2-AENAM.
ENDIF.
ENDIF.
IF FLAG1 = 'X' AND FLAG2 = 'X'.
EXIT.
ENDIF.
ENDDO.
文章转自 http://blog.csdn.net/wengyupeng/article/details/6302261
BC - ABAP Programming中三个例子,很好,摘抄如下,以供学习
1.
DATA: C1 TYPE CURSOR,
C2 TYPE CURSOR.
DATA: WA1 TYPE SPFLI,
WA2 TYPE SPFLI.
DATA: FLAG1,
FLAG2.
OPEN CURSOR: C1 FOR SELECT CARRID CONNID
FROM SPFLI
WHERE CARRID = 'LH',
C2 FOR SELECT CARRID CONNID CITYFROM CITYTO
FROM SPFLI
WHERE CARRID = 'AZ'.
DO.
IF FLAG1 NE 'X'.
FETCH NEXT CURSOR C1 INTO CORRESPONDING FIELDS OF WA1.
IF SY-SUBRC <> 0.
CLOSE CURSOR C1.
FLAG1 = 'X'.
ELSE.
WRITE: / WA1-CARRID, WA1-CONNID.
ENDIF.
ENDIF.
IF FLAG2 NE 'X'.
FETCH NEXT CURSOR C2 INTO CORRESPONDING FIELDS OF WA2.
IF SY-SUBRC <> 0.
CLOSE CURSOR C2.
FLAG2 = 'X'.
ELSE.
WRITE: / WA2-CARRID, WA2-CONNID,
WA2-CITYFROM, WA2-CITYTO.
ENDIF.
ENDIF.
IF FLAG1 = 'X' AND FLAG2 = 'X'.
EXIT.
ENDIF.
ENDDO.
2.
DATA C TYPE CURSOR.
DATA WA TYPE SBOOK.
OPEN CURSOR C FOR SELECT CARRID CONNID FLDATE BOOKID SMOKER
FROM SBOOK
ORDER BY CARRID CONNID FLDATE SMOKER BOOKID.
FETCH NEXT CURSOR C INTO CORRESPONDING FIELDS OF WA.
WHILE SY-SUBRC = 0.
IF WA-SMOKER = ' '.
PERFORM NONSMOKER USING C.
ELSEIF WA-SMOKER = 'X'.
PERFORM SMOKER USING C.
SKIP.
ELSE.
EXIT.
ENDIF.
ENDWHILE.
FORM NONSMOKER USING N_CUR TYPE CURSOR.
WHILE WA-SMOKER = ' ' AND SY-SUBRC = 0.
FORMAT COLOR = 5.
WRITE: / WA-CARRID, WA-CONNID, WA-FLDATE, WA-BOOKID.
FETCH NEXT CURSOR N_CUR INTO CORRESPONDING FIELDS OF WA.
ENDWHILE.
ENDFORM.
FORM SMOKER USING S_CUR TYPE CURSOR.
WHILE WA-SMOKER = 'X' AND SY-SUBRC = 0.
FORMAT COLOR = 6.
WRITE: / WA-CARRID, WA-CONNID, WA-FLDATE, WA-BOOKID.
FETCH NEXT CURSOR S_CUR INTO CORRESPONDING FIELDS OF WA.
ENDWHILE.
ENDFORM.
The program opens a cursor for the database table SBOOK. After the first FETCH
statement, a subroutine is called, which is dependent on the contents of the
SMOKER column. The cursor is passed to an interface parameter in the subroutine.
The subroutines read further lines until the contents of the SMOKER column change.
The subroutines perform different tasks using the lines read by the cursor.
3.
DATA: WA_SPFLI TYPE SPFLI,
WA_SFLIGHT TYPE SFLIGHT.
DATA: C1 TYPE CURSOR,
C2 TYPE CURSOR.
OPEN CURSOR C1 FOR SELECT *
FROM SPFLI
ORDER BY PRIMARY KEY.
OPEN CURSOR C2 FOR SELECT *
FROM SFLIGHT
ORDER BY PRIMARY KEY.
DO.
FETCH NEXT CURSOR C1 INTO WA_SPFLI.
IF SY-SUBRC NE 0.
EXIT.
ENDIF.
WRITE: / WA_SPFLI-CARRID, WA_SPFLI-CONNID.
DO.
FETCH NEXT CURSOR C2 INTO WA_SFLIGHT.
IF SY-SUBRC <> 0 OR WA_SFLIGHT-CARRID <> WA_SPFLI-CARRID
OR WA_SFLIGHT-CONNID <> WA_SPFLI-CONNID.
EXIT.
ELSE.
WRITE: / WA_SFLIGHT-CARRID, WA_SFLIGHT-CONNID,
WA_SFLIGHT-FLDATE.
ENDIF.
ENDDO.
The program opens a cursor for each of the table SPFLI and SFLIGHT. Since both
tables are linked by a foreign key relationship, it is possible to program a nested loop
by sorting the selection by its primary key, so that the data read in the inner loop
depends on the data in the outer loop.
This programming method is quicker than
using nested SELECT statements, since the cursor for the inner loop does not
continually have to be reopened.
相关文章推荐
- SAP ABAP系统使用SSFS方式连接oracle数据
- Mysql存储过程循环内嵌套使用游标示例
- 游标使用示例
- sap-ABAP动态内表使用的例子
- ABAP–使用SAP提供的标准函数进行单值的输入[转载]
- 什么是游标。游标使用示例。
- ABAP游标的使用
- sql server 游标使用简示例
- mysql存储过程示例(使用嵌套游标)
- 关于SQL Server 游标的使用 示例
- 游标使用示例
- SAP系统中ABAP程序运行示例
- SQL脚本积累之六-----游标的使用示例
- mysql 存储过程示例,有参有返回值,使用到了判断,循环,游标,临时表,事务
- 把结果集放到临时表中的示例代码(使用游标)
- sql循环嵌套、游标使用、循环结果集示例
- sybase中游标的使用示例
- sql server游标使用示例
- SQL游标(cursor)详细说明及内部循环使用示例