您的位置:首页 > 数据库

ABAP--原生SQL接口API(ADBC)的使用

2018-01-10 16:12 363 查看
ABAP--原生SQL接口API(ADBC)的使用

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   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: