Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Fetch data From SQL Server table to SAP Table... Problem in Code

Former Member
3,312

Hi Friends,

Connection between SQL Server and SAP is working fine, I am sending data from SAP into SQL Table successfully, but when I am fetching data from SQL Server table into SAP internal table I am facing problem. Please suggest if you have any reference code. I want to know how to write select query to fecth multiple records from SQL into internal table.

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
1,567

Hi,

I got the solution.

https://blogs.sap.com/2008/10/27/using-abap-to-access-non-sap-databases/

REPORT  zmona_read_customer_addr.
TYPES: BEGIN OF mona_cust_addr_type,
         cno(4)        TYPE n,
         title(7)      TYPE c,
         name(40)      TYPE c,
         zip(5)        TYPE c,
         city(3)       TYPE c,
         state(2)      TYPE c,
         address(40)   TYPE c,
       END OF mona_cust_addr_type.
DATA: ls_custaddr  TYPE           mona_cust_addr_type,
      lt_custaddr  TYPE TABLE OF  mona_cust_addr_type.
* Connect to MONA database
EXEC SQL.
  CONNECT TO 'MONA'
ENDEXEC.
IF sy-subrc <> 0.
  MESSAGE 'Unable to connect to MONA' TYPE 'E' DISPLAY LIKE 'I'.
  RETURN.
ENDIF.
* Define database cursor
EXEC SQL.
  OPEN dbcur FOR
    SELECT cno, title, name, zip, city, state, address
           FROM HOTEL.CUSTOMER_ADDR
ENDEXEC.
* Fill customer itab
DO.
  EXEC SQL.
    FETCH NEXT dbcur INTO :ls_custaddr-cno,
                          :ls_custaddr-title,
                          :ls_custaddr-name,
                          :ls_custaddr-zip,
                          :ls_custaddr-city,
                          :ls_custaddr-state,
                          :ls_custaddr-address
  ENDEXEC.
  IF sy-subrc <> 0.
    EXIT.
  ELSE.
    APPEND ls_custaddr TO lt_custaddr.
  ENDIF.
ENDDO.
* Close connection to MONA
EXEC SQL.
  CLOSE dbcur
ENDEXEC.
* Reset to "default connection"
EXEC SQL.
  SET CONNECTION DEFAULT
ENDEXEC.
* Print 20 records
LOOP AT lt_custaddr INTO ls_custaddr.
  WRITE: /,
          ls_custaddr-cno,
          ls_custaddr-title,
          ls_custaddr-name,
          ls_custaddr-zip,
          ls_custaddr-city,
          ls_custaddr-state,
          ls_custaddr-address.
  IF sy-tabix > 20.
    EXIT.
  ENDIF.
ENDLOOP.
3 REPLIES 3
Read only

SimoneMilesi
Active Contributor
1,567

Hello,

If you can tell us which is the error, it would be better and we can give you a better help.

Read only

Former Member
0 Likes
1,568

Hi,

I got the solution.

https://blogs.sap.com/2008/10/27/using-abap-to-access-non-sap-databases/

REPORT  zmona_read_customer_addr.
TYPES: BEGIN OF mona_cust_addr_type,
         cno(4)        TYPE n,
         title(7)      TYPE c,
         name(40)      TYPE c,
         zip(5)        TYPE c,
         city(3)       TYPE c,
         state(2)      TYPE c,
         address(40)   TYPE c,
       END OF mona_cust_addr_type.
DATA: ls_custaddr  TYPE           mona_cust_addr_type,
      lt_custaddr  TYPE TABLE OF  mona_cust_addr_type.
* Connect to MONA database
EXEC SQL.
  CONNECT TO 'MONA'
ENDEXEC.
IF sy-subrc <> 0.
  MESSAGE 'Unable to connect to MONA' TYPE 'E' DISPLAY LIKE 'I'.
  RETURN.
ENDIF.
* Define database cursor
EXEC SQL.
  OPEN dbcur FOR
    SELECT cno, title, name, zip, city, state, address
           FROM HOTEL.CUSTOMER_ADDR
ENDEXEC.
* Fill customer itab
DO.
  EXEC SQL.
    FETCH NEXT dbcur INTO :ls_custaddr-cno,
                          :ls_custaddr-title,
                          :ls_custaddr-name,
                          :ls_custaddr-zip,
                          :ls_custaddr-city,
                          :ls_custaddr-state,
                          :ls_custaddr-address
  ENDEXEC.
  IF sy-subrc <> 0.
    EXIT.
  ELSE.
    APPEND ls_custaddr TO lt_custaddr.
  ENDIF.
ENDDO.
* Close connection to MONA
EXEC SQL.
  CLOSE dbcur
ENDEXEC.
* Reset to "default connection"
EXEC SQL.
  SET CONNECTION DEFAULT
ENDEXEC.
* Print 20 records
LOOP AT lt_custaddr INTO ls_custaddr.
  WRITE: /,
          ls_custaddr-cno,
          ls_custaddr-title,
          ls_custaddr-name,
          ls_custaddr-zip,
          ls_custaddr-city,
          ls_custaddr-state,
          ls_custaddr-address.
  IF sy-tabix > 20.
    EXIT.
  ENDIF.
ENDLOOP.
Read only

matt
Active Contributor
1,567

Better to use CL_SQL_STATEMENT and associated classes than EXEC SQL.