declare
type t_table is table of varchar2(50);
v_tabel t_table;
cursor c is
select table_name from dic t where table_name LIKE 'AT%';
V_SQL VARCHAR(200);
maxginteger;
begin
open c;
FETCH c BULK COLLECT
INTO v_tabel;
FOR i IN v_tabel.FIRST .. v_tabel.LAST LOOP
DBMS_OUTPUT.PUT_LINE(v_tabel(i));
V_SQL := 'select count(*) from ' || v_tabel(i);
EXECUTE IMMEDIATE V_SQL into maxg;
DBMS_OUTPUT.PUT_LINE(maxg);
END LOOP;
CLOSE c;
END;
执行到execute immediate 提示视图不存在。。。 游标能取到值。。。
那你就执行到这一步,看下v_tabel(i)是什么表,查看这个表是不是存在。代码上没什么问题
不过我觉得最好对去除的结果集做个判断是否有值,因为如果v_tabel是空的,那执行就会报错。
DECLARE
TYPE t_table IS TABLE OF VARCHAR2(50);
v_tabel t_table;
CURSOR c IS
SELECT table_name FROM dict WHERE table_name LIKE 'AT%';
v_sql VARCHAR(200);
maxgINTEGER;
BEGIN
OPEN c;
FETCH c BULK COLLECT
INTO v_tabel;
IF v_tabel IS NOT NULL AND
v_tabel.count > 0
THEN
FOR i IN v_tabel.first .. v_tabel.last
LOOP
dbms_output.put_line(v_tabel(i));
v_sql := 'select count(*) from ' || v_tabel(i);
EXECUTE IMMEDIATE v_sql
INTO maxg;
dbms_output.put_line(maxg);
END LOOP;
END IF;
CLOSE c;
END