Postgres 10:根据选择的查询结果引发异常或执行更新

时间:2018-08-02 12:48:24

标签: sql postgresql

我有2张桌子:

UNIT:
    integer id (PKEY)
    varchar symbol 

OPERATION:
    integer id (PKEY)
    integer unit_id (FKEY to UNIT table) accepts null

我需要根据选择查询结果构造一些脚本,但是我不知道如何正确编写它。

我需要实现的东西,用伪sql编写:

if (select count(*) from UNIT where symbol = 'some_text' = 0)
    then raise exception 'not found!'
else 
    update OPERATION set unit_id = (select id from unit where symbol = 'rg' limit 1) where unit_id = null;

因此,当UNIT表不包含任何符号为“ some_text”的记录时,应引发异常。

否则,应该对unit_id列的OPERATION表进行更新-将空值替换为第一个UNIT记录ID值。

1 个答案:

答案 0 :(得分:1)

也许您可以创建一个函数

CREATE FUNCTION update_operation_unit(IN CHARACTER VARYING(250) symbol_text) RETURNS VOID LANGUAGE plpgsql AS $$ [...] $$

此功能可以完全运行您上面描述的伪代码。