Текущее время: Ср, июл 30 2025, 02:48

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


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

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


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

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