ABAP–原生SQL接口API(ADBC)的使用详解编程语言
ADBC(ABAP Database Connectivity)
sap为大家提供原生SQL(Native SQL)接口API,该接口主要由四个类组成:
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
原生SQL接口API可以在ABAP里执行动态的原生SQL操作,解决用户一些非常特殊的操作需求。
样例一:数据定义语言DDL(Create,Drop,Grant,Revoke) 和数据操纵语言DML(Update,Insert,Delete)操作
REPORT demo_adbc_ddl_dml.
PARAMETERS p_name TYPE c LENGTH 10 DEFAULT mytab .
SELECTION-SCREEN SKIP.
PARAMETERS: p_create RADIOBUTTON GROUP grp,
p_insert RADIOBUTTON GROUP grp,
p_select RADIOBUTTON GROUP grp,
p_drop RADIOBUTTON GROUP grp.
SELECTION-SCREEN SKIP.
PARAMETERS p_key TYPE i DEFAULT 1.
CLASS adbc DEFINITION.
PUBLIC SECTION.
CLASS-METHODS main.
PRIVATE SECTION.
CLASS-DATA: dbname TYPE string,
sql TYPE REF TO cl_sql_statement,
wa1 TYPE c LENGTH 10,
wa2 TYPE c LENGTH 10,
err TYPE REF TO cx_sql_exception .
CLASS-METHODS: create RAISING cx_sql_exception,
insert RAISING cx_sql_exception,
select RAISING cx_sql_exception,
drop RAISING cx_sql_exception.
ENDCLASS.
CLASS adbc IMPLEMENTATION.
METHOD main.
dbname = ABAP_DOCU_DEMO_ p_name.
TRY.
CREATE OBJECT sql.
IF p_create = X .
create( ).
MESSAGE Create was successful TYPE S .
ELSEIF p_insert = X .
insert( ).
MESSAGE Insert was successful TYPE S .
ELSEIF p_select = X .
select( ).
MESSAGE Select was successful TYPE S .
ELSEIF p_drop = X .
drop( ).
MESSAGE Drop was successful TYPE S .
ENDIF.
CATCH cx_sql_exception INTO err.
MESSAGE err TYPE I DISPLAY LIKE E .
ENDTRY.
ENDMETHOD.
METHOD create.
sql- execute_ddl(
`CREATE TABLE ` dbname
`( val1 char(10) NOT NULL,`
` val2 char(10) NOT NULL,`
` PRIMARY KEY (val1) )` ).
ENDMETHOD.
METHOD insert.
DO 100 TIMES.
wa1 = sy-index.
wa2 = sy-index ** 2.
sql- execute_update(
`INSERT INTO ` dbname ` `
`VALUES ( ` wa1 ` , ` wa2 ` )` ).
ENDDO.
ENDMETHOD.
METHOD select.
DATA: result TYPE REF TO cl_sql_result_set,
msg TYPE c LENGTH 30,
key TYPE c LENGTH 10,
dref TYPE REF TO data,
rc TYPE i.
key = p_key.
result = sql- execute_query(
`SELECT val1, val2 `
`FROM ` dbname ` `
`WHERE val1 = ` ` ` key ` ` ).
GET REFERENCE OF wa1 INTO dref.
result- set_param( dref ).
GET REFERENCE OF wa2 INTO dref.
result- set_param( dref ).
rc = result- next( ).
IF rc 0.
WRITE: Result: TO msg,
wa1 TO msg+10,
wa2 TO msg+20.
ELSE.
msg = No entry found .
ENDIF.
result- close( ).
MESSAGE msg TYPE I .
ENDMETHOD.
METHOD drop.
sql- execute_ddl(
`DROP TABLE ` dbname ).
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
adbc= main( ).
样例二、参数绑定样例
REPORT demo_adbc_ddl_dml_binding.
PARAMETERS p_name TYPE c LENGTH 10 DEFAULT mytab .
SELECTION-SCREEN SKIP.
PARAMETERS: p_create RADIOBUTTON GROUP grp,
p_insert RADIOBUTTON GROUP grp,
p_select RADIOBUTTON GROUP grp,
p_drop RADIOBUTTON GROUP grp.
SELECTION-SCREEN SKIP.
PARAMETERS p_key TYPE i DEFAULT 1.
CLASS adbc DEFINITION.
PUBLIC SECTION.
CLASS-METHODS main.
PRIVATE SECTION.
CLASS-DATA: dbname TYPE string,
sql TYPE REF TO cl_sql_statement,
wa1 TYPE c LENGTH 10,
wa2 TYPE c LENGTH 10,
err TYPE REF TO cx_sql_exception .
CLASS-METHODS: create RAISING cx_sql_exception,
insert RAISING cx_sql_exception,
select RAISING cx_sql_exception,
drop RAISING cx_sql_exception.
ENDCLASS.
CLASS adbc IMPLEMENTATION.
METHOD main.
dbname = ABAP_DOCU_DEMO_ p_name.
TRY.
CREATE OBJECT sql.
IF p_create = X .
create( ).
MESSAGE Create was successful TYPE S .
ELSEIF p_insert = X .
insert( ).
MESSAGE Insert was successful TYPE S .
ELSEIF p_select = X .
select( ).
MESSAGE Select was successful TYPE S .
ELSEIF p_drop = X .
drop( ).
MESSAGE Drop was successful TYPE S .
ENDIF.
CATCH cx_sql_exception INTO err.
MESSAGE err TYPE I DISPLAY LIKE E .
ENDTRY.
ENDMETHOD.
METHOD create.
sql- execute_ddl(
`CREATE TABLE ` dbname
`( val1 char(10) NOT NULL,`
` val2 char(10) NOT NULL,`
` PRIMARY KEY (val1) )` ).
ENDMETHOD.
METHOD insert.
DATA dref TYPE REF TO data.
DO 100 TIMES.
GET REFERENCE OF wa1 INTO dref.
sql- set_param( dref ).
GET REFERENCE OF wa2 INTO dref.
sql- set_param( dref ).
wa1 = sy-index.
wa2 = sy-index ** 2.
sql- execute_update(
`INSERT INTO ` dbname ` VALUES (?,?)` ).
ENDDO.
ENDMETHOD.
METHOD select.
DATA: result TYPE REF TO cl_sql_result_set,
msg TYPE c LENGTH 30,
key TYPE c LENGTH 10,
dref TYPE REF TO data,
rc TYPE i.
key = p_key.
GET REFERENCE OF key INTO dref.
sql- set_param( dref ).
result = sql- execute_query(
`SELECT val1, val2 `
`FROM ` dbname ` `
`WHERE val1 = ?` ).
GET REFERENCE OF wa1 INTO dref.
result- set_param( dref ).
GET REFERENCE OF wa2 INTO dref.
result- set_param( dref ).
rc = result- next( ).
IF rc 0.
WRITE: Result: TO msg,
wa1 TO msg+10,
wa2 TO msg+20.
ELSE.
msg = No entry found .
ENDIF.
result- close( ).
MESSAGE msg TYPE I .
ENDMETHOD.
METHOD drop.
sql- execute_ddl(
`DROP TABLE ` dbname ).
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
adbc= main( ).
样例三、存储过程调用
REPORT demo_adbc_stored_procedure.
PARAMETERS incprice TYPE sflight-price.
CLASS demo DEFINITION.
PUBLIC SECTION.
CLASS-METHODS main.
ENDCLASS.
CLASS demo IMPLEMENTATION.
METHOD main.
DATA: sql TYPE REF TO cl_sql_statement,
err TYPE REF TO cx_sql_exception,
dref TYPE REF TO data.
CREATE OBJECT sql.
TRY.
sql- execute_ddl(
`CREATE OR REPLACE PROCEDURE increase_price (x IN NUMBER) IS `
`BEGIN `
`UPDATE sflight SET price = price + x`
` WHERE mandt = ` sy-mandt ` `
`END;` ).
GET REFERENCE OF incprice INTO dref.
sql- set_param( data_ref = dref
inout = cl_sql_statement= c_param_in ).
sql- execute_procedure( proc_name = increase_price ).
CATCH cx_sql_exception INTO err.
MESSAGE err TYPE I DISPLAY LIKE E .
ENDTRY.
ENDMETHOD.
ENDCLASS.
INITIALIZATION.
IF sy-dbsys ORACLE .
MESSAGE Example is only for Oracle SQL TYPE I DISPLAY LIKE E .
LEAVE PROGRAM.
ENDIF.
START-OF-SELECTION.
demo= main( ).
样例四、动态查询样例,参见sap程序ADBC_QUERY
以上代码都是从sap帮助文档摘抄。
相关连接:IT虾米网
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/20097.html
coracle相关文章
- 接口测试简介以及接口测试用例设计思路
- 封装httpClient工具类进行get、post、put、delete的http接口请求,可添加请求头与参数,支持多线程
- minipcie网卡接口_开mini的女人特点
- spring boot中shiro使用自定义注解屏蔽接口鉴权
- 抖音API接口_抖音榜单数据api接口
- SQL去重语句_sql中文
- 个人号微信api接口开发_API接口授权系统php源码
- 京东商品评论接口(item_review-获得JD商品评论)代码展示
- 如何设计api接口
- 接口测试|Fiddler介绍以及安装
- 使用Postman工具做接口测试(二)——环境变量与请求参数格式
- 美国将对华禁运“脑机接口”技术
- Hibernate之Query接口的uniqueResult()方法详解编程语言
- 优化Oracle SQL优化:提升性能的先进方法(oracle当前sql)
- 日志探索Linux查看SQL数据库日志(linux查看sql)
- MySQL API接口:数据库连接与应用(mysql的api接口)
- 借助 zope.interface 深入了解 Python 接口
- MySQL查看历史SQL:史上最全指南(mysql查看历史sql)
- IHttpModule接口事件执行
- MySQL SQL监控:保障数据库运行稳定的必备措施(mysql sql 监控)
- 探索Oracle数据库中的关联式SQL(oracle关联sql)
- 精通Oracle元数据之SQL编程(oracle元数据sql)
- API接口轻松连接MySQL数据库(api接口到mysql)
- 整合Redis提升接口性能,减少耗时(接口耗时redis)
- oracle与SQL 背后的不同(oracle与sql区别)
- Oracle SQL妙用提示优化工作效率(oracle sql提示)
- Oracle SQL 超越普通,开启新时代(oracle sql大于)
- Oracle SQL传参精准实现数据查询(oracle sql传参)
- 研究Oracle API接口,助推业务发展(oracle api接口)