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

Откуда: г. Ровно, Украина
Сообщений: 23
Здравствуйте! Не нашел здесь похожего...
Есть функция вида:
create or replace function UDO_TEST_CHAR
(
  nVALUE in number
)
return varchar2
as
begin
  return
    case nVALUE
      when 0 then '0'
      when 1 then '1'
      --...
      else null
    end;
end;
Тестовый блок (begin :result := udo_test_char(nvalue => :nvalue); end;) работает нормально.
Запрос вида
select udo_test_char(0) from dual
выдает ошибку:
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
Почему так (ткните где почитать)? Как должен выглядеть запрос с использованием такой функции?
2 фев 11, 11:47    [10169685]     Ответить | Цитировать Сообщить модератору
 Re: В запросе не работает функция, возвращающая char  [new]
B4S1S
Member

Откуда:
Сообщений: 283
SQL> create or replace function UDO_TEST_CHAR
  2  (
  3    nVALUE in number
  4  )
  5  return varchar2
  6  as
  7  begin
  8    return
  9      case nVALUE
 10        when 0 then '0'
 11        when 1 then '1'
 12        --...
 13        else null
 14      end;
 15  end;
 16  /
 
Function created
 
SQL> select udo_test_char(0) from dual;
 
UDO_TEST_CHAR(0)
--------------------------------------------------------------------------------
0
2 фев 11, 11:58    [10169757]     Ответить | Цитировать Сообщить модератору
 Re: В запросе не работает функция, возвращающая char  [new]
comphead
Member

Откуда: Киев
Сообщений: 3390
Freehover,

версия оракла?
2 фев 11, 12:00    [10169769]     Ответить | Цитировать Сообщить модератору
 Re: В запросе не работает функция, возвращающая char  [new]
env
Member

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

SQL> create or replace function UDO_TEST_CHAR
  2  (
  3    nVALUE in number
  4  )
  5  return varchar2
  6  as
  7  begin
  8    return
  9      case nVALUE
 10        when 0 then '0'
 11        when 1 then '1'
 12        else null
 13      end;
 14  end;
 15  /

Function created.

Elapsed: 00:00:00.81
SQL> select udo_test_char(0) from dual;

UDO_TEST_CHAR(0)
--------------------------------------------------------------------------------
0

Elapsed: 00:00:00.06

Версия оракла?
2 фев 11, 12:01    [10169779]     Ответить | Цитировать Сообщить модератору
 Re: В запросе не работает функция, возвращающая char  [new]
env
Member

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

И настоящий текст функции...
2 фев 11, 12:02    [10169781]     Ответить | Цитировать Сообщить модератору
 Re: В запросе не работает функция, возвращающая char  [new]
Freehover
Member

Откуда: г. Ровно, Украина
Сообщений: 23
comphead
Freehover,

версия оракла?

9.2.0.1.0
2 фев 11, 12:04    [10169795]     Ответить | Цитировать Сообщить модератору
 Re: В запросе не работает функция, возвращающая char  [new]
env
Member

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

А, ну тогда....
....

Это вполне нормальное поведение
2 фев 11, 12:06    [10169810]     Ответить | Цитировать Сообщить модератору
 Re: В запросе не работает функция, возвращающая char  [new]
comphead
Member

Откуда: Киев
Сообщений: 3390
Freehover
comphead
Freehover,

версия оракла?

9.2.0.1.0


гыыы :)

уже сколько об этом писано
2 фев 11, 12:07    [10169826]     Ответить | Цитировать Сообщить модератору
 Re: В запросе не работает функция, возвращающая char  [new]
Freehover
Member

Откуда: г. Ровно, Украина
Сообщений: 23
env
Freehover,

И настоящий текст функции...

в реальной функции отличаются только строки
when 0 then 'абвгд'
when 1 then 'ежзий'
возвращает результат не длиннее 16 символов или null
2 фев 11, 12:08    [10169828]     Ответить | Цитировать Сообщить модератору
 Re: В запросе не работает функция, возвращающая char  [new]
Freehover
Member

Откуда: г. Ровно, Украина
Сообщений: 23
Это вполне нормальное поведение
...
гыыы :)
уже сколько об этом писано


Да, я еще один. Кроме поржать, сказать нечего?..
Ну и на том спасибо.
2 фев 11, 12:18    [10169899]     Ответить | Цитировать Сообщить модератору
 Re: В запросе не работает функция, возвращающая char  [new]
Elic
Member

Откуда:
Сообщений: 29980
Freehover
Кроме поржать, сказать нечего?..
"Не реагируй как полный неудачник". RTFM
2 фев 11, 12:24    [10169972]     Ответить | Цитировать Сообщить модератору
 Re: В запросе не работает функция, возвращающая char  [new]
env
Member

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

Патчитесь до более старшей версии.

Посмотрите 1137237.1,
2 фев 11, 12:30    [10170032]     Ответить | Цитировать Сообщить модератору
 Re: В запросе не работает функция, возвращающая char  [new]
Freehover
Member

Откуда: г. Ровно, Украина
Сообщений: 23
env
Freehover,

Патчитесь до более старшей версии.

Посмотрите 1137237.1,

Благодарю.
2 фев 11, 13:11    [10170495]     Ответить | Цитировать Сообщить модератору
 Re: В запросе не работает функция, возвращающая char  [new]
Freehover
Member

Откуда: г. Ровно, Украина
Сообщений: 23
Вот предложили еще одно решение:
create or replace function UDO_TEST_CHAR(nVALUE in number) 
return varchar2 as
  res varchar2(64);
begin
  res := 
  case nVALUE 
    when 0 then 'абвгд' 
    when 1 then 'ежзий'
  --...
   else null end;
  return res;
end;
2 фев 11, 16:02    [10171982]     Ответить | Цитировать Сообщить модератору
 Re: В запросе не работает функция, возвращающая char  [new]
-2-
Member

Откуда:
Сообщений: 15330
Freehover
Вот предложили еще одно решение
when ... then return ...
2 фев 11, 16:09    [10172040]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить