Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Dbms_Sql: ORA-06502 при использовании out переменных varchar2(2000)...  [new]
ГОСТЬUSER
Guest
Создаю функцию:
create or replace function Test_Func return varchar2
is
  Result varchar2(2000) := 'Test_Func.Result';
begin
  return Result;
end;
/
Создаю процедуру:
create or replace procedure Test_Proc
is
  cr integer;
  Exec_Res integer;
  m_Res varchar2(2000);
begin
  cr := Dbms_Sql.Open_cursor;
  Dbms_Sql.Parse(
    cr,
	'begin :p_Res := Test_Func; end;',
	Dbms_Sql.Native
  );
  Dbms_Sql.Bind_Variable(cr, 'p_Res', m_Res);
  Exec_Res := Dbms_Sql.Execute(cr);
  Dbms_Sql.Variable_Value(cr, 'p_Res', m_Res);
  Dbms_Sql.Close_Cursor(cr);
exception
  when others then
    if (Dbms_Sql.Is_Open(cr)) then Dbms_Sql.Close_Cursor(cr); end if;
	raise;
end;
Пробую вызвать процедуру:
begin
  Test_Proc;
end;
Результат:
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at "SCOTT.TEST_PROC", line 20
ORA-06512: at line 2
(Oracle 10.2 on Windows 2003)
19 июл 07, 10:01    [4407517]     Ответить | Цитировать Сообщить модератору
 Re: Dbms_Sql: ORA-06502 при использовании out переменных varchar2(2000)...  [new]
ГОСТЬUSER
Guest
Странно, а вот так все ок:
CREATE OR REPLACE procedure Test_Proc
is
  m_Res varchar2(2000);
begin
  execute immediate 'begin :p_Res := Test_Func; end;' using in out m_Res;
end;
/
Выполняем:
begin
  Test_Proc;
end;
Результат:
PL/SQL procedure successfully completed
19 июл 07, 10:34    [4407785]     Ответить | Цитировать Сообщить модератору
 Re: Dbms_Sql: ORA-06502 при использовании out переменных varchar2(2000)...  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
ГОСТЬUSER
  Dbms_Sql.Bind_Variable(cr, 'p_Res', m_Res, 2000);
Этот параметр как рза для out-bindа
19 июл 07, 10:41    [4407851]     Ответить | Цитировать Сообщить модератору
 Re: Dbms_Sql: ORA-06502 при использовании out переменных varchar2(2000)...  [new]
Elic
Member

Откуда:
Сообщений: 29976
ГОСТЬUSER
  Dbms_Sql.Bind_Variable(cr, 'p_Res', m_Res);
  Dbms_Sql.Variable_Value(cr, 'p_Res', m_Res);
RTFM dbms_sql.bind_variable=>out_value_size
19 июл 07, 10:42    [4407855]     Ответить | Цитировать Сообщить модератору
 Re: Dbms_Sql: ORA-06502 при использовании out переменных varchar2(2000)...  [new]
ГОСТЬUSER
Guest
Всем спасибо, это оно - out_value_size.
19 июл 07, 10:55    [4407985]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить