如何仅使用其行 ID 获取母表和子表结果?

How can I get mother table and daughter table results only with their row ID?

提问人:limier 提问时间:5/4/2023 最后编辑:E_net4limier 更新时间:5/4/2023 访问量:39

问:

我有一个母亲表人和 3 个女儿表:员工、潜在客户、访客。

我正在尝试构建一个存储函数,以便仅使用其 ID 获取母表和子表结果,但我遇到了相同的语法错误,并且还没有找到任何解决方案。

CATEG 在这里表示类别,这就是我知道我需要将结果与 person 表联接到哪个表的方式。

drop function if exists get_person_and_subtable(integer);

CREATE OR REPLACE FUNCTION get_person_and_subtable(IN id integer)
RETURNS SETOF record 
AS $fun$

DECLARE var_categ CHAR(5); 
DECLARE var_id INT = id;

BEGIN
    var_categ := (select PER_CATEG from T_PERSONNE where PER_ID = var_id);
    IF var_categ ='EMP' THEN RETURN QUERY SELECT * FROM T_PERSONNE INNER JOIN T_EMPLOYE ON T_PERSONNE.PER_ID = T_EMPLOYE.EMP_ID;
    ELSE IF  var_categ ='PROSP' THEN RETURN QUERY SELECT * FROM T_PERSONNE INNER JOIN T_PROSPECT ON T_PERSONNE.PER_ID = T_PROSPECT.PROSP_ID;
    ELSE RETURN QUERY SELECT * FROM T_PERSONNE INNER JOIN T_VISITEUR ON T_PERSONNE.PER_ID = T_VISITEUR.VIS_ID; 
END;
$fun$ 
LANGUAGE plpgsql;

我正在使用 PostgreSQL 数据库。

以下是错误消息的翻译:

错误:错误:语法错误在« ; 第 15 行:结束;

我尝试了不同的小语法更改,但没有用。

PostgreSQL 继承 语法错误

评论

1赞 JohnH 5/4/2023
没有一个 s 具有对应的 s。s 也是不必要的,因为当条件满足时,每个 s 都会用 a 终止函数。IFEND IFELSEIFRETURN
0赞 limier 5/4/2023
谢谢你的回答。我删除了 ELSE 并添加了 END IF;在每个 IF 语句的末尾。所以,现在我在附近有一个新的语法错误:LANGUAGE plpgsql;你知道如何解决它吗?

答: 暂无答案