我试图插入一个表,它为一列使用一个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 );
它抛出ORA-00907缺少右括号.如果我从中删除ORDER BY,它会按预期工作.但我需要订购它.请澄清.
提前致谢.
解决方法
当前的答案都忽略了在同一查询中使用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 ;
您也可以使用像rank
这样的函数来按照您想要的方法对数据进行排序,但是如果您有两个created_on日期相同,则最终会得到2个rnk = 1的值.
insert into my_tbl ( col1,'more data' from ( select data,rank() over ( order by created_on desc ) as rnk from fir_tabl where id = 1) where rnk = 1 ;