帮忙解释一下这个游标定义的意思
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中执行呢?貌似这样的写法也是不对的吧?
[解决办法]
你拿出来的引号呢? 被你“吃”了么?
这个过程的目的是,拼接 sql,然后动态执行 EXECUTE IMMEDIATE v_sql;
仔细想想。
[解决办法]
ANALYZE TABLE table_name COMPUTE STATISTICS;--这句话是手动分析表,获得分析信息,但是数据库中有很多个表,如果手动写就得为每个表都写一个sql,--而每个sql只有表名不同,因此为了一次性获得语句,可以利用user_tables 这个视图中的 table_name字段--把sql都拼出来,这就是游标的作用--然后在下面动态执行拼出来的sql。--你拿出来的sql 不对select 'analyze table '|| u.table_name ||' compute statistics' from user_tables u where u.table_name= 'TABLENAME'
[解决办法]
把IS后面的select语句整个拿出来(包括引号),那该语句是可执行的。
游标的作用是为了访问查询结果集中的多条记录。
[解决办法]