我认为这应该是一个非常简单的问题,但是我无法在线找到任何信息,因此我不得不提出这个问题。我需要在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上运行代码
这可以通过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)
但是,如果您需要创建很多表,则不能对表名进行硬编码,而应将其作为参数或自动建立。