Текущее время: Вт, июл 22 2025, 21:19

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Native SQL
СообщениеДобавлено: Пн, дек 14 2009, 17:43 
Младший специалист
Младший специалист

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

так дамп с ошибкой ORA-01036: illegal variable name/number

Code:
LOOP at wi.

  CONCATENATE '"' wi-SQLTAB '~' wi-INDEXNAME '"' INTO indexName.
  EXEC SQL.

    ALTER INDEX :indexName NOMONITORING USAGE

  ENDEXEC.

ENDLOOP.


а так все Ок.

Code:
LOOP at wi.

  CONCATENATE '"' wi-SQLTAB '~' wi-INDEXNAME '"' INTO indexName.
  EXEC SQL.

    ALTER INDEX "Z_MAT~Z0" NOMONITORING USAGE

  ENDEXEC.


ENDLOOP.


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

Зарегистрирован:
Ср, апр 29 2009, 07:08
Сообщения: 197
Откуда: AUS RUSSLAND
Пол: Мужской
А если без ковычек попробовать?


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

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


так
Code:
LOOP at wi.

  CONCATENATE wi-SQLTAB '~' wi-INDEXNAME INTO indexName.
  EXEC SQL.

    ALTER INDEX :indexName NOMONITORING USAGE

  ENDEXEC.

ENDLOOP.


тоже пробовал - ошибка та же.


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

Зарегистрирован:
Ср, апр 29 2009, 07:08
Сообщения: 197
Откуда: AUS RUSSLAND
Пол: Мужской
Ошибка ОРАКЛа, может переменную как-то попроще попробовать назвать, а то вдруг она в списке зарезервированных слов
Цитата:
ORA-01036 illegal variable name/number

Cause: Unable to find bind context on user side.

Action: Make sure that the variable being bound is in the SQL statement.


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

Зарегистрирован:
Вт, апр 08 2008, 14:44
Сообщения: 81
Чёрный Freelancer написал:
Ошибка ОРАКЛа, может переменную как-то попроще попробовать назвать, а то вдруг она в списке зарезервированных слов
Цитата:
ORA-01036 illegal variable name/number

Cause: Unable to find bind context on user side.

Action: Make sure that the variable being bound is in the SQL statement.


