>
>
> Hi,
>>
>> i have a character varying variable and i concatenate with some other
>> variable, using the '||' operator.
>> the result of this concatenation should be the name of a column in my
>> table.
>>
>> however i don't know how to tell that this new concatenated string is a
>> column name.
>> how to do it ?
>> thanks.
>>
>
> in fact i'm trying to do the following thing:
>
> select id, theme_ || $1 from themes;
>
> and based on the parameter my stored procedure has received, it should
> create something like that:
> select id, theme_eng from themes;
>
> if $1 = 'eng'
>

I think i'm a good way, but i still have a problem with the performance.
when i call my stored procedure, it can take 0.1 s to 3.5 seconds to execute
it on local computer.
How can i improve it ?

here is my stored procedure:
CREATE OR REPLACE FUNCTION sewe.get_category_and_amount(character varying)
  RETURNS SETOF category_amount AS
$BODY$
    DECLARE
        inLanguage ALIAS FOR $1;
        outCategoryAndAmount category_amount;

        Lang character varying :='';
    BEGIN
        IF inLanguage = null OR inLanguage = '' THEN
            Lang := 'eng';
        ELSE
            Lang := inLanguage;
        END IF;

        FOR outCategoryAndAmount IN
            EXECUTE 'SELECT id, theme_name_' || Lang || ' FROM themes WHERE
parent_theme IS NULL ORDER BY theme_name_' || Lang || ' ASC'
        LOOP
            RETURN NEXT outCategoryAndAmount;
        END LOOP;
    END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE
  COST 100
  ROWS 1000;

Reply via email to