当前位置: 首页 > 面试题库 >

在Oracle中创建CTE

仲孙俊贤
2023-03-14
问题内容

我想创建一个CTEOracle不从现有的表中选择,而是具有插入到它的数据。当前,我正在创建一个表,然后在query完成后将其删除。有没有一种方法可以CTE有效地创建相同的对象?这是我当前的代码:

create table RTG_YEARS
(YR date);

insert into RTG_YEARS values (to_date('2013-01-01', 'yyyy-mm-dd'));
insert into RTG_YEARS values (to_date('2013-12-31', 'yyyy-mm-dd'));
insert into RTG_YEARS values (to_date('2014-01-01', 'yyyy-mm-dd'));
insert into RTG_YEARS values (to_date('2014-12-31', 'yyyy-mm-dd'));
insert into RTG_YEARS values (to_date('2015-01-01', 'yyyy-mm-dd'));
insert into RTG_YEARS values (to_date('2015-12-31', 'yyyy-mm-dd'));

问题答案:

您可以通过从对偶中选择日期值并将它们结合在一起来创建公用表表达式(CTE,子查询分解等)。

with RTG_YEARS (YR) as (
  select to_date('2013-01-01', 'yyyy-mm-dd') from dual
  union all select to_date('2013-12-31', 'yyyy-mm-dd') from dual
  union all select to_date('2014-01-01', 'yyyy-mm-dd') from dual
  union all select to_date('2014-12-31', 'yyyy-mm-dd') from dual
  union all select to_date('2015-01-01', 'yyyy-mm-dd') from dual
  union all select to_date('2015-12-31', 'yyyy-mm-dd') from dual
)
select * from RTG_YEARS;

YR       
----------
2013-01-01
2013-12-31
2014-01-01
2014-12-31
2015-01-01
2015-12-31

与CTE无关,但是您可以通过使用日期文字来减少输入:

with RTG_YEARS (YR) as (
  select date '2013-01-01' from dual
  union all select date '2013-12-31' from dual
  union all select date '2014-01-01' from dual
  union all select date '2014-12-31' from dual
  union all select date '2015-01-01' from dual
  union all select date '2015-12-31' from dual
)
select * from RTG_YEARS;


 类似资料:
  • 为什么它不起作用?我在甲骨文中运行这个。我想创建这样的装饰: 这是错误: PLS-00103:在预期以下情况之一时遇到符号“DECLARE”:begin函数杂注过程子类型当前游标删除存在于外部语言之前符号“begin”被替换为“DECLATE”以继续。7/5 PLS-00103:在预期以下情况之一时遇到符号“文件结束”:(开始情况声明结束异常退出,如果循环mod null pragma引发返回选择

  • 问题内容: 我正在使用哪个有数据库 我有一个叫表的窗口 字段是和。 当前,数据类型为和是 我要输入带 ,并用 。 当我输入在ADempiere并保存数据,究竟会展示的是与 (不带前导零) 我已经尝试过放置函数,但是仍然失败。 如何在Adempiere界面和数据库中都输入01? 任何建议将不胜感激:) 问题答案: 一个 NUMBER 不能有前导零,一个 字符串 即可。 如果要在数据库表中 存储 前导

  • 请帮助我解决以下问题 我需要创建一个名为的触发器,每当“contact”表更新时就会触发该触发器。在更新联系人详细信息之后,这个触发器将把org_name和action插入到表中。受影响日志表中的操作名称为。 id整数org_name varchar2(255)street_address1 varchar2(255)street_address2 varchar2(255)城市varchar2(

  • 主要内容:Oracle CREATE TABLE语句简介,Oracle CREATE TABLE示例在本教程中,您将学习如何使用Oracle 语句在Oracle数据库中创建一个新表。 Oracle CREATE TABLE语句简介 要在Oracle数据库中创建一个新表,可以使用语句。下面说明了语句的基本语法: 在上面这个语法中, 首先,在子句中,指定新表所属的表名和模式名称。 其次,在圆括号内列出所有列。 如果一个表有多个列,则需要用逗号分隔每个列的定义。列定义包括列名,后跟它的数据类型,例如,

  • 问题内容: 我正在尝试创建一个将在每个圣诞节执行特定程序的工作。这是我走了多远: 但是我似乎找不到一种简单的方法来将时间间隔更改为每年一次,并且总体上对如何解决这个问题感到很困惑,任何帮助都非常感谢 问题答案: 你想要类似的东西 该作业将在2012年圣诞节的午夜首次运行,此后每12个月运行一次。

  • 我想在oracle 12c中创建一个用户,但我遇到了一个问题。输入用户名和psw后,将显示以下警告:ORA-65096:无效的公用用户名或角色名