Now I understand.

Try this

create or replace function fmmx
return varchar2
as
begin
return 'xxx';
end;
create table mmt1 as
select  cast (fmmx as varchar2(30)) mx2 from dual;

Mike

On Tue, Oct 26, 2010 at 11:12 AM, Dan H <dan.he...@gmail.com> wrote:

> To clarify when I use the function in a create table as select
> statement I get a column width of 4000. But I found a way to reduce
> this somewhat using a substr statement in the select. Bad? If I don't
> use the substring I get a column width of 4000
>
>
> CREATE table coll_count_2 as
>
> SELECT Count(*) as ORDER_MNEMONIC_Count,
> encounter,
> substr(Find_Category(coll_loc_name),1,25) as Collection_Loc_Category
>
>
>
> On Oct 25, 12:23 pm, Michael Moore <michaeljmo...@gmail.com> wrote:
> > Dan,
> >
> > Your return type is VARCHAR2, not VARCHAR2(25) (which would not be
> allowed)
> > . So, the fact that your temp_variable is varchar2(25) is irrelevant.
> >
> > Not sure what you mean by "getting" as in "getting a column width of
> 4000".
> > Also, not sure what you mean by "creates column of VARCHAR(4000)".
> >
> > What is it that you are doing that shows you "4000"?
> >
> > Mike
> >
> > On Mon, Oct 25, 2010 at 10:37 AM, Dan H <dan.he...@gmail.com> wrote:
> > > I have created a function and only need to return a VARCHAR2 of size
> > > 25 but when I use the function in a create table as statement I am
> > > always getting a column width of 4000. Any suggestions?
> >
> > > CREATE OR REPLACE FUNCTION Find_Category (Word IN VARCHAR2)
> > >    RETURN VARCHAR2 IS
> > > temp_variable varchar2(25);
> > >    BEGIN
> > > temp_variable := case
> > >  when InStr(Word, 'PSC')<>0 Then 'PSC'
> > >  when InStr(Word, 'ACH')<>0 Then 'RRL'
> > >  when InStr(Word, 'FMC')<>0 Then 'RRL'
> > >  when InStr(Word, 'PLC')<>0 Then 'RRL'
> > >  when InStr(Word, 'RGH')<>0 Then 'RRL'
> > >  when InStr(Word, 'SMC')<>0 Then 'HCTL'
> > >  when InStr(Word, 'SCHC')<>0 Then 'HCTL'
> > >  when InStr(Word, 'AHC')<>0 Then 'HCTL'
> > >  when InStr(Word, 'DSC')<>0 Then 'DSC'
> > > else 'Unknown'
> > > end;
> > > temp_variable := substr(temp_variable,1,25);
> > > return temp_variable;
> >
> > > end;
> >
> > > Shouldn't the fact that I have declared the variable as VARCHAR2(25)
> > > limit the return variable? I even tried the substr but I still creates
> > > column of VARCHAR(4000)
> >
> > > --
> > > You received this message because you are subscribed to the Google
> > > Groups "Oracle PL/SQL" group.
> > > To post to this group, send email to Oracle-PLSQL@googlegroups.com
> > > To unsubscribe from this group, send email to
> > > oracle-plsql-unsubscr...@googlegroups.com
> > > For more options, visit this group at
> > >http://groups.google.com/group/Oracle-PLSQL?hl=en
> >
> >
>
> --
> You received this message because you are subscribed to the Google
> Groups "Oracle PL/SQL" group.
> To post to this group, send email to Oracle-PLSQL@googlegroups.com
> To unsubscribe from this group, send email to
> oracle-plsql-unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/Oracle-PLSQL?hl=en
>

-- 
You received this message because you are subscribed to the Google
Groups "Oracle PL/SQL" group.
To post to this group, send email to Oracle-PLSQL@googlegroups.com
To unsubscribe from this group, send email to
oracle-plsql-unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/Oracle-PLSQL?hl=en

Reply via email to