【发布时间】:2014-06-23 08:16:26
【问题描述】:
我已经阅读了这个论坛和其他论坛中关于这个主题的绝大多数主题,但我仍然找不到我的问题所在。这是我所拥有的:
drop type RecordCount_tab;
drop type RecordCount_obj;
create type RecordCount_obj is object(Symbol varchar2(6), TimeFrame char(3), TotalCount number, minDate date, maxDate date);
/
show errors;
create type RecordCount_tab is table of RecordCount_obj;
/
show errors;
create or replace function RecordCount return RecordCount_tab is
l_RecordCount_tab RecordCount_tab := RecordCount_tab();
tName varchar2(64); vMinDate date; vMaxDate date; vCount number;
n integer :=0;
BEGIN
for r in (select table_name, substr(table_name,1,instr(table_name,'_')-1) as "BaseTable", substr(table_name,instr(table_name,'_')+1,length(table_name)-instr(table_name,'_')) as "TimeFrame" from user_tables) loop
dbms_output.put_line('select min(NewDateTime), max(NewDateTime), count(*) from '||r.table_name);
execute immediate 'select min(NewDateTime), max(NewDateTime), count(*) from '||r.table_name into vMinDate, vMaxDate, vCount;
n:=n+1;
l_RecordCount_tab(n) := (r.BaseTable, r.TimeFrame, vCount, vMinDate, vMaxDate);
end loop;
return l_RecordCount_tab;
END;
/
show errors;
我一直在努力
PLS-00302:必须声明组件“BASETABLE”
我不明白为什么会这样,因为查询从 sqlplus 运行得非常好。我也尝试删除别名,但无济于事。
我错过了什么?
【问题讨论】:
-
删除
"BaseTable"周围的双引号,使用它们使名称区分大小写(或使用r."BaseTable")。有关标识符的规则,请参阅手册:docs.oracle.com/cd/E11882_01/server.112/e41084/…
标签: arrays oracle plsql record