如何使用用户输入作为参数来编写查询以在PostgreSQL中创建表?

问题描述 投票:1回答:1

我认为这应该是一个非常简单的问题,但是我无法在线找到任何信息,因此我不得不提出这个问题。我需要在PostgreSQL上运行此代码

我需要编写查询,以将用户输入用作创建表的参数。

例如,我们有一个这样的评分表

  |userid | movieid  |  rating

1 |  1    | 122      |  5.0

2 |  1    | 185      |  4.5

3 |  1    | 199      |  3.3 

4 |  2    | 110      |  5.0

5 |  2    | 199      |  4.0 

6 |  2    | 231      |  4.0

因此,如果我想创建一个表格来显示用户2的所有评分我可以使用下面的查询。

CREATE TABLE query0 AS
SELECT  ratings.userid, ratings.movieid,ratings.rating
FROM  ratings
WHERE ratings.userid = '2'

我的问题是:如何通过参数获取表,让用户输入userid来创建表

我尝试了类似的方法,但绝对不能正常工作

CREATE TABLE query0 AS
SELECT  ratings.userid, ratings.movieid,ratings.rating
FROM  ratings
WHERE ratings.userid = :userinput 

我需要在PostgreSQL上运行代码

sql postgresql postgresql-9.5
1个回答
0
投票

这可以通过PostgreSQL 9.5中的PL / PGSQL函数轻松完成:

select * from ratings;
 userid | movieid | rating 
--------+---------+--------
      1 |     122 |    5.0
      1 |     185 |    4.5
      1 |     199 |    3.3
      2 |     110 |    5.0
      2 |     199 |    4.0
      2 |     231 |    4.0
(6 rows)

create function create_table(p_userid int) 
returns boolean
language plpgsql
as
$$
begin
 execute format('CREATE TABLE query0 AS
                 SELECT  ratings.userid, ratings.movieid,ratings.rating
                 FROM  ratings
                 WHERE ratings.userid = %s', p_userid);
 return true;
end;
$$;
CREATE FUNCTION

select create_table(2);
 create_table 
--------------
 t
(1 row)

select * from query0;
 userid | movieid | rating 
--------+---------+--------
      2 |     110 |    5.0
      2 |     199 |    4.0
      2 |     231 |    4.0
(3 rows)

但是,如果您需要创建很多表,则不能对表名进行硬编码,而应将其作为参数或自动建立。

© www.soinside.com 2019 - 2024. All rights reserved.