Текущее время: Чт, май 15 2025, 18:51

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: EXEC SQL
СообщениеДобавлено: Пт, сен 23 2005, 08:42 
Гость
Добрый день!

Подскажите, пожалуйста, как из abap-программы обратиться к внешней таблице базы данных SQL и считать записи.
Если можно, приведите пример кода.

Спасибо.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, сен 23 2005, 09:39 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Вт, авг 17 2004, 08:55
Сообщения: 331
Откуда: Украина, г.Мариуполь
Пол: Мужской
А "внешняя" - это в какой базе? Оракл или мелкософт? Пример оракла:
Code:
data: begin of is_ekko,
       ebeln like ekko-ebeln,
       aedat like ekko-aedat,
       ernam like ekko-ernam,
      end of is_ekko,
      vebeln = 'xxxxx'.
exec sql.
  select ebeln, aedat, ernam
    into :is_ekko-ebeln, :is_ekko-aedat, :is_ekko-ernam
    from ekko
   where mandt=:sy-mandt
     and ebeln=:vebeln;
endexec.

А вообще, в справке все неплохо описано с кучей примеров.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, сен 23 2005, 09:52 
Гость
"Внешняя" - это СУБД SQL.

Спасибо за пример, немного разобрался.
Там еще нужно соединение прописать в таблице DBCON и соответственно вызвать это соединение из abap-программы.
CONNECT TO 'логическое_имя'

на данные момент программа выходит в дамп с ошибкой: таблица не существует.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, сен 23 2005, 10:11 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
Дмитрий_ написал(а):
"Внешняя" - это СУБД SQL.

эт ты хорошо объяснил... субд MS SQL?

Цитата:
на данные момент программа выходит в дамп с ошибкой: таблица не существует.


вообще, если у вас есть доступ к вашему серверу БД, то запрос лучше оттестировать напрямую в запроснике, а потом уже пихать в абап

_________________
- Может ли настоящий мастер кунг-фу получить по морде?
- Настоящий мастер может все!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, сен 23 2005, 10:13 
Ассистент
Ассистент
Аватара пользователя

Зарегистрирован:
Пт, ноя 05 2004, 04:13
Сообщения: 36
Пол: Мужской
Дмитрий_ написал(а):
на данные момент программа выходит в дамп с ошибкой: таблица не существует.

Если это оракл (для других тонкостей не знаю), то может спасти указание схемы, например:
select * from имя_схемы.таблица;
ну и права доступа проверить ;)

Этот пример должен сработать практически с любой БД Оракл:
Code:
REPORT Z_DB_CONNECT .
data nm(20) type c.
exec sql.
connect to 'ORACLE_DB' as 'SM1'
endexec.
exec sql.
select table_name into :nm from all_tables
endexec.
exec sql.
disconnect 'SM1'
endexec.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, сен 23 2005, 11:06 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Вт, авг 17 2004, 08:55
Сообщения: 331
Откуда: Украина, г.Мариуполь
Пол: Мужской
Цитата:
Code:
select table_name into :nm from all_tables

Боюсь, дамп будет. Ошибка ORA-01422 exact fetch returns more than requested number of rows. Я не знаю, как будет работать bulk collect с саперовскими таблицами. По-моему, не будет. Поэтому и оптимизировать работу с массивом данных не получится. А в Вашем примере надо указать WHERE.

З.Ы. А вьюшка называется ALL_ALL_TABLES (надо указывать OWNER'a) или USER_TABLES (для текущего пользователя). Вполне пройдет, т.к. в базу R/3 лезет только под своим именем, если, конечно, автор натива не законнектился под другим именем.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, сен 29 2005, 04:39 
Гость
Чтобы было все совсем красиво и не было ошибки ORA-01422, нужно воспользоваться курсором и считывать данные построчно:
EXEC SQL.
CONNECT TO 'BD'
END EXEC.
EXEC SQL.
open c for select dtot, kskl, cena, koln,
sumn, puti, mstn, mstk,
kmtr, tmol, kdbu
from bf_ostn_sap
where mstn = :mandt
and bukrs = :be
and ( dtot between :monat_n
and nvl( :monat_k , :monat_n ) )
and puti like :hk
ENDEXEC.
DO.
EXEC SQL.
fetch next c into :itab.
ENDEXEC.
IF sy-subrc NE 0.
EXIT.
ENDIF.
APPEND itab.
ENDDO.
EXEC SQL.
close c
ENDEXEC.
EXEC SQL.
DISCONNECT 'BD'
ENDEXEC.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, сен 29 2005, 08:39 
Гость
читаем ноту 323151 "Several DB connections with Native SQL"


Принять этот ответ
Вернуться к началу
  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB