Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 переключение контекста  [new]
nxx
Member

Откуда:
Сообщений: 2030
происходит ли оно при вызове стандартных функций из sql ?

например to_char
или instr.
а как насчет regexp_instr ?
17 май 11, 10:38    [10663055]     Ответить | Цитировать Сообщить модератору
 Re: переключение контекста  [new]
Sergei.Agalakov
Member

Откуда:
Сообщений: 575
Если SQL функция, то переключения контекста нет, а если PL/SQL функция - есть. В первом приближении список SQL функций находится в книжке "SQL Reference". Могут еще быть недокументированные SQL функции, которых в этой книжке нет, но вам они не нужны.
Все остальное - PL/SQL функции, в пакетах, и сами по себе.
Поэтому почти всегда лучше подобрать правильную комбинацию SQL функций вместо изобретения своей PL/SQL функции. Если возможно, конечно.
17 май 11, 20:53    [10667711]     Ответить | Цитировать Сообщить модератору
 Re: переключение контекста  [new]
nxx
Member

Откуда:
Сообщений: 2030
Sergei.Agalakov
Если SQL функция, то переключения контекста нет, а если PL/SQL функция - есть. В первом приближении список SQL функций находится в книжке "SQL Reference". Могут еще быть недокументированные SQL функции, которых в этой книжке нет, но вам они не нужны.
Все остальное - PL/SQL функции, в пакетах, и сами по себе.
Поэтому почти всегда лучше подобрать правильную комбинацию SQL функций вместо изобретения своей PL/SQL функции. Если возможно, конечно.


лично для меня ответ не очевиден
вот если взять TO_CHAR
оно есть в "SQL Reference"
однако, можно найти пакет где оно лежит - SYS.STANDARD

разве только данный пакет является фикцией
18 май 11, 10:16    [10669309]     Ответить | Цитировать Сообщить модератору
 Re: переключение контекста  [new]
брадобрей
Member

Откуда:
Сообщений: 4696
nxx
однако, можно найти пакет где оно лежит - SYS.STANDARD

разве только данный пакет является фикцией

Там лежит обертка которая вызывает эту функцию из нутров оракла, дабы можно было юзать ее и в PLSQL.
18 май 11, 10:20    [10669332]     Ответить | Цитировать Сообщить модератору
 Re: переключение контекста  [new]
брадобрей
Member

Откуда:
Сообщений: 4696
А в чем проблема в переключении контекста?
Некто Кайт ее сильно преувеличил показав не то, что надо было показать в той ситуации.
18 май 11, 10:25    [10669362]     Ответить | Цитировать Сообщить модератору
 Re: переключение контекста  [new]
nxx
Member

Откуда:
Сообщений: 2030
брадобрей
А в чем проблема в переключении контекста?


мне лично это вот зачем
думаю, стоит ли переписывать некие юзерские функции на
стандартные REGEXP_%

брадобрей
Некто Кайт ее сильно преувеличил показав не то, что надо было показать в той ситуации.


???
18 май 11, 10:33    [10669411]     Ответить | Цитировать Сообщить модератору
 Re: переключение контекста  [new]
кстати_да
Guest
брадобрей
А в чем проблема в переключении контекста?

лень на последних версиях мерить, но думаю, действительно, что не очень большая проблема, как иногда пугают.

может кому не влом - кинули бы уж какой-нибудь тестик сюда на осмотр.
18 май 11, 10:42    [10669489]     Ответить | Цитировать Сообщить модератору
 Re: переключение контекста  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
кстати_да
брадобрей
А в чем проблема в переключении контекста?

лень на последних версиях мерить, но думаю, действительно, что не очень большая проблема, как иногда пугают.

может кому не влом - кинули бы уж какой-нибудь тестик сюда на осмотр.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> create or replace function plsql_to_char (n number) return varchar2 is
  2  begin return n; end;
  3  /

Function created.

SQL> set timing on
SQL> with t as (select level a from dual connect by level < 1e7)
  2  select max(a) from t;

    MAX(A)
----------
   9999999

Elapsed: 00:00:24.93
SQL> 
SQL> with t as (select to_char(level) a from dual connect by level < 1e7)
  2  select max(a) from t;

MAX(A)
----------------------------------------
9999999

