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 by和rownum存在本身就很危险的事实.绝对不能保证您将获得所需的数据.如果要从有序查询中获取第一行,则必须使用子查询:
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)