PostgreSQL返回错误时的简单更新触发器
它说我没有使用所选属性,我应该使用Perform而不是Select。但是在执行之后,它无法识别IF。我对这些语法非常陌生,所以它可能是错误的。我想我想做的很清楚(我相信对于有经验的人来说这很简单)。您能帮我解决这个问题吗?在标准SQL(和PostgreSQL)中,这是一个带引号的标识符(表名、列名等): 这是一个字符串文字:PostgreSQL返回错误时的简单更新触发器,sql,postgresql,triggers,Sql,Postgresql,Triggers,它说我没有使用所选属性,我应该使用Perform而不是Select。但是在执行之后,它无法识别IF。我对这些语法非常陌生,所以它可能是错误的。我想我想做的很清楚(我相信对于有经验的人来说这很简单)。您能帮我解决这个问题吗?在标准SQL(和PostgreSQL)中,这是一个带引号的标识符(表名、列名等): 这是一个字符串文字: "Alive" 您将收到关于“未知列”的投诉,因为您对字符串使用了错误的引号 通常使用定义函数来避免此类情况: 'Alive' 要表示行的上一个/当前状态和新的/更新的
"Alive"
您将收到关于“未知列”的投诉,因为您对字符串使用了错误的引号
通常使用定义函数来避免此类情况:
'Alive'
要表示行的上一个/当前状态和新的/更新的状态,您应该参考这些状态,而不是试图选择以查找状态:
CREATE FUNCTION update_status() RETURNS TRIGGER AS $$
BEGIN
SELECT status FROM animals
IF status = 'Alive' THEN
UPDATE animals SET status = 'Sold' WHERE status = 'Alive';
END IF;
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
对于该更新,您可能还需要在WHERE子句中添加更多内容,只是WHERE status='Alive'
似乎有点宽泛。在标准SQL(和PostgreSQL)中,这是一个带引号的标识符(表名、列名等):
这是一个字符串文字:
"Alive"
您将收到关于“未知列”的投诉,因为您对字符串使用了错误的引号
通常使用定义函数来避免此类情况:
'Alive'
要表示行的上一个/当前状态和新的/更新的状态,您应该参考这些状态,而不是试图选择以查找状态:
CREATE FUNCTION update_status() RETURNS TRIGGER AS $$
BEGIN
SELECT status FROM animals
IF status = 'Alive' THEN
UPDATE animals SET status = 'Sold' WHERE status = 'Alive';
END IF;
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
对于该更新,您可能还需要在WHERE子句中增加一点内容,只是
WHERE status='Alive'
似乎有点宽泛。忘记说它正确创建了触发器,问题是我更新id\u selling变量时。忘了说它正确创建了触发器,问题是当我更新id_selling变量时。我最近编译了一个列表,其中的标识符使用分隔符。这对我帮助很大,TYVM!:)我最近编译了一个列表,其中的标识符使用了分隔符。这对我帮助很大,TYVM!:)