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

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Ahrefs [Bot]


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

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