Postgres函数返回集

时间:2013-11-07 21:20:37

标签: sql function postgresql view return

有人可以让我知道解决这个问题的正确方法吗?我不确定在这种情况下我是应该使用函数还是视图。

我有一个临时表,其中包含我需要在类似的查询中搜索的一些帐号:

SELECT
    tb1.accountNo,
    tb2.name
FROM
    joinTable jt
    JOIN table1 tb1 ON jt.foreign-key1 = tb1.id
    JOIN table2 tb2 ON jt.foreign-key2 = tb2.id
WHERE tb1.accountNo LIKE '%sub-string';

我在临时表中的帐号不完全匹配,但我需要从另一个表中提取信息。上面的查询基于每个帐户工作,但我想要一些可以批量工作的东西。

我尝试过的一种方法是创建一个捕获连接的视图,但是如何在多个帐户中同时使用不精确的帐号呢?

另一种可能性是使用函数循环遍历临时表并从查询中捕获信息。在这方面,我的问题是:如何构建一个结果集或表来从函数返回?我是否必须创建一个临时表作为函数的一部分,并在循环执行时将记录插入其中?有没有比使用TYPE更优雅的方式? 这是我一直在尝试的一个示例函数。

CREATE TYPE accName AS (accountNo VARCHAR(255), name VARCHAR(200));
CREATE OR REPLACE FUNCTION findMissingAccounts()
    RETURNS SETOF accName AS
    $$
    DECLARE
        tempacc RECORD;
    BEGIN
        FOR tempacc IN SELECT * from tempTable LOOP --non-complete account number
            RETURN QUERY -- RETURN QUERY or RETURN NEXT?
                SELECT
                    tb1.accountNo,
                    tb2.name
                FROM
                    joinTable jt
                    JOIN table1 tb1 ON jt.foreign-key1 = tb1.id
                    JOIN table2 tb2 ON jt.foreign-key2 = tb2.id
                WHERE tb1.accountNo LIKE '%tempacc';
         END LOOP;
    RETURN;
    END;
    $$ LANGUAGE 'plpgsql' STABLE

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您是否尝试在LIKE条件下加入表格?

SELECT
    tb1.accountNo,
    tb2.name,
    tt.tempacc
FROM
    joinTable jt
    JOIN table1 tb1 ON jt.foreign-key1 = tb2.id
    JOIN table2 tb2 ON jt.foreign-key2 = tb1.id
    JOIN tempTable tt ON jt.accountNo LIKE '%'||tt.tempacc;