从游标PostgreSQL获取行
我有光标代码:从游标PostgreSQL获取行,postgresql,cursor,Postgresql,Cursor,我有光标代码: BEGIN; DECLARE cliente_cursor CURSOR FOR SELECT * FROM cliente; 我想阅读“客户”表中的所有内容: 使用光标。 我有适用于SQL Server的代码: DECLARE cliente_cursor CURSOR FOR SELECT * FROM cliente OPEN cliente_cursor FETCH NEXT FROM cliente_cursor; While @@FETCH_STAT
BEGIN;
DECLARE cliente_cursor
CURSOR FOR SELECT * FROM cliente;
我想阅读“客户”表中的所有内容:
使用光标。
我有适用于SQL Server的代码:
DECLARE cliente_cursor CURSOR
FOR SELECT * FROM cliente
OPEN cliente_cursor
FETCH NEXT FROM cliente_cursor;
While @@FETCH_STATUS=0
BEGIN
FETCH NEXT FROM cliente_cursor;
End
CLOSE cliente_cursor
DEALLOCATE cliente_cursor
我想要一个PostgreSQL的工作代码
我一直在寻找解决方案&人们通常建议使用函数。我想知道在这个PostgreSQL DBMS中是否有任何方法可以创建类似SQL Server中的代码
我编写了以下代码:
CREATE OR REPLACE FUNCTION MyFunction()
RETURNS setof cliente AS $$
DECLARE
cursor_cliente CURSOR FOR SELECT * FROM cliente;
rec cliente%ROWTYPE;
BEGIN
OPEN cursor_cliente;
loop
--fetch the table row inside the loop
FETCH cursor_cliente INTO rec;
-- check if there is no record
--exit from loop when record not found
if not found then
exit ;
end if;
end loop;
RETURN;
END;
$$ LANGUAGE plpgsql;
但当我运行它时,我只得到:
select MyFunction();
你知道代码应该是什么吗
任何帮助都将不胜感激
CREATE OR REPLACE FUNCTION foo() RETURNS setof cliente
language plpgsql AS $$
DECLARE
x cliente%rowtype ;
BEGIN
FOR x IN SELECT * FROM cliente loop
RETURN NEXT x;
END loop;
END $$;
SELECT * FROM foo();
它也可以通过显式游标来完成
CREATE OR REPLACE FUNCTION foo() RETURNS setof cliente
language plpgsql as $$
DECLARE
x cliente%rowtype ;
cliente_cursor CURSOR FOR SELECT * FROM cliente;
BEGIN
FOR x IN cliente_cursor loop
RETURN NEXT x;
END loop;
END $$;
SELECT * FROM foo();
该函数将持续存在,因此要么给它一个有用的名称并保留它,要么在完成后删除它
如果您想要函数的私有名称,
pg_temp.foo
将是会话的私有名称。如果您只想返回查询中的所有行,请使用
RETURN QUERY
SELECT ...
并且将表(column1 type1,column2 type2,…)
作为函数的类型返回
或对于游标:
RETURN QUERY
FETCH ALL FROM cliente_cursor;
FOR _record IN
FETCH ALL FROM ...
LOOP
<action1>;
<action2>;
...
END LOOP;
要对每行执行某些操作,请使用
FOR _record IN
SELECT ...
LOOP
<action1>;
<action2>;
...
END LOOP;
中的_记录
选择。。。
环
或对于游标:
RETURN QUERY
FETCH ALL FROM cliente_cursor;
FOR _record IN
FETCH ALL FROM ...
LOOP
<action1>;
<action2>;
...
END LOOP;
中的_记录
全部从……取回。。。
环
)我看不出你想要的与客户的SELECT*有什么不同代码>这可能是因为我不了解ms sql Server,它实际上是一样的。不同的是,我希望表格通过游标显示。那么使用for循环。为什么要使用游标?它所要做的就是减慢查询速度。内联plpgsql在与plpgsql函数相同的事务中运行。如何使用循环@Jasen?谢谢你的回答。我必须在PLPGSQL中使用游标来执行与sentencesAwesome&clear Explaution@Jasen的SQL server块相同的操作。谢谢你的快速帮助!