ORA-00907缺少右括号问题 - 通过内部插入查询选择顺序

Vaa*_*ndu 13 sql oracle ora-00907

我试图插入表,它为一列使用一个select语句.以下是我的查询的说明.

INSERT INTO MY_TBL (MY_COL1, MY_COL2)
VALUES (
(SELECT DATA FROM FIR_TABL WHERE ID = 1 AND ROWNUM = 1 ORDER BY CREATED_ON DESC),
1 
);
Run Code Online (Sandbox Code Playgroud)

它抛出ORA-00907 Missing right Parenthesis.如果我ORDER BY从中删除它,它按预期工作.但我需要订购它.请澄清.

提前致谢.

Ben*_*Ben 22

目前的答案都忽略了在同一查询中使用order byrownum存在本身就很危险的事实.绝对不能保证您将获得所需的数据.如果要从有序查询中获取第一行,则必须使用子查询:

insert into my_tbl ( col1, col2 )
select data, 'more data'
  from ( select data
           from fir_tabl
          where id = 1
          order by created_on desc )
 where rownum = 1
       ;
Run Code Online (Sandbox Code Playgroud)

您也可以使用类似于rank按所需方法排序数据的函数,但如果您有两个created_on相同的日期,则最终会得到2个值rnk = 1.

insert into my_tbl ( col1, col2 )
select data, 'more data'
  from ( select data
              , rank() over ( order by created_on desc ) as rnk
           from fir_tabl
          where id = 1)
 where rnk = 1
       ;
Run Code Online (Sandbox Code Playgroud)