找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 下,创建数据库连接
也可以直接配置:
MSSSQL_SERVER = 服务器名 MSSSQL_DBNAME=数据库名 OBJECT_SOURCE= 数据库名
上面三种都可以
这就创建完了
注:任何数据库配置信息都存放在表DBCON中
写个程序测试下
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<name> ( <parameter list> )
参数以逗号分隔,并需要IN、OUT 来指定是输入还是输出参数,或者是使用INOUT来表示即是输入也是输出参数
EXEC SQL.
EXECUTE PROCEDURE proc1 ( IN :field1, OUT :l_field1 )
ENDEXEC.
游标处理:
•OPEN<cursor name>FOR<statement>
•FETCH NEXT <cursor name>INTO<target(s)>.
•CLOSE<cursor name>
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.
参考资料: