zoukankan      html  css  js  c++  java
  • DBCO

    实现SAP连接外部数据库
    也可用SM30维护DBCON的内容

    SAP提供了对原生sql的操作,主要有以下几个类组成:

    • CL_SQL_STATEMENT - Execution of SQL Statements
    • CL_SQL_PREPARED_STATEMENT - Prepared SQL Statements
    • CL_SQL_CONNECTION - Administration of Database Connections
    • CX_SQL_EXCEPTION - Exception Class for SQL Error

    还会用到:

    • CL_SQL_RESULT_SET- Resulting Set of an SQL Query
    • CX_PARAMETER_INVALID- Superclass for Parameter Error

    示例代码:

    FUNCTION xxx.
    TYPES: BEGIN OF t_sp_test,
        a TYPE char10,
      END OF t_sp_test,
      t_sp_test_tab TYPE TABLE OF t_sp_test.
    
      DATA: lt_sp_test TYPE t_sp_test_tab,
            ls_sp_test TYPE t_sp_test.
    
      DATA: lv_root_message TYPE string.
      DATA: lv_sql_message TYPE string.
      DATA: lv_param_message TYPE string.
      DATA: lr_cxsql TYPE REF TO cx_sql_exception.
      DATA: lr_cxpar TYPE REF TO cx_parameter_invalid.
      DATA: l_con_ref TYPE REF TO cl_sql_connection.
      DATA: l_stmt_ref TYPE REF TO cl_sql_statement.
      DATA: l_res_ref TYPE REF TO cl_sql_result_set.
      DATA: lv_stmt TYPE string.
      DATA: l_dref TYPE REF TO data,
            ncount TYPE i,
            l_error TYPE c.
    
      result = 0.
    
      TRY.
          CALL METHOD cl_sql_connection=>get_connection
            EXPORTING
              con_name = dbconn
            RECEIVING
              con_ref  = l_con_ref.
        CATCH cx_sql_exception INTO lr_cxsql.
          result = 1.
          lv_root_message = lr_cxsql->get_text( ).
          lv_sql_message = lr_cxsql->sql_message.
          CONCATENATE msg lv_root_message lv_sql_message INTO msg SEPARATED BY '/'.
          EXIT.
      ENDTRY.
    
      IF result <> 1.
        LOOP AT sql INTO lv_stmt.
    
          CALL METHOD l_con_ref->create_statement
            RECEIVING
              stmt_ref = l_stmt_ref.
    
          TRY.
    
              CALL METHOD l_stmt_ref->execute_update
                EXPORTING
                  statement      = lv_stmt
                RECEIVING
                  rows_processed = ncount.
    
            CATCH cx_sql_exception INTO lr_cxsql.
              result = 1.
              lv_root_message = lr_cxsql->get_text( ).
              lv_sql_message = lr_cxsql->sql_message.
              CONCATENATE msg lv_root_message lv_sql_message INTO msg SEPARATED BY '/'.
              EXIT.
    
            CATCH cx_parameter_invalid INTO lr_cxpar.
              result = 1.
              lv_root_message = lr_cxpar->get_text( ).
              lv_param_message = lr_cxpar->parameter.
              CONCATENATE msg lv_root_message lv_sql_message INTO msg SEPARATED BY '/'.
              EXIT.
          ENDTRY.
        ENDLOOP.
      ENDIF.
    
      IF result = 1.
        CALL METHOD l_con_ref->rollback.
      ELSE.
        CALL METHOD l_con_ref->commit.
      ENDIF.
    
      GET REFERENCE OF ls_sp_test INTO l_dref.
    
      IF dbconn <> 'DEFAULT'.
        CALL METHOD l_con_ref->close.
      ENDIF. 
    ENDFUNCTION.
    
    • Import
      • DBCONN TYPE C
    • Export
      • RESULT TYPE I
      • MSG TYPE BAPI_MSG
    • Tables
      • SQL
  • 相关阅读:
    【C#进阶系列】06 类型和成员基础
    纪中5日T1 1564. 旅游
    纪中17日T1 2321. 方程
    纪中17日T2 2322. capacitor
    纪中10日T1 2313. 动态仙人掌
    纪中14日听课小结 图论 最短路 二分图 差分约束
    一个抓猫的游戏 消遣GAME 持续更新中!
    洛谷P1464 Function  HDU P1579 Function Run Fun
    洛谷P1976 鸡蛋饼
    纪中12日T1 2307. 选择
  • 原文地址:https://www.cnblogs.com/aurora-cj/p/9466511.html
Copyright © 2011-2022 走看看