代码之家  ›  专栏  ›  技术社区  ›  Juulu

CTE会反映数据的变化吗?

  •  0
  • Juulu  · 技术社区  · 1 年前

    假设你在Oracle中创建了一个CTE,然后操纵它所提取的表中的一些数据。从CTE中选择值后,更改的值是否会反映在结果集中?我想一个更好的问题是CTE中的select语句何时运行?是立即还是从CTE中选择?这是我的意思的一个例子。

    WITH TEMP AS (
       select
          ,first_name
          ,last_name
          ,birthday
       from table
    )
    
    insert into table (first_name, last_name, birthday)
       values('Jess', 'Smith', '1999-01-01')
    
    select * from TEMP
    

    在这个例子中,CTE“TEMP”会有新插入的人吗?

    1 回复  |  直到 1 年前
        1
  •  2
  •   Thorsten Kettner    1 年前

    CTE是一个特殊的视图,始终是查询的一部分。语法将是

    WITH temp AS (SELECT first_name, last_name, birthday FROM t)
    SELECT * FROM temp;
    

    你不能写 WITH temp AS (select first_name, last_name, birthday FROM t) 不要添加类似的查询 SELECT * FROM temp .

    如果你想要一个单独的视图,那么你必须创建一个视图

    CREATE VIEW temp AS 
      SELECT first_name, last_name, birthday FROM t;
    

    相反。

    关于这个视图:是的,它将显示当前数据。如果在表中插入内容,视图将显示该数据。它总是最新的。

    演示: https://dbfiddle.uk/ucm-2FuT