логгирование для ORA-01008: not all variables bound

mama.said
Дата: 26.10.2015 19:09:05
добрый день,

на одном из инстансов иногда возникает ошибка ORA-01008: not all variables bound
добавил в пакет примерно такой код
--
not_all_var_bound exception;
pragma exception_init(not_all_var_bound, -01008);
--
exception when not_all_var_bound then insert into test_error values(l_stmt);
--


удалось залогировать стейтмент который динамически формируется как в примере ниже,
теперь пытаюсь воспроизвести ошибку:
+
drop table test_table;

create table test_table(
  id          number,
  modified_on timestamp,
  value       number,
  dur         number,
  mark_var    number  
);  

insert into test_table 
  select level, systimestamp + level, level*1, level*2, level*3 
  from dual connect by level <= 10;
commit;

declare 
  l_stmt   clob;
  l_ret    integer;
  l_cursor integer;
    
  l_modified_on timestamp;
  l_value       number;
  l_dur         number;
  l_mark_var    number;
  l_id          number;
  
begin 
  
  l_id := 6;  
  l_value := 332;
  
  l_stmt := 'update test_table 
     set modified_on =: p_modified_on';  
  --   
  l_stmt := l_stmt || chr(10) || '    ,'|| 'value'    || ' = :p_value';                        
  l_stmt := l_stmt || chr(10) || '    ,'|| 'dur'      || ' = :p_dur';
  l_stmt := l_stmt || chr(10) || '    ,'|| 'mark_var' || ' = :p_mark_var';
  --
  l_stmt := l_stmt ||chr(10)  || 'where id = :p_id'; 
    
  l_cursor := dbms_sql.open_cursor;
  dbms_sql.parse(l_cursor, l_stmt, dbms_sql.native);
  
  dbms_sql.bind_variable(l_cursor, 'p_modified_on',   l_modified_on);
  dbms_sql.bind_variable(l_cursor, 'p_value',         l_value      );
  dbms_sql.bind_variable(l_cursor, 'p_dur',           l_dur        );
  dbms_sql.bind_variable(l_cursor, 'p_mark_var',      l_mark_var   );
  dbms_sql.bind_variable(l_cursor, 'p_id',            l_id         );
  
  l_ret := dbms_sql.execute(l_cursor);
  
  dbms_sql.close_cursor(l_cursor);
  
end;



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


select * from v$sql_bind_capture where sql_id = 'zzz'


POSITIONNAMEWAS_CAPTUREDVALUE_STRING
1:P_MODIFIED_ONNO
2:P_VALUENO
3:P_DURNO
4:P_MARK_VARNO
5:P_IDYES6
dba123
Дата: 27.10.2015 10:50:50
mama.said,

Посмотрите 1682551.1
со слов ноты - ожидаемое поведение, а ошибку 1008 искать в багах.

хотелось бы написать логирование чтобы видеть что оракл присвоил каждой переменной?

на мой взгляд, если стоит такая задача,
- то переменные и так известны на момент связывания - пишите их в лог на здоровье
- dbms_fga
mama.said
Дата: 27.10.2015 11:43:19
dba123
mama.said,
Посмотрите 1682551.1
со слов ноты - ожидаемое поведение, а ошибку 1008 искать в багах.


спасибо посмотрю
cursor_sharing
Дата: 27.10.2015 12:12:36
mama.said
добавил в пакет примерно такой код
зачем менять код, сделай триггер on server_error и фильтруй 1008.