Текущее время: Вт, июл 29 2025, 14:31

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Native SQL
СообщениеДобавлено: Ср, янв 06 2010, 11:29 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, апр 08 2008, 14:44
Сообщения: 81
Доброе время суток.

Code:
DATA: BEGIN OF wa OCCURS 100,
        BNAME TYPE USR02-BNAME,
      END OF wa.

EXEC SQL.

  SELECT BNAME
         INTO :wa
         FROM usr02
ENDEXEC.


во внутреннюю табличку (точнее в её header-line) попадает только первая строка из выборки

как получить весь список выборки?


Заранее спасибо.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Native SQL
СообщениеДобавлено: Ср, янв 06 2010, 12:32 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
Скажу честно, мне не приходилось сталкиваться с этим, но посмотрев хелп думаю что так можно сделать...
Иначе не получится...
Code:
DATA: BEGIN OF wa,
        BNAME TYPE USR02-BNAME,
      END OF wa.

EXEC SQL.
OPEN c FOR
  SELECT BNAME
         FROM usr02
ENDEXEC.

DO.
  EXEC SQL.
    FETCH NEXT c INTO :wa-bname
  ENDEXEC.
  IF SY-SUBRC <> 0.
    EXIT.
  ENDIF.
  WRITE: / wa-bname.
ENDDO.
EXEC SQL.
  CLOSE c
ENDEXEC.


Добавил: Не подскажете для чего Вам это?


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Native SQL  Тема решена
СообщениеДобавлено: Ср, янв 06 2010, 13:00 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, апр 08 2008, 14:44
Сообщения: 81
Besa написал:
Скажу честно, мне не приходилось сталкиваться с этим, но посмотрев хелп думаю что так можно сделать...
Иначе не получится...
Code:
DATA: BEGIN OF wa,
        BNAME TYPE USR02-BNAME,
      END OF wa.

EXEC SQL.
OPEN c FOR
  SELECT BNAME
         FROM usr02
ENDEXEC.

DO.
  EXEC SQL.
    FETCH NEXT c INTO :wa-bname
  ENDEXEC.
  IF SY-SUBRC <> 0.
    EXIT.
  ENDIF.
  WRITE: / wa-bname.
ENDDO.
EXEC SQL.
  CLOSE c
ENDEXEC.


Добавил: Не подскажете для чего Вам это?


Спасибо работает.

Ну пример я тут привел первый что в голову пришло :), проблема была в том что возвращалась только одна строка а не список. На самом деле прога будет выбирать все Z индексы которые используются и потом сбрасывать флаги использования. Задание будет отрабатывать периодически. Таким образом хотят получить статистику использования Z индексов.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Native SQL
СообщениеДобавлено: Ср, янв 06 2010, 13:14 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
Интересная задача :)
Как Вы узнали в каких таблица лежит нужная Вам информация(Сами индексы, их использование и тд) у админов спросили?
Что значит сбрасывать флаги и для чего это?
Я так понимаю что эта инфа лежит в таблица БД, которые через словарь не увидишь, поэтому EXEC SQL?
Мне интересно, потому что думаю что задача очень нужная, ведь все эти индексы замедляю update и insert в таблицы БД.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Native SQL
СообщениеДобавлено: Ср, янв 06 2010, 14:14 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, апр 08 2008, 14:44
Сообщения: 81
Besa написал:
Интересная задача :)
Как Вы узнали в каких таблица лежит нужная Вам информация(Сами индексы, их использование и тд) у админов спросили?
Что значит сбрасывать флаги и для чего это?
Я так понимаю что эта инфа лежит в таблица БД, которые через словарь не увидишь, поэтому EXEC SQL?
Мне интересно, потому что думаю что задача очень нужная, ведь все эти индексы замедляю update и insert в таблицы БД.


Работаю совместно с админами, это их инициатива :).

Вот текст который это все делает (только в нем нужно заменить часть, согласно Вашего ответа)

Code:
REPORT  YBC_INDEX_USAGE_STAT                                        .


DATA blabla(18) TYPE c.
DATA intTab LIKE TABLE OF YBC_INDEX_USAGE WITH HEADER LINE.

DATA: BEGIN OF wa OCCURS 1000,
        TABLE_NAME TYPE YBC_INDEX_USAGE-TABLE_NAME,
        INDEX_NAME TYPE YBC_INDEX_USAGE-INDEX_NAME,
      END OF wa.


DATA: BEGIN OF wi OCCURS 0,
        SQLTAB TYPE DD12L-SQLTAB,
        INDEXNAME TYPE DD12L-INDEXNAME,
      END OF wi.

EXEC SQL.

  SELECT TABLE_NAME, INDEX_NAME
         INTO :wa
         FROM v$object_usage
         WHERE USED = 'YES'

ENDEXEC.

DELETE FROM YBC_INDEX_USAGE WHERE DATA = sy-datum.

LOOP at wa.

  intTab-DATA = sy-datum.
  intTab-TABLE_NAME = wa-TABLE_NAME.
  intTab-INDEX_NAME = wa-INDEX_NAME.

  INSERT INTO YBC_INDEX_USAGE VALUES intTab.
  COMMIT WORK.

ENDLOOP.

SELECT SQLTAB INDEXNAME
  FROM DD12L
  INTO CORRESPONDING FIELDS OF TABLE wi
  WHERE INDEXNAME LIKE 'Z%'.


data: tab(72) OCCURS 10 WITH HEADER LINE,
        prog_name LIKE sy-cprog.
CLEAR tab.
REFRESH tab.
APPEND 'report YBC_tteesstt.' to tab.
APPEND 'form alt.' to tab.

LOOP at wi.

  APPEND 'exec sql.' to tab.
  if STRLEN( wi-SQLTAB ) = 16 AND STRLEN( wi-INDEXNAME ) >= 2.
    CONCATENATE wi-SQLTAB  wi-INDEXNAME INTO blabla.
  else.
    CONCATENATE wi-SQLTAB '~' wi-INDEXNAME INTO blabla.
  endif.

  DATA stmnt TYPE string.
  CONCATENATE `ALTER INDEX "` blabla '" MONITORING USAGE' INTO stmnt.
  APPEND stmnt to tab.
  APPEND 'endexec.' to tab.

ENDLOOP.

APPEND 'endform.' to tab.

GENERATE SUBROUTINE POOL tab name prog_name.
PERFORM alt in PROGRAM (prog_name).



На счет сбрасывания флага, я не корректно выразился. Ракурс v$object_usage содержит информацию по использованию индексов (но только тех для которых включён мониторинг). Мониторинг включается ALTER INDEX имя индекса MONITORING USAGE

Вот в принципе и всё.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Native SQL
СообщениеДобавлено: Ср, янв 06 2010, 14:35 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
Спасибо, положу в копилку :)


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Native SQL
СообщениеДобавлено: Ср, янв 06 2010, 15:39 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, апр 08 2008, 14:44
Сообщения: 81
вот полный и рабочий текст

Code:
REPORT  YBC_INDEX_USAGE_STAT                                        .


DATA blabla(18) TYPE c.
DATA intTab LIKE TABLE OF YBC_INDEX_USAGE WITH HEADER LINE.

DATA: BEGIN OF wa OCCURS 1000,
        TABLE_NAME TYPE YBC_INDEX_USAGE-TABLE_NAME,
        INDEX_NAME TYPE YBC_INDEX_USAGE-INDEX_NAME,
      END OF wa.


DATA: BEGIN OF wi OCCURS 0,
        SQLTAB TYPE DD12L-SQLTAB,
        INDEXNAME TYPE DD12L-INDEXNAME,
      END OF wi.

EXEC SQL.
OPEN c FOR
  SELECT TABLE_NAME, INDEX_NAME
         FROM v$object_usage
         WHERE USED = 'YES'
ENDEXEC.

DO.
  EXEC SQL.
    FETCH NEXT c INTO :wa-TABLE_NAME, :wa-INDEX_NAME
  ENDEXEC.
  IF SY-SUBRC <> 0.
    EXIT.
  ENDIF.
  APPEND wa to wa.
ENDDO.
EXEC SQL.
  CLOSE c
ENDEXEC.


DELETE FROM YBC_INDEX_USAGE WHERE DATA = sy-datum.

LOOP at wa.

  intTab-DATA = sy-datum.
  intTab-TABLE_NAME = wa-TABLE_NAME.
  intTab-INDEX_NAME = wa-INDEX_NAME.

  INSERT INTO YBC_INDEX_USAGE VALUES intTab.
  COMMIT WORK.

ENDLOOP.

SELECT SQLTAB INDEXNAME
  FROM DD12L
  INTO CORRESPONDING FIELDS OF TABLE wi
  WHERE INDEXNAME LIKE 'Z%'.


data: tab(72) OCCURS 10 WITH HEADER LINE,
        prog_name LIKE sy-cprog.
CLEAR tab.
REFRESH tab.
APPEND 'report YBC_tteesstt.' to tab.
APPEND 'form alt.' to tab.

LOOP at wi.
  APPEND 'try.' to tab.
  APPEND 'exec sql.' to tab.
  if STRLEN( wi-SQLTAB ) = 16 AND STRLEN( wi-INDEXNAME ) >= 2.
    CONCATENATE wi-SQLTAB  wi-INDEXNAME INTO blabla.
  else.
    CONCATENATE wi-SQLTAB '~' wi-INDEXNAME INTO blabla.
  endif.

  DATA stmnt TYPE string.
  CONCATENATE `ALTER INDEX "` blabla '" MONITORING USAGE' INTO stmnt.
  APPEND stmnt to tab.
  APPEND 'endexec.' to tab.
  APPEND 'CATCH CX_SY_NATIVE_SQL_ERROR.' to tab.

  APPEND 'endtry.' to tab.

ENDLOOP.

APPEND 'endform.' to tab.

GENERATE SUBROUTINE POOL tab name prog_name.
PERFORM alt in PROGRAM (prog_name).


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

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


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

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


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

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