0

我刚刚学习 CTE,我想在 WITH 子句中创建动态查询。

以下是我编写的代码。

WITH name1 AS (
    SELECT schema_name as my_schema
    FROM public.schema_table
), name2 AS (
    SELECT num_rows as my_row
    FROM my_schema.row_table
)
SELECT my_row
from name2;

从 WITH 中的第一个查询给出一个数据库中存在的模式数量,并且该模式名称返回

SELECT schema_name as my_schema 
FROM public.schema_table

我想在第二个查询中使用,因为我将它保存到 my_schema。

但是当我运行这个查询时,它会给我错误,比如 my_schema 不存在,因为我想使用 my_schema 包含的值。

你怎么能那样做?

4

1 回答 1

3

首先,您似乎没有name1在查询中使用过任何地方,所以我怀疑您可能没有完全理解WITH

但是,看起来您可能有多个表,row_table每个表都存在于它自己的架构中,并且想要创建一个查询,让您选择从哪个架构中获取。

FROM my_schema.row_table
     ^^^^^^^^^

my_schema不是变量,它是模式的名称。为了做你想做的事,你将不得不使用 pg_catalog 表来找到oid你需要的模式中的关系并以这种方式查找信息。

另一种解决方案可能是操纵搜索路径来进行出价:

BEGIN;
    SET LOCAL SCHEMA 'my_schema';
    SELECT num_rows FROM row_table;   -- will use my_schema.
COMMIT;
于 2013-04-05T12:37:08.917 回答