下面是我的程序: -- After successfully insert the data into T_A_ tables, the temporary T_U_ tables should be truncated. v_cur := DBMS_SQL.OPEN_CURSOR; FOR V_TABLE IN C_TU_TABLE LOOP sql_stmt := 'TRUNCATE TABLE ' || V_TABLE.TABLE_NAME; DBMS_SQL.PARSE(v_cur,sql_stmt,DBMS_SQL.NATIVE); v_int := DBMS_SQL.EXECUTE(v_cur); COMMIT; END LOOP;
也可以把各个表空间的pctincrease设置成非零,让oracle自动收集碎片。
在存储过程当中不可执行 truncate table 语句 ,如何解决?
说具体点。
execute immediate;
v_cur := DBMS_SQL.OPEN_CURSOR; FOR V_TABLE IN C_TU_TABLE LOOP
sql_stmt := 'TRUNCATE TABLE ' || V_TABLE.TABLE_NAME;
DBMS_SQL.PARSE(v_cur,sql_stmt,DBMS_SQL.NATIVE);
v_int := DBMS_SQL.EXECUTE(v_cur);
COMMIT;
END LOOP;
DBMS_SQL.CLOSE_CURSOR(v_cur);
execute immediate v_sql ;搞定,多谢各位!
我们系统中有大量的批处理过程,都是脚本文件,用操作系统任务来调度(比如UNIX下的CRON),用SQLPLUS USER/PASSWORD @MYJOB的方式定时执行各种各样的脚本。那样建表、建索引等DDL操作都可以放在PL/SQL之外运行。
说实话,只要业务逻辑合理,没有什么是不能完成的。