使用 select 语句和序列创建视图
Posted
技术标签:
【中文标题】使用 select 语句和序列创建视图【英文标题】:Create a view with a select statement and a sequence 【发布时间】:2012-12-13 05:06:18 【问题描述】:我创建了一个带有 select 语句的视图,但我需要添加一个新字段 USER_ID,它显示了随每条记录递增的序列 (USER_ID_SEQ)。是否可以?我知道您可以使用 UNION 创建带有两个选择语句的视图,但我不确定如何将序列添加到视图中。 下面是我用于第一个 SELECT 语句的查询。
create or replace view FINAL_WEB_LOG
as
SELECT SESSION_DT,
C_IP,
CS_USER_AGENT,
tab_to_string(CAST(COLLECT(web_link) AS t_varchar2_tab)) WEBLINKS
FROM web_views_tab
GROUP BY C_IP, CS_USER_AGENT, SESSION_DT
【问题讨论】:
【参考方案1】:尝试在select
中使用嵌套查询:
create or replace view FINAL_WEB_LOG
as
SELECT (SELECT USER_ID_SEQ.NEXTVAL from dual) as USER_ID,
SESSION_DT,
C_IP,
CS_USER_AGENT,
tab_to_string(CAST(COLLECT(web_link) AS t_varchar2_tab)) WEBLINKS
FROM web_views_tab
GROUP BY C_IP, CS_USER_AGENT, SESSION_DT
这应该可以,但我相信USER_ID_SEQ.NEXTVAL
会在每次刷新视图时不断增加。
如果您只想关联一个 ID 字段,那么只需使用 ROWNUM
作为:
create or replace view FINAL_WEB_LOG
as
SELECT ROWNUM as USER_ID,
SESSION_DT,
C_IP,
CS_USER_AGENT,
tab_to_string(CAST(COLLECT(web_link) AS t_varchar2_tab)) WEBLINKS
FROM web_views_tab
GROUP BY C_IP, CS_USER_AGENT, SESSION_DT
【讨论】:
SQL Server 有一个 ROWCOUNT() 函数——我假设 oracle 有类似的东西。这对你有用吗? 谢谢,但显然序列号在这种陈述中是不合适的。用表格代替会容易得多,但 COLLECT 函数在涉及 VIEW 时可以正常工作。 @DaleM 你的意思是ROWNUM
?
Dale M - 我不确定这是否适用于 VIEW,但我会调查一下!谢谢。
如果您想对生成的“序列”编号的“顺序”进行更多控制,row_number()
可能是更好的选择。以上是关于使用 select 语句和序列创建视图的主要内容,如果未能解决你的问题,请参考以下文章
视图和使用 SELECT INTO 创建的表之间的主要区别?