在SQL脚本

时间:2015-09-30 15:08:05

标签: postgresql

我正在为PostgreSQL功能编写单元测试。首先在数据库中插入数据然后调用某个函数。但是,因为我使用自动递增ID,所以我无法知道在函数调用中放入什么参数。

我希望能够做到这样的事情:

INSERT INTO myTable ...;

SELECT id FROM myTable INTO l_id;

SELECT my_function(l_id);

更新

  • 我使用的是SQL脚本,而不是PL / pgSQL
  • 在MySQL中,我可以执行此操作:SELECT @id:=itemid FROM myTable;,稍后,我可以在任何我喜欢的地方使用@id

3 个答案:

答案 0 :(得分:1)

Postgres中的

INSERT会返回一个OID,您可以通过多种方式获取OID

  • 在普通SQL中使用returns子句,例如

INSERT INTO distributors (did, dname) VALUES (DEFAULT, 'XYZ Widgets') RETURNING did;

  • 使用PL-PGSQL中的GET DIAGNOSTICS api

  • 在助手库中使用return函数(语法取决于库)。

在您的情况下,您可以执行类似

的操作
with res as (
INSERT INTO my_table (id, ...) VALUES(x,..)
RETURNING id)
SELECT my_function(res.id);

答案 1 :(得分:1)

\gset

另外,对于较小的东西,你可以使用psql的 function colorSwitch() { var thediv = document.getElementsByClassName("light"); console.log("Button Clicked"); if(thediv[0].style.backgroundColor == "#ff0000") { thediv[0].style.backgroundColor = "#ffff00"; } if(thediv[0].style.backgroundColor == "#ffff00") { thediv[0].style.backgroundColor = "#00ff00"; } if(thediv[0].style.backgroundColor == "#00ff00") { thediv[0].style.backgroundColor = "#ff0000"; } }; 命令:here

答案 2 :(得分:0)

Here我发现提到了DO块,它似乎是一个匿名函数。我这样修好了:

INSERT ...

DO $$
DECLARE
    l_id integer;
BEGIN
    SELECT id FROM table INTO l_id;
    SELECT myFunction(l_id);
END$$;