tau*_*orf 3 database postgresql function plpgsql
我有两个这样的表:
CREATE TABLE table1_lang
(
id serial NOT NULL,
lang1 character varying,
lang2 character varying,
...
)
CREATE TABLE table2_lang
(
id serial NOT NULL,
table1_id NOT NULL,
lang1 character varying,
lang2 character varying,
...
)
Run Code Online (Sandbox Code Playgroud)
每个lang列均包含不同语言的名称。我想创建一个从table1_lang返回所选lang的函数(如果存在)。如果该名称在table1_lang中不存在,则该函数应从table2_lang返回该名称。
到目前为止,我已经使用plpgsql中的此函数解决了我的问题:
CREATE OR REPLACE FUNCTION get_name(integer, text)
RETURNS character varying AS
$BODY$
DECLARE
in_id ALIAS FOR $1;
lang ALIAS FOR $2;
table1_name varchar;
table2_name varchar;
BEGIN
IF lang IS NOT NULL AND lang = 'lang1' THEN
SELECT a.lang1 INTO table1_name
FROM table1_lang a
WHERE a.id = in_id;
IF table1_name IS NOT NULL AND length(table1_name) > 0 THEN
RETURN table1_name;
ELSE
SELECT a.lang1 INTO table2_name
FROM table2_lang a
WHERE a.table1_id = in_id;
IF table2_name IS NOT NULL AND length(table2_name) > 0 THEN
RETURN table2_name;
END IF;
END IF;
END IF;
IF lang IS NOT NULL AND lang = 'lang2' THEN
SELECT a.lang2 INTO table1_name
FROM table1_lang a
WHERE a.id = in_id;
IF table1_name IS NOT NULL AND length(table1_name) > 0 THEN
RETURN table1_name;
ELSE
SELECT a.lang2 INTO table2_name
FROM table2_lang a
WHERE a.table1_id = in_id;
IF table2_name IS NOT NULL AND length(table2_name) > 0 THEN
RETURN table2_name;
END IF;
END IF;
END IF;
...
IF table2_name IS NULL OR length(table2_name) = 0 THEN
RETURN NULL;
END IF;
END
$BODY$
LANGUAGE plpgsql VOLATILE STRICT
COST 100;
ALTER FUNCTION get_name(integer, text) OWNER TO postgres;
Run Code Online (Sandbox Code Playgroud)
但是我想知道是否可以用plpgsql或PostgreSQL中可用的其他语言创建一个函数,该函数将列作为输入参数?
归档时间: |
|
查看次数: |
587 次 |
最近记录: |