SAP 如何连接外部数据库

找Basis 配置下AL11的路径  连接ORA/MSS的数据库

DIR_SETUPS ->   /usr/sap/DEV/SYS/profile/oracle/tnsnames.ora 的环境变量

BOPRD =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ****->服务器IP)(PORT = 1521->端口)) 
    )
   (CONNECT_DATA =
      (SID = orcl)
      (SERVER = ***->服务器IP)
       (SERVICE_NAME = orcl)
    )
  )

在DBCO 下,创建数据库连接

SAP 如何连接外部数据库_第1张图片

 也可以直接配置:

 SAP 如何连接外部数据库_第2张图片

 MSSSQL_SERVER = 服务器名  MSSSQL_DBNAME=数据库名 OBJECT_SOURCE= 数据库名

SAP 如何连接外部数据库_第3张图片

上面三种都可以

这就创建完了

注:任何数据库配置信息都存放在表DBCON

SAP 如何连接外部数据库_第4张图片

 写个程序测试下


DATA: p_connr TYPE dbcon-con_name  VALUE 'SRMDEV'.
TRY.
    " 连接
    EXEC SQL.
      CONNECT TO :p_connr
    ENDEXEC.
    IF sy-subrc <> 0.
      RAISE EXCEPTION TYPE cx_sy_native_sql_error.
    ELSE.
      MESSAGE '连接成功' TYPE 'S'.
    ENDIF.

    EXEC SQL.
      SET CONNECTION :p_connr
    ENDEXEC.   

*     关闭连接
    EXEC SQL.
      DISCONNECT :p_connr
    ENDEXEC.
  CATCH cx_sy_native_sql_error.
    MESSAGE `Error in Native SQL.` TYPE 'E'.
ENDTRY.

 

Native SQL语句不能以句点号结尾;不能在EXEC SQL…ENDEXEC间有注释,即不能有星号与双引号的出现;另外还要注意数据库系统大小写是否敏感;参数占位符使用冒号,而不是问号;


EXEC SQL PERFORMING loop_output.
  SELECT field1, field2
    INTO :l_field1,:l_field2
    FROM spfli
    WHERE carrid = :c1
ENDEXEC.
FORM loop_output.
  WRITE: / l_field1,l_field2.
ENDFORM

调用存储过程

EXECUTE PROCEDURE ( )

参数以逗号分隔,并需要IN、OUT 来指定是输入还是输出参数,或者是使用INOUT来表示即是输入也是输出参数

EXEC SQL.
  EXECUTE PROCEDURE proc1 ( IN :field1, OUT :l_field1 )
ENDEXEC.

游标处理:

OPENFOR

FETCH NEXT INTO.

CLOSE

DATA: arg1 TYPE string VALUE '300'.
TABLES: t001.
"打开游标
EXEC SQL.
  OPEN c1 FOR SELECT MANDT, BUKRS FROM T001
              WHERE MANDT = :arg1 AND BUKRS >= '1000'
ENDEXEC.
DO.
  "读取游标
  EXEC SQL.
    FETCH NEXT c1 INTO :t001-mandt, :t001-bukrs
  ENDEXEC.
  IF sy-subrc <> 0.
    EXIT.
  ELSE.
    WRITE: / t001-mandt, t001-bukrs.
  ENDIF.
ENDDO.
"关闭游标
EXEC SQL.
  CLOSE c1
ENDEXEC.

参考资料:

http://www.cnblogs.com/qlb8268/p/3603297.html

https://www.cnblogs.com/jiangzhengjun/p/4293506.html

你可能感兴趣的:(Oracle,Sap,sap,abap)