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

Откуда: Middlebury, CT USA
Сообщений: 10051
Is there any other way besides SQL*Net trace to get bind variable value for failed statement. It looks like alter session set events '10046 trace name context forever, level 12' shows bind variable values after parsing. So if statement fails - no bind variable value in trace file.

SY.
12 янв 11, 01:31    [10057126]     Ответить | Цитировать Сообщить модератору
 Re: Bind variable value and failed statement  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18484
А он многократно выполняется?
В V$SQL_BIND_CAPTURE тоже не попадает?
12 янв 11, 04:24    [10057204]     Ответить | Цитировать Сообщить модератору
 Re: Bind variable value and failed statement  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18484
Кстати, как ломается?
Может на ошибку повесить ивент и ERRORSTACK
Вот: http://dioncho.wordpress.com/2009/06/15/tracking-the-bind-value-with-errorstack-dump/
12 янв 11, 04:53    [10057213]     Ответить | Цитировать Сообщить модератору
 Re: Bind variable value and failed statement  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10051
Вячеслав Любомудров
Кстати, как ломается?
Может на ошибку повесить ивент и ERRORSTACK
Вот: http://dioncho.wordpress.com/2009/06/15/tracking-the-bind-value-with-errorstack-dump/


Вячеслав, в V$SQL_BIND_CAPTURE не попадает. Statement:

select SEC_USER_ENVIRON01.IDENTIFIER ,SEC_USER_ENVIRON01.DESCRIPTION ,TO_CHAR(SEC_USER_ENVIRON01.LOGIN_DATETIME,'YYYY-MM-DD.HH24.MI.
SS.FF6') ,SEC_USER_ENVIRON01.F0_SECUSE_IDENTIFI  from SEC_USER_ENVIRONMT SEC_USER_ENVIRON01 where SEC_USER_ENVIRON01.LOGIN_DATETIME<
TO_TIMESTAMP(:b0,'YYYY-MM-DD.HH24.MI.SS.FF6')

Error: ORA-00932: inconsistent datatypes: expected - got NUMBER.

I'll try errorstack. Thanks for the link.

SY.
12 янв 11, 16:30    [10060922]     Ответить | Цитировать Сообщить модератору
 Re: Bind variable value and failed statement  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10051
It appears issue is between CHAR bind variables and TO_TIMESTAMP:

SQL> variable b0 char(26)
SQL> exec :b0 := '2011-01-11-09.01.48.537000';

PL/SQL procedure successfully completed.

SQL> select SEC_USER_ENVIRON01.IDENTIFIER ,SEC_USER_ENVIRON01.DESCRIPTION ,TO_CHAR(SEC_USER_ENVIRON01.LOGIN_DATETIME,'YYYY-MM-DD.HH2
4.MI.
  2  SS.FF6') ,SEC_USER_ENVIRON01.F0_SECUSE_IDENTIFI  from SEC_USER_ENVIRONMT SEC_USER_ENVIRON01 where SEC_USER_ENVIRON01.LOGIN_DATE
TIME<
  3  TO_TIMESTAMP(:b0,'YYYY-MM-DD.HH24.MI.SS.FF6')
  4  /
TO_TIMESTAMP(:b0,'YYYY-MM-DD.HH24.MI.SS.FF6')
              *
ERROR at line 3:
ORA-00932: inconsistent datatypes: expected - got -


At the same time on another server (both are HPUX Itanium 64, 11.23 Oracle 11.1.0.7.0, both have same patches applied):

SQL> variable b0 char(26)
SQL> exec :b0 := '2011-01-11-09.01.48.537000';

PL/SQL procedure successfully completed.

SQL> select SEC_USER_ENVIRON01.IDENTIFIER ,SEC_USER_ENVIRON01.DESCRIPTION ,TO_CHAR(SEC_USER_ENVIRON01.LOGIN_DATETIME,'YYYY-MM-DD.HH2
4.MI.
  2  SS.FF6') ,SEC_USER_ENVIRON01.F0_SECUSE_IDENTIFI  from SEC_USER_ENVIRONMT SEC_USER_ENVIRON01 where SEC_USER_ENVIRON01.LOGIN_DATE
TIME<
  3  TO_TIMESTAMP(:b0,'YYYY-MM-DD.HH24.MI.SS.FF6')
  4  /

no rows selected

SQL>

Interestingly enough, if I set "_optim_peek_user_binds"=false no error is raised:

SQL> alter session set "_optim_peek_user_binds"=false;

Session altered.

SQL> variable b0 char(26)
SQL> exec :b0 := '2011-01-11-09.01.48.537000';

PL/SQL procedure successfully completed.

SQL> select SEC_USER_ENVIRON01.IDENTIFIER ,SEC_USER_ENVIRON01.DESCRIPTION ,TO_CHAR(SEC_USER_ENVIRON01.LOGIN_DATETIME,'YYYY-MM-DD.HH2
4.MI.
  2  SS.FF6') ,SEC_USER_ENVIRON01.F0_SECUSE_IDENTIFI  from SEC_USER_ENVIRONMT SEC_USER_ENVIRON01 where SEC_USER_ENVIRON01.LOGIN_DATE
TIME<
  3  TO_TIMESTAMP(:b0,'YYYY-MM-DD.HH24.MI.SS.FF6')
  4  /

IDENTIFIER DESCRIPTION
---------- ----------------------------------------
TO_CHAR(SEC_USER_ENVIRON01.LOG F0_SECUS
------------------------------ --------
         0 QA1
2011-01-10.12.51.              nn82575
37.000000

SY.
13 янв 11, 00:18    [10062955]     Ответить | Цитировать Сообщить модератору
 Re: Bind variable value and failed statement  [new]
Maxim Demenko
Member

Откуда: Munich, Germany
Сообщений: 940
SY,

Я нарвался на этот баг где то весной прошлого года. Воркароунд предложенный МОС был как раз "_optim_peek_user_binds"=false, в моем случае не помог - у меня правда ошибку выбивало не в pl sql, а в pro*c модуле, покопался в старых email - вроде бы, Bug 7309458 и Bug 7287616, есть one off 7309458 -я его тестировал, ошибка убиралась (правда, клиент не захотел в конце концов патчить и переписал pro*c на использование varchar2 вместо char).

Best regards

Maxim
13 янв 11, 00:49    [10063023]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить