2011-04-19 67 views
4

我写了一个PL/PgSQL触发器,我需要将查询(实际上是结果集)保存到变量中。 见下文:将SQL查询保存到变量

DECLARE 
    __query record; 
    r record; 
BEGIN 
    __query := (SELECT * FROM posts); 
    FOR r IN __query LOOP 
     -- do something with the row data 
    END LOOP; 

    RETURN NEW; 
END; 

我应该使用哪种类型的数据查询本身?

我猜record是不适合的数据类型,应该在循环周期本身(用于r var)。

+0

我相信你应该在这里使用游标 – 2011-04-19 12:11:39

回答

3

如果你的意思是你想通过查询循环作为一个字符变量,那么你可以做这样的:

DECLARE 
    _query : text; 
    r : record; 
BEGIN 
    _query := 'SELECT * FROM posts'; 

    FOR r IN EXECUTE _query LOOP 
     -- do stuff 
    END LOOP; 

    RETURN new; 
END; 
3
DECLARE 

    CURSOR cursor is (select * from posts); 
    r  record; 
BEGIN 

FOR cursor_rec in cursor LOOP 
    ... 
END LOOP; 
-1
DECLARE 

    cursor c is select * from posts; 
    -- r record; you don't need to declare this variable 
BEGIN 
    FOR c_rec in c LOOP 
     ... 
     ... 
     ... 
    END LOOP; 
END; 

此代码对Oracle PL-SQL

+0

-1:Oracle PL/SQL不适用于PostgreSQL – 2011-04-19 12:55:33