sql—如何使用用户输入作为参数来编写查询,以便在postgresql中创建表?

pkbketx9  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(235)

我认为这应该是一个非常简单的问题,但我找不到任何信息,所以我不得不问这个问题。我需要在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上运行代码

bbuxkriu

bbuxkriu1#

这可以通过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)

但是,如果需要创建大量表,则表名不能硬编码,应该是参数或自动生成。

相关问题