sql - 在 PostgreSQL IF/THEN 语句中使用 DELETE FROM...RETURNING

标签 sql postgresql function if-statement sql-delete

我有这个代码:

DO $$
returns table (msg varchar(500), isSuccessful BIT) as $BODY$
declare
newID integer := null;
id integer := 100;
BEGIN
IF newID is NULL 
then delete from table1 t1 where t1.id = id;
delete from table2 t2 where t2.id = id
returning 'test' as msg, 1 as isSuccessful;
else insert into table1(id, name)
values(id, 'testname');
END IF;
END $$; 

当我运行此程序时,我收到此错误:

错误:“返回”处或附近的语法错误

我本来没有returns table行,但经过一番研究后,我了解到我需要为 returning 中的数据建立一个表。要写入的行。

我想要返回的是以下内容:

<表类=“s-表”> <标题> 消息 成功 <正文> 测试 1

我的 returns table 做错了什么线以及如何实现我正在寻找的输出?另外,我是否必须创建一个函数才能使其工作?

最佳答案

示例如何将已删除的记录从表 sample1 插入到表 sample2 中:

with deleted_rows as (
    delete from test.sample1 where id = 123712
    returning id, first_name 
)
insert into test.sample2 (id, first_name) 
SELECT id, first_name from deleted_rows;

但是,如果您想获取这种格式的表格(msg,isSuccessful),那么:

CREATE OR REPLACE FUNCTION test.delete_data(p_id integer)
RETURNS table (msg text, isSuccessful boolean)
LANGUAGE plpgsql
AS $function$
declare 
    deleted_id integer; 
begin

    delete from test.sample1 where id = p_id
    returning id into deleted_id;
    -- if this query does not delete any record, so variable "deleted_id" will be null

    if (deleted_id is not null) then 
        return query 
        select 'Success Deleted', true;
    else 
        return query 
        select 'No records deleted', false;
    end if;

end;
$function$
;

关于sql - 在 PostgreSQL IF/THEN 语句中使用 DELETE FROM...RETURNING,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69681984/

相关文章:

sql - 如何设置可在多个批处理中使用的 session 变量?

sql - 使用多对多关系显示表 1 中的所有记录 - postgresql

function - Vala中的 "_"函数有什么作用?

json - 从 PostgreSQL JSON 列中提取单个字符串记录的值

C++结构对象调用一个函数

C++任意函数反序列化

php - 获取上周的数据(数量)

sql - PostgreSQL - 为条件成立的行选择计数(*)

jquery - 自动完成jquery和SQL,ASP.NET

postgresql - 我应该使用分片吗?