日期:2014-05-16  浏览次数:20983 次

表空间扩展问题
现在不想写JAVA程序 使用了oracle的job方式 
所以想写个存储过程 让job执行的时候去判断一下容量多大了 足够大了就创建个新的数据文件

create or replace procedure PRC_CREATE_TABLESPACES is
  MAX_SPACE_ID NUMBER := 0;
  resultstr number := 0;
  STR_SQL VARCHAR2(2000);
  space_name VARCHAR2(1000);
begin

  select t.used_percent
  into resultstr
  from dba_tablespace_usage_metrics t
  where t.tablespace_name = 'wlw116';

  IF resultstr > 90 then
  select max(d.FILE_ID)
  into MAX_SPACE_ID
  from dba_data_files d
  where d.TABLESPACE_NAME = 'wlw116';
  MAX_SPACE_ID := MAX_SPACE_ID + 1;
  space_name := 'E:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\wlw116_' ||
  MAX_SPACE_ID || '.DBF' 
  STR_SQL := 'ALTER TABLESPACE wlw116 ADD DATAFILE ' || space_name ||
  'SIZE 20480M AUTOEXTEND OFF; ';
  dbms_output.put_line('sql======================' || STR_SQL);
  --EXECUTE IMMEDIATE STR_SQL; 
  end if;
end PRC_CREATE_TABLESPACES;

报错:
PROCEDURE TESTUSER.PRC_CREATE_TABLESPACES 编译错误

错误:PLS-00103: 出现符号 "STR_SQL"在需要下列之一时:
  * & = - + ; < / > at in
  is mod remainder not rem <an exponent (**)> <> or != or ~= >=
  <= <> and or like LIKE2_ LIKE4_ LIKEC_ between || member
  SUBMULTISET_
  符号 ";" 被替换为 "STR_SQL" 后继续。
行:21
文本:STR_SQL := 'ALTER TABLESPACE wlw116 ADD DATAFILE ' || space_name ||



------解决方案--------------------
问题出在:
STR_SQL := 'ALTER TABLESPACE wlw116 ADD DATAFILE ' || space_name ||
'SIZE 20480M AUTOEXTEND OFF; ';
请把OFF后面的分号去掉:
SQL code
STR_SQL := 'ALTER TABLESPACE wlw116 ADD DATAFILE ' || space_name ||
  'SIZE 20480M AUTOEXTEND OFF';

------解决方案--------------------
实测 :
space_name := 'E:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\wlw116_' ||
MAX_SPACE_ID || '.DBF' 

该语句后面少个分号。