PostgreSQL 9.3:不使用if条件更新表
下表有两列,即FirstName和Num,如下所示: 表:测试PostgreSQL 9.3:不使用if条件更新表,postgresql,postgresql-9.3,Postgresql,Postgresql 9.3,下表有两列,即FirstName和Num,如下所示: 表:测试 CREATE TABLE Test ( FirstName VARCHAR(10), Num int ); 插入: INSERT INTO Test VALUES('b',1); INSERT INTO Test VALUES('ba',2); INSERT INTO Test VALUES('bac',3); 注意:现在我想使用函数更新表中的名字。这张桌子应该是白色的 仅当我将firstName的某些值传递给函数时才更新,否则
CREATE TABLE Test
(
FirstName VARCHAR(10),
Num int
);
插入:
INSERT INTO Test VALUES('b',1);
INSERT INTO Test VALUES('ba',2);
INSERT INTO Test VALUES('bac',3);
注意:现在我想使用函数更新表中的名字。这张桌子应该是白色的
仅当我将firstName的某些值传递给函数时才更新,否则,如果传递空字符串或null,则更新
值,则它不应更新意味着它应仅保留其旧值我不想
要使用该条件的IF条件
我的尝试:
功能:趣味测试
create or replace function fun_test(p_FirstName varchar(50),p_num int)
RETURNS BOOLEAN
AS
$boday$
BEGIN
Update Test
set FirstName = COALESCE(p_FirstName,FirstName)
WHERE Num = p_num;
RETURN FOUND;
END;
$boday$
LANGUAGE PLPGSQL;
调用函数:
INSERT INTO Test VALUES('b',1);
INSERT INTO Test VALUES('ba',2);
INSERT INTO Test VALUES('bac',3);
条件1:以下调用函数不应更新FirstName的旧值
SELECT * from fun_test('',3);
SELECT * from fun_test('xyz',3);
条件2:以下调用函数应更新FirstName的旧值
SELECT * from fun_test('',3);
SELECT * from fun_test('xyz',3);
听起来像是家庭作业。当您引用coalsece文档时,您会发现它返回第一个非空元素。
coalesce()
检查null
值,空字符串('
)不是null
值。另外:您应该这样调用函数:选择fun\u test(…)
。由于它不返回结果集,因此不应将其放入from
子句中。