【问题标题】:Use LOOP for inserts?使用 LOOP 进行插入?
【发布时间】:2016-04-05 01:44:52
【问题描述】:

我使用的是 PostgreSQL 9.4.5,我是 PL/pgSQL 的新手。
我需要在users 表中为每个用户插入一条消息记录。

类似这样的:

  user_id = SELECT id from users;

  FOR i in user_id
    INSERT INTO "messages" ("sender_id", "receiver_id", "content", 
    "hashed_id", "created_at", "updated_at") VALUES (1,i,
    "Message text here",(SELECT concat(md5(random()::text),
    md5(random()::text))),'2016-04-04 20:30:32','2016-04-04 20:30:32')';
  END

如何做到这一点?

【问题讨论】:

  • PL/SQL 是 Oracle 数据库中使用的编程语言。 Postgres 有 PL/pgSQL。

标签: sql postgresql plpgsql postgresql-9.4


【解决方案1】:

您可以使用insert . . . select:

INSERT INTO "messages" ("sender_id", "receiver_id", "content",  "hashed_id", "created_at", "updated_at") 
    SELECT 1, id, 'Message text here',
           concat(md5(random()::text), md5(random()::text)),
           '2016-04-04 20:30:32','2016-04-04 20:30:32'
    FROM users;

注意:您不需要 concat() 的子选择。

【讨论】:

  • 谢谢戈登!这对我帮助很大!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-17
  • 1970-01-01
  • 2016-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-15
相关资源
最近更新 更多