嵌套PL / SQL查询中的SQL缺少右括号

时间:2016-02-27 05:30:25

标签: sql oracle

任何人都可以帮助我。我试图从一个表中取出日期并将其插入到另一个表中,然后根据日期,如果它是周末或工作日也插入该字符串。我已经能够单独做到这一点,所以试图一举一动地把我的表达结合起来,现在我得到了臭名昭着的“缺少右括号。”

这是我的块:

INSERT INTO time (sale_day, date_type) 
  SELECT sd, dt 
    FROM (
     SELECT sale_date AS sd,(
        case
          when dy IS null or dy='' then 'Date Missing'
          when dy='SAT' then 'Weekend'
          when dy='SUN' then 'Weekend'
          else 'Weekday' END) as date_type
            FROM (SELECT TO_CHAR((sale_date), 'DY') AS dy FROM sales) AS dt
      FROM sales
    );

提前致谢!

1 个答案:

答案 0 :(得分:1)

您的查询过于复杂。不需要嵌套三个选择级别。

INSERT INTO time (sale_day, date_type) 
SELECT sale_date AS sd,
       case 
         when sale_date IS null then 'Date Missing'
         when TO_CHAR(sale_date, 'DY') in ('SAT', 'SUN') then 'Weekend'
         else 'Weekday' 
       END as date_type
FROM sales;

不相关,但是:为什么要将这些数据复制到新表中?查询非常简单,如果您刚刚为该信息创建了一个视图,那么它将更有效:

create or replace view time
as
SELECT sale_date AS sd,
       case 
         when sale_date IS null then 'Date Missing'
         when TO_CHAR(sale_date, 'DY') in ('SAT', 'SUN') then 'Weekend'
         else 'Weekday' 
       END as date_type
FROM sales;

这样time中的信息始终是最新的,无需复制数据。