我正在使用 PostgreSSQL 8.3。
我想执行这个查询:
select COALESCE(col_fr,col,'Unknown') from my_table where id = 'abc';
Run Code Online (Sandbox Code Playgroud)
故事中的扭曲是列名colum_fr
应该动态生成。my_table
对于不同的语言有不同的列。就像是:
id col col_ja col_fr
Run Code Online (Sandbox Code Playgroud)
我在水晶报告中使用此查询,我可以在其中传递语言的字符串参数:
select COALESCE(col_||{?parameter},col,'Unknown') from my_table where id = 'abc';
Run Code Online (Sandbox Code Playgroud)
如果{?language}
value 是,它将在内部转换为如下内容fr
:
select COALESCE(col_||'fr',col,'Unknown') from my_table where id = 'abc';
Run Code Online (Sandbox Code Playgroud)
这永远不会奏效。
我不想使用选择大小写,使其动态化。
作为替代解决方案,我还尝试创建一个存储过程:
CREATE OR REPLACE FUNCTION get_policy_name (
id text,
lang text,
def_value text
)
RETURNS SETOF record AS
$body$
DECLARE
sql text;
BEGIN
sql := 'SELECT COALESCE(col_'||quote_ident(lang)||',col,'||quote_literal(def_value)||')FROM my_table WHERE id ='||quote_literal(id);
RETURN QUERY EXECUTE …
Run Code Online (Sandbox Code Playgroud) postgresql stored-procedures dynamic-sql plpgsql postgresql-8.3