首页 文章

在postgresql中使用tablename作为参数的函数

提问于
浏览
0

如何在tableg作为参数的postgresql中创建一个函数,该函数返回table的结果集,该表作为查询“select * from TABLE”的参数传递 . 这里的TABLE是传递给函数的参数 .

1 回答

  • 3

    你想要的是可能但完全无用的 .

    你要求的功能是这样的:

    CREATE FUNCTION selectall(tbl name) RETURNS SETOF record AS $$
    BEGIN
      RETURN QUERY EXECUTE format('SELECT * FROM %I', tbl);
    END; 
    $$ LANGUAGE plpgsql;
    

    您需要一个集合返回函数(SRF),因为表可能有多行 . 它需要返回 record ,因为不同的表返回不同的列集 . 您 can not 在选择列表中使用此SRF:

    test=# SELECT selectall('student');
    ERROR:  set-valued function called in context that cannot accept a set
    CONTEXT:  PL/pgSQL function selectall(name) line 3 at RETURN QUERY
    

    您可以将其用作行源,但查询变得比简单的 SELECT * FROM student 更长 . 你 can not 使用它就像这样:

    test=# SELECT * FROM selectall('student');
    ERROR:  a column definition list is required for functions returning "record"
    LINE 1: SELECT * FROM selectall('student');
    

    can only use it 通过指定别名和列定义:

    test=# SELECT * FROM selectall('student') AS t(id int, first_name text, col3 boolean, ...);
    

    现在比较一下:

    test=# SELECT * FROM student;
    

相关问题