2013-02-23 2 views
0

можно ли импортировать данные в таблицу SQL Server непосредственно в SAP ABAP itab (table)?как импортировать таблицу сервера sql в SAP ABAP itab?

Я хочу использовать этот Itab в функции SE37 .. заранее спасибо

+0

Да. Нет. Возможно. Может быть, может и нет. Не могли бы вы дать нам более четкое представление о том, что вы хотите сделать, и о том, что вы уже пробовали и исследовали? – vwegert

+0

'SELECT * FROM INTO TABLE '? Но тогда вы должны быть уверены, что эта таблица базы данных очень маленькая и не содержит слишком много записей. – Jagger

ответ

2

Для вашей задачи вы можете использовать функциональный модуль (SE37), или вы можете использовать модуль бассейн или отчет (SE38, SE80) , Проверьте этот отчет:

report zinsertdb. 

data: oref type ref to cx_root, 
     p_conex type dbcon_name value 'YOUR_DB_CONNECTION_STRING', " Ask the basis for this 
     lv_sw type c, 
     errormessage type string. 

data it_mydata type standard table of mara. 

start-of-selection. 

    perform connect. 
    perform insert_into_db. 
    perform disconnect. 

form connect. 
    try. 
     EXEC SQL. 
     CONNECT TO :p_conex 
     ENDEXEC. 
     lv_sw = 'X'. 
    catch cx_sy_native_sql_error into oref. 
     lv_sw = space. 
     errormessage = oref->get_text(). 
    endtry. 
endform. 

form disconnect. 
    clear errormessage. 
    if lv_sw = 'X'. 
    try. 
     EXEC SQL. 
      COMMIT 
     ENDEXEC. 
     catch cx_sy_native_sql_error into oref. 
     errormessage = oref->get_text().  
    endtry. 
    endif. 
endform. 

form insert_into_db. 

    data wa_mydata like line of it_mydata. 
    data zcount type i. 

    select * from mara into corresponding fields of table it_mydata. 

    if sy-subrc EQ 0. 

    loop at it_mydata into wa_mydata. 

     try . 

      exec sql. 
       EXECUTE PROCEDURE sp_get_data (IN :wa_mydata-EAN11, IN :wa_mydata-MEINS, OUT :zcount) 
      endexec. 

      if zcount eq 0. 
       exec sql. 
       INSERT INTO "Your_Database".dbo.[Your_table] 
       (Field1, Field2, Field3, FieldN) 
       VALUES (:wa_mydata-matnr, 
         :wa_mydata-ean11, 
         :wa_mydata-matkl, 
         :wa_mydata-meins) 
       endexec. 
       lv_sw = 'X'. 
      endif. 

      catch cx_sy_native_sql_error into oref. 
      lv_sw = space. 
      errormessage = oref->get_text(). 
     endtry. 

    endloop. 

    endif. 

endform. 

Надеюсь, это поможет.

1

Это не совсем понятно, что вы хотите сделать. Я предполагаю, что вы имеете в виду, что вы хотите прочитать всю таблицу SQL (или некоторые записи из нее) в память программы? Возможно, вы могли бы пролить немного света здесь?

Если это так, вы можете просто объявить внутреннюю таблицу, которая имеет структуру вашей таблицы SQL, содержащей данные.

DATA: table_name TYPE STANDARD/HASHED/SORTED TABLE OF name_of_sql_table.

FIELD-SYMBOLS <structure> TYPE name_of_sql_table.

SELECT * FROM name_of_sql_table INTO TABLE table_name.

И оттуда он просто читает данные из внутренней таблицы.

READ TABLE table_name ASSIGNING <structure> WITH KEY table_key_field(s) = condition(s).

Но, как Джаггер сказал быть осторожным, насколько велика ваша таблица.

Смежные вопросы