Passing column name to a function at runtime

Поиск
Список
Период
Сортировка
От Wright, George
Тема Passing column name to a function at runtime
Дата
Msg-id 336B1B69979ED3119E2A0060089777A3117C52A2@cmexch.cinmach.com
обсуждение исходный текст
Ответы Re: Passing column name to a function at runtime  (Oliver Elphick <olly@lfix.co.uk>)
Re: Passing column name to a function at runtime  (David Gardner <david@gardnerit.net>)
Список pgsql-novice

I have a language table (translations) with column names which are the language for the items in that column:

 

english   spanish   german     etc.

 

I am joining that table to another table on an integer id.

I am trying to write a type statement and function where the name of the column is passed into the function. That language name appears in the select portion of the query:

 

 

 

#type

CREATE TYPE catCats AS (classid integer, varname text, color text, lang text);

 

 

 

#function

CREATE OR REPLACE FUNCTION listCategories(text) RETURNS SETOF catCats AS $$

  SELECT DISTINCT(classid), varname, color, $1

  FROM span_classes

  LEFT JOIN translations ON translations.lid = span_classes.descript_tid

  GROUP BY classid, varname, color, $1

  ORDER BY classid ASC;

$$ LANGUAGE SQL;

 

 

 

#using the function

select * from listCategories(english);

 

 

 

If I pass in english or “english” it says column does not exist. If I pass in ‘english’ I get the literal english in my result set.

If I substitute the literal english (with no quotes) in place of the $1 in the function, the query returns the english values from the translations table correctly.

I’ve tried bytea for the datatype, as well as a table alias. I don’t know the language column until runtime so I can’t code it in the function.

 

 

What am I doing wrong?

В списке pgsql-novice по дате отправления:

Предыдущее
От: Mija Lee
Дата:
Сообщение: Re: problems loading languages
Следующее
От: Oliver Elphick
Дата:
Сообщение: Re: Passing column name to a function at runtime