Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql Postgres调用函数/过程,执行查询和;然后删除_Postgresql_Plpgsql - Fatal编程技术网

Postgresql Postgres调用函数/过程,执行查询和;然后删除

Postgresql Postgres调用函数/过程,执行查询和;然后删除,postgresql,plpgsql,Postgresql,Plpgsql,我正在寻找一种在Postgresql 12中使用函数或过程的方法,可以用一行代码调用该函数或过程,以便在命令行中使用 1) 执行以参数作为输入的查询 例如: 从表1中选择id,其中name=$PARAMETER 2) 根据返回的ID,执行多个删除 例如: delete from table2 where id = $id delete from table3 where id = $id 在SQL Server中,我会使用存储过程来实现这一点,但我不知道如何在PostgreSQL中实现这一点。

我正在寻找一种在Postgresql 12中使用函数或过程的方法,可以用一行代码调用该函数或过程,以便在命令行中使用

1) 执行以参数作为输入的查询

例如:
从表1中选择id,其中name=$PARAMETER

2) 根据返回的ID,执行多个删除

例如:

delete from table2 where id = $id
delete from table3 where id = $id

在SQL Server中,我会使用存储过程来实现这一点,但我不知道如何在PostgreSQL中实现这一点。

如果您的源代码是MS SQL,那么好的开始就是阅读。语言和环境是不同的(可能与你所知道的非常不同)

但您的任务很简单-您可以使用过程(来自Postgres 11)或函数:

CREATE OR REPLACE FUNCTION s(_name text)
RETURNS void AS $$
DECLARE _id int;
BEGIN
  SELECT id FROM table1 WHERE name = _name INTO _id;
  DELETE FROM table2 WHERE id = _id;
  DELETE FROM table2 WHERE id = _id;
END
$$ LANGUAGE plpgsql;
或类似的程序

CREATE OR REPLACE PROCEDURE s(_name text)
AS $$
DECLARE _id int;
BEGIN
  SELECT id FROM table1 WHERE name = _name INTO _id;
  DELETE FROM table2 WHERE id = _id;
  DELETE FROM table2 WHERE id = _id;
END
$$ LANGUAGE plpgsql;
函数通过
SELECT s('somename')


过程由语句
calls('somename')执行

Postgres还具有存储过程和函数的概念。如果您可以在SQL Server中编写它们,那么适应plpgsql语法应该不会有太大问题。@steiner:这是完全错误的。这与sql server完全不同。我不是说语法完全相同。我是说,通过一些研究和阅读,你应该能够适应它。