Re: Calling function from VFP changes character field to Memo
От | Frank Cazabon |
---|---|
Тема | Re: Calling function from VFP changes character field to Memo |
Дата | |
Msg-id | ee0ec151-3f0d-8eef-5dfb-ae47d1a0c695@gmail.com обсуждение исходный текст |
Ответ на | Re: Calling function from VFP changes character field to Memo (Adrian Klaver <adrian.klaver@aklaver.com>) |
Список | pgsql-general |
On 15/11/2022 2:58 pm, Adrian Klaver wrote: > On 11/15/22 10:54 AM, Frank Cazabon wrote: >> >> On 15/11/2022 2:44 pm, Tom Lane wrote: >>> Frank Cazabon <frank.cazabon@gmail.com> writes: >>>> If however I have a function defined like this >>>> CREATE OR REPLACE FUNCTION public.testfunction( >>>> ) >>>> RETURNS TABLE >>>> ( >>>> Firstname character(30) >>>> ) >>>> LANGUAGE 'plpgsql' >>>> AS $BODY$ >>>> BEGIN >>>> RETURN QUERY SELECT p.cFirstName FROM patients p; >>>> END; >>>> $BODY$; >>>> And I call: >>>> SELECT * FROM public.testFunction(); >>>> Then FirstName returns as a Memo field (similar to a Text field). >>> This is mostly about whatever software stack you're using on the >>> client side --- Memo is certainly not something Postgres knows about. >>> >>>> Any idea what I need to do to get it to return the character(30) type? >>> There's no chance of getting back the "30" part with this structure, >>> because function signatures do not carry length restrictions. >>> What I expect is happening is that you get firstname as an >>> unspecified-length "character" type, and something on the client >>> side is deciding to cope with that by calling it "Memo" instead. >>> >>> You could perhaps work around that by defining a named composite >>> type: >>> >>> create type testfunction_result as (firstname character(30), ...); >>> >>> create function testfunction() returns setof testfunction_result as ... >>> >>> regards, tom lane >> Thanks, so I could define the function like this - removed the (30): >> >> CREATE OR REPLACE FUNCTION public.testfunction( >> ) >> RETURNS TABLE >> ( >> Firstname character >> ) >> LANGUAGE 'plpgsql' > > No you don't want to do that: > > select 'test'::char; > bpchar > -------- > t > > vs > > select 'test'::varchar; > varchar > --------- > test > > Besides you missed the important part, after creating the type > testfunction_result: > > create function testfunction() returns setof testfunction_result as ... > Sorry about the confusion, I have got it working using the type definition. Thanks for the help > >> >> I'll try the type definition and see if that helps. >> >> > >
В списке pgsql-general по дате отправления: