我有一个名为“Details”的表,其中有4列。
| 姓名|年龄|职业|出生年份|
| - ------|- ------|- ------|- ------|
| 扎夫|二十五|零|一九九七年|
| 大卫|零|零|二○ ○ ○年|
要求是,如果我在occupation列中插入一个值,我希望它插入到第一个空行上。这意味着,我希望首先填充该列的空行。例如,
insert into details(occupation)
values('student');
我想创建一个函数,如果我插入任何新值,它将返回这样的结果
| 姓名|年龄|职业|出生年份|
| - ------|- ------|- ------|- ------|
| 扎夫|二十五|学生| 一九九七年|
| 大卫|零|零|二○ ○ ○年|
我的问题是,如何在单个查询中更新列的值,如果该值为空,然后用新值更新。
我带来了这两个功能。
CREATE OR REPLACE FUNCTION update_null_value(value int)
RETURNS VOID AS $$
BEGIN
UPDATE details
SET occupation = value
WHERE occupation IS NULL
RETURNING occupation
INTO value;
SELECT value
FROM details
WHERE occupation= value
LIMIT 1;
END;
$$ LANGUAGE plpgsql;
每当我传递一个值,我得到这个错误。错误:查询返回了多行提示:确保查询返回单行,或使用LIMIT 1。CONTEXT:PL/pgSQL函数update_null_value(整数)第3行,位于SQL语句SQL状态:第0003页
如果我在更新中限制为1,就像这个函数。我得到错误:在“limit”或其附近出现语法错误,因为我们无法在更新中使用limit 1。
CREATE OR REPLACE FUNCTION update_null_value(value int)
RETURNS VOID AS $$
BEGIN
INSERT INTO organization_map (organization_id)
VALUES (value);
UPDATE organization_map
SET organization_id = value
WHERE organization_id IS NULL
limit 1
RETURNING organization_id
INTO value;
SELECT value
FROM organization_map
WHERE organization_id = value
order by organization_id
LIMIT 1;
END;
$$ LANGUAGE plpgsql;
如何创建一个适用于所有列和行的函数。请帮助。
1条答案
按热度按时间vvppvyoh1#
此功能应该工作...
但是它将返回已知的输入参数
value
,并且它将更新occupation IS NULL
!正如@Frank和@Stefanov所说:你如何识别“第一”行和唯一要更新的行?2你需要一个附加条件或排序来选择一行。