ORA-00979错误排查:INSERT子查询报错但单独SELECT正常
ORA-00979错误排查与修复
错误原因
你的PL/SQL块中,INSERT语句存在语法错误:INSERT INTO TMP_MY_CHART1 ( 后面多了一个左括号。这个多余的括号会让Oracle错误地将后续的SELECT子句解析为列名列表的一部分,而非插入的数据源,从而触发非GROUP BY表达式的错误(解析逻辑混乱导致对GROUP BY子句的误判)。单独执行SELECT语句时没有这个语法错误,所以能正常运行。
修正后的PL/SQL代码
begin DELETE FROM TMP_MY_CHART1; INSERT INTO TMP_MY_CHART1 SELECT to_number (t.yyyy) as annee ,t.total FROM ( SELECT to_char(fi.RSX_DATDERNMAJ, 'YYYY') as yyyy , COUNT(1) as total FROM FI_RESEAU fi WHERE fi.RSX_TYPLIC = 'TMP' GROUP BY to_char(fi.RSX_DATDERNMAJ, 'YYYY') ) t; end; /
补充说明
当使用INSERT ... SELECT语法时,若SELECT结果列顺序和目标表TMP_MY_CHART1的annee、total完全匹配,可直接省略列列表的括号;如果要指定列,正确写法是INSERT INTO TMP_MY_CHART1(annee, total) SELECT ...,注意括号内是列名,后面直接跟SELECT子句,不要多额外的括号。
内容的提问来源于stack exchange,提问作者Tom Ang
相关产品推荐
相关产品推荐

