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

Откуда:
Сообщений: 92
Всем привет.
Как определить и получить все бинд переменные которые присутствуют в sql или pl/sql (это в переменной)
блоке.
Как я понимаю это что-то типа
DECLARE
STRING VARCHAR2(32767);
Components Owa_Text.Vc_Arr;
BEGIN
STRING := 'Select * from d_Article where id = :Article_id and qq = :qq';
IF (Owa_Pattern.Match(STRING, '(\W:\w+)', Components) )
THEN
IF Components.COUNT != 0 THEN
dbms_output.put_line(Components.COUNT);
FOR i IN Components.FIRST .. Components.LAST LOOP
dbms_output.put_line(Components(i));
END LOOP;
END IF;
END IF;
END;

Но данная конструкция выделяет только :Article_id а вторую не ловит
как получить все переменные
работаем с Oracle9.2.0.4.0
22 фев 07, 15:08    [3823080]     Ответить | Цитировать Сообщить модератору
 Re: Определение бинд пременных  [new]
Elic
Member

Откуда:
Сообщений: 29979
stalker_cop
Но данная конструкция выделяет только :Article_id а вторую не ловит
Чтобы понять, что такое backrefs, используй шаблон
'((\W:)(\w+))'
stalker_cop
как получить все переменные
amatch в цикле.

P.S. Деготь в алгоритм: STFF Про bind-переменные :)
22 фев 07, 16:02    [3823524]     Ответить | Цитировать Сообщить модератору
 Re: Определение бинд пременных  [new]
stalker_cop
Member

Откуда:
Сообщений: 92
с ней aMatch вообще непонятки какие то.
нехера она не находит
почему не знаю


DECLARE
STRING VARCHAR2(32767);
pat VARCHAR2(32767);
Components Owa_Text.Vc_Arr;
i INTEGER;
b BOOLEAN;
BEGIN
STRING := 'Select * from d_Article where id = :Article_id and qq = :qq';
pat := '(\W:\w+)';
i := Owa_Pattern.aMatch(STRING, 1, pat, Components);
dbms_output.put_line(i);
dbms_output.put_line('Components.COUNT '||to_char(Components.COUNT));
b := Owa_Pattern.Match(STRING, pat, Components);
dbms_output.put_line('Components.COUNT '||to_char(Components.COUNT));

END;
22 фев 07, 16:45    [3823882]     Ответить | Цитировать Сообщить модератору
 Re: Определение бинд пременных  [new]
Elic
Member

Откуда:
Сообщений: 29979
stalker_cop
с ней aMatch вообще непонятки какие то.
нехера она не находит
почему не знаю
Это ты неразобравшийся хрен, а не "она нехера не находит":
declare
  string     varchar2(32767);
  components owa_text.vc_arr;
  i int := 1;
begin
  string := 'select * from d_article where id = :article_id and qq = :qq';
  loop
    i := owa_pattern.amatch(string, i , '[^:]*(:\w+)', components);
    exit when i = 0;
    if components.count != 0 then
      for i in components.first .. components.last loop
        dbms_output.put_line(components(i));
      end loop;
    end if;
  end loop;
end;
/
22 фев 07, 17:19    [3824124]     Ответить | Цитировать Сообщить модератору
 Re: Определение бинд пременных  [new]
stalker_cop
Member

Откуда:
Сообщений: 92
Тогда получается что функции amatch и match работают по разному.
Почему одна находит а вторая нет?
22 фев 07, 18:16    [3824482]     Ответить | Цитировать Сообщить модератору
 Re: Определение бинд пременных  [new]
Elic
Member

Откуда:
Сообщений: 29979
stalker_cop
Тогда получается что функции amatch и match работают по разному.
Почему одна находит а вторая нет?
RTFM pubpat.sql: amatch.from_loc
22 фев 07, 18:24    [3824535]     Ответить | Цитировать Сообщить модератору
 Re: Определение бинд пременных  [new]
stalker_cop
Member

Откуда:
Сообщений: 92
с amatch.from_loc = 0
должны быть идентичны
как я понимаю
или я что-то нет так понимаю?
22 фев 07, 18:37    [3824625]     Ответить | Цитировать Сообщить модератору
 Re: Определение бинд пременных  [new]
Elic
Member

Откуда:
Сообщений: 29979
stalker_cop
или я что-то нет так понимаю?
pubpat.sql
   /* from_loc - Indicates the index of the first character in "line" */
/* to try to match. */
22 фев 07, 18:54    [3824764]     Ответить | Цитировать Сообщить модератору
 Re: Определение бинд пременных  [new]
stalker_cop
Member

Откуда:
Сообщений: 92
0 или 1 не важно (я проверял)
прикол заключается если менять маску то результаты могут быть разными.
22 фев 07, 19:12    [3824880]     Ответить | Цитировать Сообщить модератору
 Re: Определение бинд пременных  [new]
Elic
Member

Откуда:
Сообщений: 29979
stalker_cop
прикол заключается если менять маску то результаты могут быть разными.
Нет приколов. Есть твоё непонимание. RTFM
22 фев 07, 19:19    [3824933]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить