帮忙解释一下这个游标定义的意思 CURSOR C1 IS SELECT 'ANALYZE TABLE ' ||u.table_name||' COMPUTE STATISTICS ' FROM User_Tables u WHERE u.table_name IN (……);
BEGIN OPEN c1; FETCH c1 INTO v_sql; WHILE c1%FOUND LOOP EXECUTE IMMEDIATE v_sql; FETCH c1 INTO v_sql; END LOOP; CLOSE c1;
---------------------------------------- 如果我把定义游标的那一句单独拿出来执行,即:select analyze table u.table_name compute statistics from user_tables u where u.table_name= 'TABLENAME'; 则会报错,它怎么可以在pl/sql中执行呢?貌似这样的写法也是不对的吧?
------解决方案-------------------- to forgetsam: 还是有点不明白。 看你的意思是说游标里已经拼好了,用到它时就直接是ANALYZE TABLE tb1 COMPUTE STATISTICS 就像最普通的: cursor cur_stu is select stuno,stuname from student order by stuno; 当用到cur_stu时实际就只剩下学号跟姓名了。 但我不明白的是像游标定义里的一般也都是可以直接先拿出来执行的啊,就像可以把 select stuno,stuname from student order by stuno这句拿出来一样。 ---对,你说了,直接,所以,你别给人家解析
还有select 'ABC' from dual 这个很好理解,但是现在这个游标里定义的并不是from dual表啊,如果它是select 'ANALYZE TABLE tb1 COMPUTE STATISTICS' from dual,那就不能实现分析多个表了
---别想偏了,什么叫多?你现在还没看懂一,
select 'ANALYZE TABLE tb1 COMPUTE STATISTICS' from dual 那就不能实现分析多个表了
--很好,你现在接近了 select 'ANALYZE TABLE tb1 COMPUTE STATISTICS' from user_tables 是不是能分析多次表了?
select 'ANALYZE TABLE '||table_name||' COMPUTE STATISTICS' from user_tables 知道什么意思了吧