PLS-00404:光标列表,以避免重复列请求别名



我有一个查询,这个查询是在两个表之间连接的,这些表有很多列,有些列有相同的名称,当我在SQL窗口中单独运行查询时,工作正常,没有任何错误,但当我把它放在游标中时,我得到了错误:PLS-00404:游标列表,以避免重复列请求的别名

我知道我应该给这些列赋予alise,但为什么它在SQL窗口中有效,而在光标中不起作用,除了赋予alise之外,还有什么方法可以避免这个错误吗。

我的脚本是使用utl_file:将数据导出到excel

declare
file_handle UTL_FILE.file_type;
vdir varchar2(255);
vfile varchar2(255);
V_CLOB CLOB;
begin

vdir  := 'TEST1';
vfile := '1.xls';
file_handle := utl_file.fopen(vdir, vfile,'W');
utl_file.put_line(file_handle, 'xxxx xxxx' || chr(9) || '');
for rr in (
select t.*, t.Rowid  , VAC.* 
FROM TH1 T, 
(SELECT V.* FROM vac_history v WHERE V.ID IN ( SELECT MAX(VH.ID) FROM VAC_HISTORY VH GROUP BY VH.TH_ID1))  VAC 
WHERE t.id1 = VACH.th_id1(+) 
ORDER BY t.Name 
)loop
begin 
utl_file.put_line(file_handle,  rr.xxxx|| chr(9) || '');
exception 
when others then 
dbms_output.put_line('Error: ' ||SQLERRM(sqlcode)||
'at line: ' ||  $$plsql_line);
end;
end loop;
utl_file.fclose(file_handle);
end;

查询:

select t.*, t.Rowid, VAC.* 

FROM TH1 T, 
(SELECT V.* FROM vac_history v WHERE V.ID IN ( SELECT MAX(VH.ID) FROM VAC_HISTORY VH GROUP BY VH.TH_ID1))  VAC 
WHERE t.id1 = VACH.th_id1(+) 

ORDER BY t.Name 

这是因为当你有一个像这样使用的游标时,在游标r中使用rr.x这样的语法来引用列。因此,如果没有别名,pl/sql就无法判断你引用的是哪一列。当你在sqlplus或sqldev这样的任何工具中运行sql时,该工具将检索类似数组结构中的行,并按该结构中的顺序打印它们。某些工具会在列名后添加后缀。

最新更新