首页 > 解决方案 > ORA-00918: 列定义不明确 - INSERT INTO 表

问题描述

请帮我解决这个错误,我花了几个小时在这上面。

也许问题出在突出显示的那些字段上(在图像上),因为当我删除它时,代码就可以工作了。

我检查好列名以确保没有输入错误。

在此处输入图像描述

这是桌子设计:

在此处输入图像描述

这是我的命令文本:

INSERT INTO PRODUCTS(
    idz,category_id,brand_id,
    namez,
    computed_name,
    unit_price,discount,
    url_key,
    short_description,
    
    rate_avg,
    rate_total,
    rate_avg_recent,
    rate_total_recent,
    rate_total_counting,
    rate_avg_counting,
    views,
    views_recent,
    views_counting,
    purchases,
    purchases_recent,
    purchases_counting,
    search_recent, 
    search_counting
    
    )
    
WITH recs AS (  
            
    SELECT 52333193, 1811, 111461, 
    'Tai nghe bluetooth không dây F9 True wireless Dock Sạc có Led Báo Pin Kép', 
    'Tai nghe bluetooth không dây F9 True wireless Dock Sạc có Led Báo Pin Kép',
    169000,581000,
    'tai-nghe-bluetooth-khong-day-f9-true-wireless-cam-ung-van-tay-dock-sac-co-led-bao-pin-kep-p52333193/52333193',
    '\n \n\n\n\n\n\n \nSử dụng Chip Bluetooth 5.0 mạnh mẽ',
    
    0,0,0,0,0,0,0,0,0,0,0,0,0,0    -- I think the problem is here, It work when I remove this line (and 
                                   -- columns defined above )

FROM   dual   
)
SELECT * FROM recs

谢谢各位!!

标签: oracleoracle-sqldeveloper

解决方案


我认为问题在于 Oracle 根据其值为子查询中的每一列设置了默认别名。由于您有多个具有相同值的列,因此它们会获得相同的别名,这会导致SELECT *生成错误。

这会产生相同的错误:

with recs as (select 1,2,3,0,0,0 from dual) select * from recs;

但是为具有相同值的列提供明确的唯一别名是可行的:

with recs as (select 1,2,3,0 as a, 0 as b, 0 as c from dual) select * from recs

推荐阅读