博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SY-SUBRC 的含义
阅读量:2034 次
发布时间:2019-04-28

本文共 2654 字,大约阅读时间需要 8 分钟。

使用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.

转载地址:http://mloaf.baihongyu.com/

你可能感兴趣的文章
计算机网络技术复习题 第十章 下一代因特网
查看>>
数据重生:让神经机器翻译中的不活跃样本“复活”
查看>>
直播预告:AAAI 2021专场一| AI TIME PhD
查看>>
同一种方法,同一句话,翻译成英语和泰语,差别为什么这么大?
查看>>
弱监督、具有可解释性的应用题解答
查看>>
前序、中序、后序递归、非递归方式打印二叉树
查看>>
八大排序之插入排序(直接插入排序 & 希尔排序)
查看>>
C++之erase、remove 、remove_if的区别
查看>>
C++ 异常
查看>>
02.基础设施即代码实践笔记
查看>>
02.HTML中使用JavaScript--JavaScript高级程序设计(笔记)
查看>>
05.看板方法——持续改进的文化
查看>>
欢迎使用CSDN-markdown编辑器
查看>>
bash shell简述
查看>>
bash 重定向
查看>>
bash 命令执行环境
查看>>
物理内存的管理
查看>>
高效能人士的七个习惯——由内而外全面造就自己
查看>>
为什么精英都是清单控(笔记)——工作清单
查看>>
怦然心动的人生整理魔法(笔记)——物品类别整理
查看>>