Elapsed: 00:00:27.45
SQL> 
SQL> with t as (select plsql_to_char(level) a from dual connect by level < 1e7)
  2  select max(a) from t;

MAX(A)
--------------------------------------------------------------------------------
9999999

Elapsed: 00:01:01.28
18 май 11, 13:45    [10671217]     Ответить | Цитировать Сообщить модератору
 Re: переключение контекста  [new]
кстати_да
Guest
orawish

ok, спасибо. а теперь для полноты картины - продемонстрируйте, сколько выполняется без всяких переключений контекста (просто в цикле pl/sql) такое же количество вызовов функции plsql_to_char
18 май 11, 14:08    [10671370]     Ответить | Цитировать Сообщить модератору
 Re: переключение контекста  [new]
Петрушка
Member

Откуда:
Сообщений: 139
кстати_да
orawish

ok, спасибо. а теперь для полноты картины - продемонстрируйте, сколько выполняется без всяких переключений контекста (просто в цикле pl/sql) такое же количество вызовов функции plsql_to_char

может уже и самому пора, пример есть
18 май 11, 14:10    [10671387]     Ответить | Цитировать Сообщить модератору
 Re: переключение контекста  [new]
кстати_да
Guest
Петрушка
может уже и самому пора, пример есть

просто раз есть уже данные, чтобы на тех же характеристиках - для полноты картины.
потому что без этого про "переключение контекста" - пустой звук.
если хотите, можете выложить свои тесты.
18 май 11, 14:14    [10671418]     Ответить | Цитировать Сообщить модератору
 Re: переключение контекста  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6731
кстати_да,

просто не умеете готовить?

+
SQL> create or replace function plsql_to_char (n number) return varchar2 is
  2  begin return n; end;
  3  /

Function created.

Elapsed: 00:00:00.07
SQL>
SQL> create or replace procedure max_plsql_to_char(n number) is
  2  m varchar2(50);
  3  begin
  4   for i in 0..n-1 loop
  5    m:=plsql_to_char(i);
  6   end loop;
  7   dbms_output.put_line(m);
  8  end;
  9  /

Procedure created.

Elapsed: 00:00:00.13
SQL>
SQL>  set timing on
SQL>  set serverout on
SQL>  with t as (select level a from dual connect by level < 1e6)
  2      select max(a) from t;

    MAX(A)
----------
    999999

Elapsed: 00:00:01.06
SQL>  with t as (select to_char(level) a from dual connect by level < 1e6)
  2      select max(a) from t;

MAX(A)
----------------------------------------
999999

Elapsed: 00:00:01.51
SQL>  with t as (select plsql_to_char(level) a from dual connect by level < 1e6)
  2      select max(a) from t;

MAX(A)
--------------------------------------------------------------------------------
999999

Elapsed: 00:00:09.79
SQL> exec max_plsql_to_char(1e6);
999999

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.86
SQL>
SQL> drop procedure max_plsql_to_char
  2  /

Procedure dropped.

Elapsed: 00:00:00.04
SQL> drop function plsql_to_char
  2  /

Function dropped.

Elapsed: 00:00:00.03
18 май 11, 14:30    [10671555]     Ответить | Цитировать Сообщить модератору
 Re: переключение контекста  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
кстати_да,

что вы хотите увидеть (в частности, как оно может быть связано с тестом выше) я не очень понял.
но - не жалко. это?

SQL> set timing on
SQL> begin
  2    for i in 1..1e7 loop
  3      null;
  4    end loop;
  5  end;
  6  /

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.01
SQL> declare
  2    j varchar2(20);
  3  begin
  4    for i in 1..1e7 loop
  5      j := i;
  6    end loop;
  7  end;
  8  /

PL/SQL procedure successfully completed.

Elapsed: 00:00:02.60
SQL> declare
  2    j varchar2(20);
  3  begin
  4    for i in 1..1e7 loop
  5      j := to_char(i);
  6    end loop;
  7  end;
  8  /

PL/SQL procedure successfully completed.

Elapsed: 00:00:03.01
SQL> declare
  2    j varchar2(20);
  3  begin
  4    for i in 1..1e7 loop
  5      j := plsql_to_char(i);
  6    end loop;
  7  end;
  8  /

PL/SQL procedure successfully completed.

Elapsed: 00:00:04.57
18 май 11, 14:32    [10671574]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить