我有疑问
INSERT INTO MYTABLE(NAME,NUM)
SELECT NAME,NUM
FROM DATA
INNER JOIN T3
ON MYTABLE.NUM = T3.NUM
ORDER BY MYTABLE.NUM
OFFSET 0 ROWS
FETCH NEXT 5 ROWS ONLY;运行此操作将导致以下错误:
SQL错误: ORA-00918:列定义不明确
但是,当我在没有OFFSET部分的情况下运行上面的查询时,它可以工作。
FETCH与INSERT SELECT不兼容吗?
发布于 2021-07-19 21:15:00
是的,FETCH和INSERT...SELECT兼容。我把这作为回答而不是评论,因为这是你发布的问题的答案。
ORA-00918与FETCH子句一起使用的最常见原因是,选择列表中的任何变量都不可能具有相同的名称。例如,这个SELECT是合法的:
SELECT object_type, object_name, object_name
FROM dba_objects
WHERE OBJECT_NAME LIKE 'USER%'
ORDER BY 1, 2。。而这个不是..。
SELECT object_type, object_name, object_name
FROM dba_objects
WHERE OBJECT_NAME LIKE 'USER%'
ORDER BY 1, 2
OFFSET 0 ROWS
FETCH NEXT 5 ROWS ONLY;检查您的查询,并确保所有列名/别名都是唯一的。
更新
回顾您的SQL,这是一个园艺品种ORA-00918。这与您的INSERT或FETCH无关。您正在连接两个具有相同列的表,并且没有指定要选择哪个表并按哪个表进行排序。将您的声明更改为:
insert into t2(id, val)
select t.id, t.val
from t
inner join t3
on t.val=t3.val
order by t.id desc
offset 3 rows
fetch first 5 rows onlyhttps://stackoverflow.com/questions/68446930
复制相似问题