Злобный тип long

Angellore
Дата: 05.12.2007 14:08:58
Такая проблема.
Есть функция:
create or replace function Make_Def_Val
    (
      p_str_date in long --(**************)
    )
    return varchar
    is
      l_result varchar(100);
    begin

      execute immediate 'select '||p_str_date||' from dual' into l_result;
      return l_result;
       
      exception
        when others then
        return p_str_date;
    end;
Если измениить long на varchar, то тогда она нормально отрабатывает с переменными типа варчар
Но как сделать, чтобы она работала с переменными типа лонг?
Выдает ошибку:
Неверная работа с типом лонг.
Спасибо
jan2ary
Дата: 05.12.2007 14:15:35
Нельзя конкатенировать long со строками.
execute immediate 'select '||p_str_date||' from dual' into l_result;
Angellore
Дата: 05.12.2007 14:17:57
А что тогда делать? Я не могу сделать cast(fff as varchar(100)) где fff -переменная типа ЛОНГ
Mikst
Дата: 05.12.2007 14:32:34
Angellore
А что тогда делать? Я не могу сделать cast(fff as varchar(100)) где fff -переменная типа ЛОНГ


лонг можно присвоить варчару.
_Alex_SMIRNOV_
Дата: 05.12.2007 14:34:47
Создай временную табличку с полем LOB и делай Select в нее в процедуре
NSERT INTO tmp_table
  (SELECT TO_LOB(DATA_DEFAULT) FROM all_tab_columns WHERE....)
Angellore
Дата: 05.12.2007 14:35:42
пробовал и так, все равно говорит:"Неверное использование типа ЛОНГ"
Сначала:
create or replace function Make_Def_Val
    (
      p_str_date in long
    )
    return varchar
    is
      l_result varchar(100);
      l_ser varchar(100);
    begin
      l_ser := p_str_date;   
      execute immediate 'select '||l_ser||' from dual' into l_result;
      return l_result;
       
      exception
        when others then
        return l_ser;
    end;
потом
create table aaa(a long);
insert into aaa values('to_date(''05.12.2007'',''dd.mm.yyyy'')');
и далее
select make_def_val(a) from aaa
Попробуйте
Mikst
Дата: 05.12.2007 14:42:21
в функции делайте тип CLOB,
а в вызове f(to_lob(a))
Mikst
Дата: 05.12.2007 14:43:47
поторопился, to_lob можно только в insert-select использовать
Angellore
Дата: 05.12.2007 14:46:46
Ну как тогда использовать блин этот тип? Неужели невозможно его преобразовать к чему то толковому, что работает)?
Mikst
Дата: 05.12.2007 14:47:55
Angellore
Ну как тогда использовать блин этот тип? Неужели невозможно его преобразовать к чему то толковому, что работает)?


можно, так:

function is
v varchar2(4000);
begin
  select long_field into v from table_with_long where .... ;
...
end;