Не помогает :(


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

Зарегистрирован:
Вт, апр 08 2008, 14:44
Сообщения: 81
Мне тут подсказали что сама команда ALTER INDEX не поддерживает работу с бинд переменными. Так каким же тогда образом подставлять имя индекса ?


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

Зарегистрирован:
Ср, апр 29 2009, 07:08
Сообщения: 197
Откуда: AUS RUSSLAND
Пол: Мужской
excalibur написал(а):
Мне тут подсказали что сама команда ALTER INDEX не поддерживает работу с бинд переменными. Так каким же тогда образом подставлять имя индекса ?

Если так, то может попробовать через создание временных программ, используя GENERATE SUBROUTINE POOL, пример из help'а выглядит вроде подходящим:
Code:
DATA: prog TYPE string,
      tab  TYPE STANDARD TABLE OF string,
      mess TYPE string,
      sid  TYPE string.

APPEND 'PROGRAM subpool.'                        TO tab.
APPEND `DATA spfli_tab TYPE TABLE OF spfli.`     TO tab.
APPEND `LOAD-OF-PROGRAM.`                        TO tab.
APPEND `  SELECT *` &
       `         FROM spfli` &
       `         INTO TABLE spfli_tab.`          TO tab.
APPEND `FORM loop_at_tab.`                       TO tab.
APPEND `  DATA spfli_wa TYPE spfli.`             TO tab.
APPEND `  LOOP AT spfli_tab INTO spfli_wa.`      TO tab.
APPEND `    PERFORM evaluate_wa USING spfli_wa.` TO tab.
APPEND `  ENDLOOP.`                              TO tab.
APPEND `ENDFORM.`                                TO tab.
APPEND `FORM evaluate_wa USING l_wa TYPE spfli.` TO tab.
APPEND `  WRITE: / l_wa-carrid, l_wa-connid.`    TO tab.
APPEND `ENDFORM.`                                TO tab.

GENERATE SUBROUTINE POOL tab NAME prog
         MESSAGE mess
         SHORTDUMP-ID sid.

IF sy-subrc = 0.
  PERFORM ('LOOP_AT_TAB') IN PROGRAM (prog) IF FOUND.
ELSEIF sy-subrc = 4.
  MESSAGE mess TYPE 'I'.
ELSEIF sy-subrc = 8.
  MESSAGE sid TYPE 'I'.
ENDIF.


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

Зарегистрирован:
Вт, апр 08 2008, 14:44
Сообщения: 81
Чёрный Freelancer написал:
excalibur написал(а):
Мне тут подсказали что сама команда ALTER INDEX не поддерживает работу с бинд переменными. Так каким же тогда образом подставлять имя индекса ?

Если так, то может попробовать через создание временных программ, используя GENERATE SUBROUTINE POOL, пример из help'а выглядит вроде подходящим:
Code:
DATA: prog TYPE string,
      tab  TYPE STANDARD TABLE OF string,
      mess TYPE string,
      sid  TYPE string.

APPEND 'PROGRAM subpool.'                        TO tab.
APPEND `DATA spfli_tab TYPE TABLE OF spfli.`     TO tab.
APPEND `LOAD-OF-PROGRAM.`                        TO tab.
APPEND `  SELECT *` &
       `         FROM spfli` &
       `         INTO TABLE spfli_tab.`          TO tab.
APPEND `FORM loop_at_tab.`                       TO tab.
APPEND `  DATA spfli_wa TYPE spfli.`             TO tab.
APPEND `  LOOP AT spfli_tab INTO spfli_wa.`      TO tab.
APPEND `    PERFORM evaluate_wa USING spfli_wa.` TO tab.
APPEND `  ENDLOOP.`                              TO tab.
APPEND `ENDFORM.`                                TO tab.
APPEND `FORM evaluate_wa USING l_wa TYPE spfli.` TO tab.
APPEND `  WRITE: / l_wa-carrid, l_wa-connid.`    TO tab.
APPEND `ENDFORM.`                                TO tab.

GENERATE SUBROUTINE POOL tab NAME prog
         MESSAGE mess
         SHORTDUMP-ID sid.

IF sy-subrc = 0.
  PERFORM ('LOOP_AT_TAB') IN PROGRAM (prog) IF FOUND.
ELSEIF sy-subrc = 4.
  MESSAGE mess TYPE 'I'.
ELSEIF sy-subrc = 8.
  MESSAGE sid TYPE 'I'.
ENDIF.


Подходит :) спс.

Вот еще один вариант нашел. Может кому пригодится.

Code:
PARAMETERS key TYPE scarr-carrid.

DATA: sql      TYPE REF TO cl_sql_statement,
      result   TYPE REF TO cl_sql_result_set,
      exc      TYPE REF TO cx_sql_exception,
      stmnt    TYPE string,
      carrid   TYPE scarr-carrid,
      carrname TYPE scarr-carrname,
      dref     TYPE REF TO data,
      rc       TYPE i.

TRY.
    CREATE OBJECT sql.
    CONCATENATE `SELECT carrid, carrname `
                `FROM scarr `
                `WHERE carrid = '` key `'`  INTO stmnt.
    result = sql->execute_query( stmnt ).
    GET REFERENCE OF carrid INTO dref.
    result->set_param( dref ).
    GET REFERENCE OF carrname INTO dref.
    result->set_param( dref ).
    rc = result->next( ).
    IF rc > 0.
      WRITE: / carrid, carrname.
    ELSE.
      WRITE / 'No entry found'.
    ENDIF.
    result->close( ).
  CATCH cx_sql_exception INTO exc.
    MESSAGE exc TYPE 'I' DISPLAY LIKE 'E'.
ENDTRY.


подробнее тут http://www.sdn.sap.com/irj/scn/weblogs;jsessionid=%28J2EE3414700%29ID1852717850DB01200657663831363898End?blog=/pub/wlg/15837


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

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


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

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


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

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