我在存储过程中用了一个游标来执行如下操作:
DECLARE C1 CURSOR FOR select tabname FROM PUB.BML_TAB_TP_LIST WHERE TABTP IN ('M','D');
OPEN C1;
CLOOP:
LOOP
FETCH C1 INTO V_TABNAME;
if sqlcode=100 then leave CLOOP;
end if;
SET V_STMT='ALTER TABLE BML.'||TRIM(V_TABNAME)||' COMPRESS NO';
EXECUTE IMMEDIATE V_STMT;
SET V_TAB='BML.'||TRIM(V_TABNAME);
REORG TABLE V_TAB;
END LOOP CLOOP;
CLOSE C1;
编译的时候报错:
SQL0104N 在”’||TRIM(V_TABNAME);" 后面找到异常标记“REORG”。预计标记可能包括:“DROP”。SQLSTATE=42601.
请问怎么解决?
------解决方案--------------------------------------------------------
reorg 语句拼成字符串sql_str
call sysproc.admin_cmd(sql_str);
------解决方案--------------------------------------------------------
哦,运行reorg语句会自动提交,提交后游标就关闭了
在定义游标时加上 with hold子句