在 SQL Server 中,我会这样做:
insert into foo(name) values('bob')
select @@identity;
我想知道如何使用PostgreSQL来获取查询/标量结果的显示。
在 SQL Server 中,我会这样做:
insert into foo(name) values('bob')
select @@identity;
我想知道如何使用PostgreSQL来获取查询/标量结果的显示。
获取特定序列:
SELECT currval('name_of_your_sequence');
获取最后一个序列中使用的值:
SELECT lastval();
同时查看手册:http://www.postgresql.org/docs/current/static/functions-sequence.html
编辑:您还可以在INSERT中使用RETURNING:
INSERT INTO foo(id, name) VALUES(DEFAULT, 'bob') RETURNING id;
DECLARE
nivel1 RECORD;
resultId BIGINT;
BEGIN
FOR nivel1 IN SELECT * FROM primary_table LOOP
INSERT INTO second_table(id, field2, field3) VALUES (DEFAULT, "value2", "value3") RETURNING id INTO resultId;
RAISE NOTICE 'Inserted id: %s', quote_literal(resultId);
END LOOP;
RETURN;
END
这对我来说可行!
希望您能够执行以下操作:
GET DIAGNOSTICS YourParam = RESULT_OID;
请查看此链接:http://www.postgresql.org/docs/8.2/static/plpgsql-statements.html 并向下滚动至37.6.6.获取结果状态。
asker edit: 我尝试了这个方法:
create or replace function aaa() returns int as $$
declare
a int;
begin
insert into oameni values(default, 'aaa');
get diagnostics a = result_oid;
return a;
end;
$$ language plpgsql;
它总是返回0,你知道这里出了什么问题吗?
@@identity
,而是使用SCOPE_IDENTITY()更为安全,可以避免触发器带来的潜在问题。 - Joe Stefanelli