Oracle mechanics

29.01.2017

Проблема ограничения длины хинта SQL_PROFILE_FROM_SQL.SQL

Filed under: Oracle,Scripts — Игорь Усольцев @ 22:54
Tags:

Коллега Леонид Борчук в процессе практического применения скрипта sql_profile_from_sql.sql обнаружил ошибку:

 ORA-06502: PL/SQL: numeric or value error: character string buffer too small

и указал на ограничение:

TYPE sqlprof_attr AS VARRAY(2000) of VARCHAR2(500)

— т.е. нашёл-таки запрос с хинтом длиною более 500 символов! — для запросов OEBS нет пределов:)

А, поскольку, в мировом масштабе, эта проблема уже была разрешена Carlos SierraRunning «coe_xfr_sql_profile.sql» Script (Shipped with SQLT) Raises «ORA-06502: PL/SQL: numeric or value error» (Doc ID 2043600.1) в новых версиях SQLT, оставалось лишь посмотреть как это сделано:

begin
  LOOP
    l_hint := i.hint;
    WHILE NVL(LENGTH(l_hint), 0) > 0 LOOP
      IF LENGTH(l_hint) <= 500 THEN
        DBMS_OUTPUT.PUT_LINE('q''[' || l_hint || ']'',');
        l_hint := NULL;
      ELSE
        l_pos := INSTR(SUBSTR(l_hint, 1, 500), ' ', -1);
        DBMS_OUTPUT.PUT_LINE('q''[' || SUBSTR(l_hint, 1, l_pos) || ']'',');
        l_hint := ' ' || SUBSTR(l_hint, l_pos);
      END IF;
    END LOOP;
  END LOOP;
end;

— через разделение отдельного хинта по пробелу (оказывается, так можно!) и применить в sql_profile_from_sql.sql — что и было сделано

Реклама

2 комментария »

  1. Интересно, особенно фикс. Не посчитали сколько там символов было в хинтах проблемного запроса?
    Напомнило как я удивился ограничению в 300 строк плана для dbms_sqltune.report_sql_monitor. Благо там параметром чинится. В отличие от проблемы которая изначально проявлялась при отображении в dbms_xplan.display_cursor при 100+ child cursors, и вроде как так и не была нормально починена.

    комментарий от Роман Л — 30.01.2017 @ 21:31 | Ответить

    • да, для большого кол-ва курсоров до сих пор периодически встречается(

      В плане проблемного запроса был хинт LEADING длиной от 500 до 1000 символов — в две строки отлично поместился)

      комментарий от Игорь Усольцев — 30.01.2017 @ 22:01 | Ответить


RSS feed for comments on this post. TrackBack URI

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

Создайте бесплатный сайт или блог на WordPress.com.

%d такие блоггеры, как: