<转>SY-SUBRC 的含义

 SY-SUBRC 的含义 收藏 

在网上和书上就是找不到多少RFC的实例,现在将这个实例公开给大家,希望能给大家带来启发!

 

================= FUNCTION MODULE (或RFC中) SY-SUBRC 的含义 ================

使用SELECT语句选择查询:

SY-SUBRC = 0: 至少有一行数据,当ENDSELECT语句执行完,SY-DBCNT中保存着记录的个数。

SY-SUBRC = 4: 没有数据。

SY-SUBRC = 8: 只有使用“SELECT SINGLE FOR UPDATE”时才会有,

              表示: WHERE条件指定的记录不止一行,结果是没有记录被选中。

 

使用INSERT语句,向表中插入一行,必须注意INSERT的顺序与表中字段的顺序一致:

SY-SUBRC = 0: 插入成功,SY-DBCNT包含了插入的行数,0或1。

SY-SUBRC = 4: 由于有相同的KEY存在,所以插入失败。

 

使用LOOP语句来遍历一个内表:

SY-SUBRC = 0: 循环至少被执行一次。

SY-SUBRC = 4: 循环没有被执行,可能是没有数据,也可能是没有符合条件的记录。

 

使用DELETE语句来删除一条记录:

SY-SUBRC = 0: 找到一行并删除之,如果该表有不唯一主键,也就是有多条重复的记录,则只删除第一条记录。

SY-SUBRC = 4: 没有找到符合条件的记录,也没有删除。

 

使用UPDATE语句来更新一条记录:

SY-SUBRC = 0: 找到记录并更新,(如果有多条记录呢?)

SY-SUBRC = 4: 没有找到符合条件的记录,也没有更新。

 

 

+++++++++++++++++++++++ 实例RFC ++++++++++++++++++++++++++++++++++++++++++++++

*建立临时表ZTEST1,字段为:

* ZUSERID CHAR 20

* ZPASSWD CHAR 20

*-------------------------------------------------

FUNCTION ZRFC_01.

*"----------------------------------------------------------------------

*"*"Local Interface:

*"  IMPORTING

*"     VALUE(ACTION) TYPE  /1SAP1/CL_ACH0001  传入参数ACTION,表示CREATE、EDIT、DELETE记录

*"     VALUE(WHEREUSERID) TYPE  /GC1/DTE_MSG_TXT 传入参数WHEREUSERID,按照USERID来查找关键字

*"  EXPORTING

*"     VALUE(RETURN) TYPE  /AIN/ACT_PUB_PARAMNAME 传出参数RETURN,返回是否成功,空串表示成功,非空串表示未成功

*"     VALUE(ERRNUM) TYPE  /AIN/ACTIVITY_COUNTER 传出参数ERRNUM,返回错误代码

*"  TABLES

*"      ZTEMPTABLE STRUCTURE  ZTEST1    传入、传出表,以表为参数

*"----------------------------------------------------------------------

 

  TABLES:ZTEST1.

 

  DATA:

  WA_ZTEMPTABLE LIKE ZTEMPTABLE,

  TRANSACTION_ID LIKE ARFCTID,

  V_VAILD(1) TYPE C.

 

  V_VAILD = 'X'.

 

* OPEN A DATA TRANSACTION

  CALL FUNCTION 'TRANSACTION_BEGIN'

    IMPORTING

      TRANSACTION_ID = TRANSACTION_ID.

 

 

  CASE ACTION .

  *按照关键字ZUSERID查询

     WHEN 'QUERY'.

      SELECT * FROM ZTEST1 INTO TABLE ZTEMPTABLE where ZUSERID = WHEREUSERID.

        IF SY-SUBRC = 0.

        ELSE.

          V_VAILD = ''.

          ERRNUM = SY-SUBRC.

        ENDIF.

 

  *选择所有的记录

    WHEN 'SELECTALL'.

      SELECT * FROM ZTEST1 INTO TABLE ZTEMPTABLE.

        IF SY-SUBRC = 0.

        ELSE.

          V_VAILD = ''.

          ERRNUM = SY-SUBRC.

        ENDIF.

 

 *插入记录

    WHEN 'CREATE'.

 

      LOOP AT ZTEMPTABLE INTO WA_ZTEMPTABLE.

        INSERT ZTEST1 FROM WA_ZTEMPTABLE.

        IF SY-SUBRC = 0.

        ELSE.

          V_VAILD = ''.

          ERRNUM = SY-SUBRC.

        ENDIF.

      ENDLOOP.

 

 *修改记录

    WHEN 'EDIT'.

 

      LOOP AT ZTEMPTABLE INTO WA_ZTEMPTABLE.

        UPDATE ZTEST1 FROM WA_ZTEMPTABLE.

        IF SY-SUBRC = 0.

        ELSE.

          V_VAILD = ''.

          ERRNUM = SY-SUBRC.

        ENDIF.

      ENDLOOP.

 

 *删除记录

    WHEN 'DELETE'.

 

      LOOP AT ZTEMPTABLE INTO WA_ZTEMPTABLE.

        DELETE ZTEST1 FROM WA_ZTEMPTABLE.

        IF SY-SUBRC = 0.

        ELSE.

          V_VAILD = ''.

          ERRNUM = SY-SUBRC.

        ENDIF.

      ENDLOOP.

 

    WHEN OTHERS.

 

  ENDCASE.

 

  *如果V_VALID为X,则表示成功,否则表示失败,并返回RETURN错误代码

  IF V_VAILD = 'X'.

    CALL FUNCTION 'TRANSACTION_END'

      EXPORTING

        TRANSACTION_ID = TRANSACTION_ID.

    RETURN = ''.

  ELSE.

    CALL FUNCTION 'TRANSACTION_ABORT'

      EXPORTING

        TRANSACTION_ID = TRANSACTION_ID.

    RETURN = 'THE CURRENT ACTION IS FAILURE!'.

 

 

  ENDIF.

 

 

ENDFUNCTION.

 

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/barongbachi123/archive/2009/05/19/4201521.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值