首页 > 解决方案 > 用于创建多个更新和 SELECT 语句的脚本

问题描述

我们有 2 个表renewable_bkp 和 adhoc_bkp 以及 1 个 MV 作为 test_mv1。我基本上想创建一个脚本来更新一行renewal_bkp和adhoc_bkp,然后从上面的MV中选择数据。这需要以循环方式完成。下面是一个

例子:

++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++

update renewal_bkp set network_status='provisioned' where msisdn='3234561010240';
update adhoc_bkp set status='provisioned' where msisdn='3234561010240';
select * from test_mv1 where msisdn='3234561010240';
...
...
and so on

++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++

同样的语句需要使用不同的 msisdn 编号生成 1000 次。你能帮我创建一个脚本来做到这一点,然后手动写下每个语句。

谢谢,桑迪普

标签: postgresqlshell

解决方案


虽然完全不清楚您是如何访问s 的,但这里有一个紧凑的版本,它在Data-Modifying CTE 的msisdn帮助下以原子方式一次性完成所有三件事:

WITH
    ids (id) AS (
        VALUES ('3234561010240'), ('...'), ...
    ),
    renewals AS (
        UPDATE renewal_bkp SET network_status = 'provisioned'
        WHERE msisdn IN (SELECT id FROM ids)
    ),
    adhoc AS (
        UPDATE adhoc_bkp SET status = 'provisioned'
        WHERE msisdn IN (SELECT id FROM ids)
    )
SELECT *
FROM test_mv1
WHERE msisdn IN (SELECT id FROM ids)

除了该VALUES子句,您还可以SELECT从专用表中放置一个常规,如果您每年执行此操作的频率超过一次或两次,这将是有意义的。


推荐阅读