DBACOCKPIT 建数据库连接

注:测试连接如果出错,可以用ADBC_TEST_CONNECTION 测试,ADBC_TEST_CONNECTION 测试后有个图标可以点进trace文件,拉到最后,就是出错的具体信息。

连接成功后可以用ADBC_QUERY查询表结构和数据

 

如果报错少文件

B B Loading DB library '/usr/sap/<SID>/D80/exe/dboraslib.so' ...

M *** ERROR => DlLoadLib()==DLENOACCESS - dlopen("/usr/sap/<SID>/D80/exe/dboraslib.so") FAILED

解决

https://launchpad.support.sap.com/#/notes/2850410

2850410 - DBSL is missing during remote database connection to Oracle

 

 

NATIVE SQL 操作 ORACLE

SELECT

data:

      lv_dbs(20),

      lo_exc_ref    type ref to cx_sy_native_sql_error,

      lv_error_text type string.

 

    lv_dbs = 'HR'.

    try.

        exec sql.

          CONNECT TO :lv_dbs

        endexec.

        if sy-subrc <> 0.

          raise exception type cx_sy_native_sql_error.

        endif.

 

        exec sql.

          open c for

                  select objid,stext

                    from EDH.ZHR_ZZJG

        endexec.

        do.

          exec sql.

            FETCH NEXT c INTO :ls_zhr_zzjg

          endexec.

          append ls_zhr_zzjg to lt_zhr_zzjg.

          if sy-subrc ne 0.

            exit.

          endif.

        enddo.

        exec sql.

          CLOSE c

        endexec.

        exec sql.

          DISCONNECT :lv_dbs

        endexec.

 

      catch cx_sy_native_sql_error into lo_exc_ref.

        clear: lv_error_text.

        lv_error_text  = lo_exc_ref->get_text( ).

        message lv_error_text  type 'I'.

        gt_alv-rtype = 'E'.

        gt_alv-rtmsg = lv_error_text.

        modify gt_alv transporting rtype rtmsg where sel = 'X'.

    endtry.

 

MODIFY

data:

    lv_dbs(20),

    lo_exc_ref    type ref to cx_sy_native_sql_error,

    lv_error_text type string.

 

  data:

          lv_xianb like ztpp0015-xianb.

  lv_dbs = 'TEST'.

  try.

      exec sql.

        CONNECT TO :lv_dbs

      endexec.

      if sy-subrc <> 0.

        raise exception type cx_sy_native_sql_error.

      endif.

 

      loop at gt_alv where sel = 'X'.

        exec sql.

          SELECT   xianb

              INTO :lv_xianb

              FROM ZTPP0015

              WHERE werks = :gt_alv-werks and xianb = :gt_alv-xianb

        endexec.

        if sy-subrc = 0.

          exec sql.

            update ZTPP0015 set

              descp_xb = :gt_alv-descp_xb, bum = :gt_alv-bum, descp_bm = :gt_alv-descp_bm,

              weiw = :gt_alv-weiw, lifnr = :gt_alv-lifnr, name1_lifnr = :gt_alv-name1_lifnr, name1_werks = :gt_alv-name1_werks,

              del = :gt_alv-del, aenam = :gt_alv-aenam, aedat = :gt_alv-aedat, aezet = :gt_alv-aezet

            where werks = :gt_alv-werks and xianb = :gt_alv-xianb

          endexec.

        else.

          exec sql.

            INSERT INTO ZTPP0015

                     ( werks, xianb, descp_xb, bum, descp_bm,weiw,lifnr,name1_lifnr,name1_werks,del,aenam,aedat,aezet)

                  VALUES

                     ( :gt_alv-werks,:gt_alv-xianb,:gt_alv-descp_xb,:gt_alv-bum,:gt_alv-descp_bm,:gt_alv-weiw,:gt_alv-lifnr,

                     :gt_alv-name1_lifnr,:gt_alv-name1_werks,:gt_alv-del,:gt_alv-aenam,:gt_alv-aedat,:gt_alv-aezet)

          endexec.

        endif.

        IF sy-subrc = 0.

          gt_alv-rtype = 'S'.

          gt_alv-rtmsg = '发送成功'.

        ENDIF.

        modify gt_alv.

      endloop.

 

      exec sql.

        COMMIT WORK.

        DISCONNECT :lv_dbs

      endexec.

    catch cx_sy_native_sql_error into lo_exc_ref.

      clear: lv_error_text.

      lv_error_text  = lo_exc_ref->get_text( ).

      message lv_error_text  type 'I'.

      gt_alv-rtype = 'E'.

      gt_alv-rtmsg = lv_error_text.

      modify gt_alv transporting rtype rtmsg where sel = 'X'.

  endtry.

 

 

 

SAP连接SQL SERVER

ADBC_TEST_CONNECTION 可以测试DBCO

1.用一个新的中间数据库(非sql server)同步sql server

2.装驱动 odbc

3.使用web service中间件

4.在服务器集群部署一台装在windows操作系统上的sap

5.abap使用OLE直连数据库,但是不能后台运行,性能较差

最终解决 notes 1644499 

 

 

NATIVE SQL

 

连接SQL SERVER代码

  1. *DATA DB TYPE DBCON-CON_NAME VALUE 'ZWMS'.
  2. DATA OBJ_SQLDB TYPE REF TO CX_SY_NATIVE_SQL_ERROR.
  3. DATA RESULT TYPE STRING. "连接数据库返回信息
  4. TRY.
  5. EXEC SQL.
  6. CONNECT TO :'ZWMS'
  7. ENDEXEC.
  8. CATCH CX_SY_NATIVE_SQL_ERROR INTO OBJ_SQLDB.
  9. ENDTRY.
  10. RESULT = OBJ_SQLDB->GET_LONGTEXT( ).

 

使用基于CLASS的ADBC

  1. DBCO创建连接
  2. 使用CL_SQL_CONNECTION=>GET_CONNECTION

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