Oracle错误ORA-00922和ORA-06512

Oracle错误ORA-00922和ORA-06512,oracle,plsql,Oracle,Plsql,我试图运行以下脚本: SET serveroutput ON DECLARE v_nbr_part NUMBER := 2; v_nbr_subpart NUMBER := 2; v_table_name VARCHAR2(100) := 'XPTO'; v_table_shortname VARCHAR2(100) := 'XPTO'; v_part_first NUMBER; v_part_last

我试图运行以下脚本:

SET serveroutput ON
DECLARE

  v_nbr_part        NUMBER := 2;
  v_nbr_subpart     NUMBER := 2;

  v_table_name      VARCHAR2(100) := 'XPTO';
  v_table_shortname     VARCHAR2(100) := 'XPTO';

  v_part_first      NUMBER;
  v_part_last       NUMBER;
  v_subpart_first   NUMBER;
  v_subpart_last    NUMBER;
  v_sql             CLOB := '';
  v_sql_part        CLOB := '';
  v_sql_subpart     CLOB := '';
  v_part_dynam      CLOB := '';
  v_part_keys       CLOB := '';

BEGIN          

  IF v_nbr_part > 0 THEN

      IF v_nbr_subpart > 0 THEN
        v_subpart_first := 0;
        v_subpart_last := v_nbr_subpart-1;    
        v_part_dynam:='';
        FOR i IN v_subpart_first .. v_subpart_last
        LOOP
           v_part_dynam := v_part_dynam || ' SUBPARTITION SP' || i ||' VALUES ('||i||')';
           IF i <> v_subpart_last THEN
              v_part_dynam := v_part_dynam || ',';
           END IF;      
         END LOOP;
         v_sql_subpart:= where_to_save('LDR_SUBTYPE',  v_part_dynam);
         v_part_keys:= ' , "LDR_SUBTYPE" NUMBER NOT NULL ENABLE ';
       END IF;

       v_part_first := 1;
       v_part_last := v_nbr_part;    

       v_sql_part:= to_clob(' PARTITION BY RANGE (PART_KEY) interval(numtodsinterval(1,''day'')) ')|| v_sql_subpart || 
            to_clob(' ( partition EMPTY values less than (to_date(''01-01-2013'',''DD-MM-YYYY'') ) ) ');
       v_part_keys:= ', "PART_KEY" TIMESTAMP (6) NOT NULL ENABLE ' || v_part_keys;
  END IF;

  v_sql:=to_clob(
'CREATE OR REPLACE TABLE "'||v_table_name||'" (
"SEQUENCENUMBER" NUMBER NOT NULL ENABLE,
"LDRID" VARCHAR2(100),
"LDRTYPE" VARCHAR2(50),
"LDR_SUBTYPE" VARCHAR2(50),
"CREATIONTIMESTAMP" TIMESTAMP (6),
"CORRELATIONID" VARCHAR2(4000),
"PARENTLDRID" VARCHAR2(100),
"NUMBEROFCHILDREN" NUMBER,
"PROTOCOLSESSIONID" VARCHAR2(100),
"ACTIVITYID" VARCHAR2(100),
"ACTIVITYINITIALTIMESTAMP" TIMESTAMP (6),
"ACTIVITYELAPSEDTIME" NUMBER,
"CANCELED" CHAR(1),
"REPLACED" CHAR(1),
"INVALIDATIONTIMESTAMP" TIMESTAMP (6),
"INVALIDATEDBYLDRID" VARCHAR2(100),
"INVALIDATESLDRID" VARCHAR2(100),
"OPERATIONID" VARCHAR2(256),
"ACCOUNTID" VARCHAR2(100),
"TOPLEVELID" VARCHAR2(100),
"RESULTCODE" VARCHAR2(100),
"VERSION" NUMBER,
"LDROBJECT" BLOB,
"OBJMETADATA" BLOB,
"OBJKEY" BLOB,
"OBJKEYHASH" VARCHAR2(200) ') ||
v_part_keys ||
to_clob('
)
LOB (OBJKEY) STORE AS SECUREFILE
LOB (LDROBJECT) STORE AS SECUREFILE 
LOB (OBJMETADATA) STORE AS SECUREFILE
') ||
v_sql_part || to_clob(',TABLESPACE OCS LOGGING  NOCOMPRESS  NOCACHE NOPARALLEL');

dbms_output.put_line(dbms_lob.substr(v_sql,4000,1)); //this is line 84!!!!!!!!!
EXECUTE IMMEDIATE v_sql;


EXCEPTION
 WHEN OTHERS THEN
    DBMS_OUTPUT.Put_Line(DBMS_UTILITY.Format_Error_Backtrace);
    DBMS_OUTPUT.Put_Line(SQLERRM);
END;
/

CREATE OR REPLACE FUNCTION where_to_save(LDR_SUBTYPE VARCHAR2, v_part_dynam OUT CLOB)
RETURN CLOB
IS
BEGIN 
  CASE
      WHEN LDR_SUBTYPE = ('IEC') THEN v_part_dynam := v_part_dynam || 'SUBPARTITION SP0 VALUES (IEC)';

      ELSE  v_part_dynam := v_part_dynam || 'SUBPARTITION SP1 VALUES (OTHER)';
  END CASE;

  RETURN v_part_dynam;   

END where_to_save;
打开服务器输出
声明
v_nbr_零件号:=2;
v_nbr_子部分编号:=2;
v_table_name VARCHAR2(100):=“XPTO”;
v_table_shortname VARCHAR2(100):=“XPTO”;
v_零件号;
v_零件的最后编号;
v_子部分_第一个编号;
v_子部分_最后一个编号;
v_sql CLOB:='';
v_sql_部件CLOB:='';
v_sql_子部分CLOB:='';
v_零件动力CLOB:='';
v_部件_键CLOB:='';
开始
如果v_nbr_零件>0,则
如果v_nbr_子部分>0,则
v_子部分_第一:=0;
v_子部分_last:=v_nbr_子部分-1;
v_零件_发电机:='';
因为我先在v_子部分_中。。最后
环
v|u part|u dynam:=v|u part|u dynam | | | | | | | | | | | | | | | |值(“| | i |”);
如果我最后一次
v|u part|u dynam:=v|u part|u dynam,';
如果结束;
端环;
v_sql_子部分:=其中保存(“LDR_子类型”,v_部分);
v_部分_键:=',“LDR_子类型”编号不为空启用';
如果结束;
v_第一部分:=1;
v_part_last:=v_nbr_part;
v_sql_part:=to_clob('按范围划分(部分键)间隔(numtodsinterval(1,'天)'))|v_sql_子部分|
到_clob('(分区空值小于(到_日期('01-01-2013','DD-MM-YYYY'))));
v|u部分|u键:=',“部分|u键”时间戳(6)不为空启用“| v|u部分|键;
如果结束;
v_sql:=to_clob(
“创建或替换表格”|| v|u表格|名称|”(
“SEQUENCENUMBER”编号不为空启用,
“LDRID”VARCHAR2(100),
“LDRTYPE”VARCHAR2(50),
“LDR_亚型”VARCHAR2(50),
“CREATIONTIMESTAMP”时间戳(6),
“CORRELATIONID”VARCHAR2(4000),
“PARENTLDRID”VARCHAR2(100),
“NUMBEROFCHILDREN”编号,
“PROTOCOLSESSIONID”VARCHAR2(100),
“活动ID”VARCHAR2(100),
“活动初始时间戳”时间戳(6),
“ACTIVITYELAPSEDTIME”编号,
“已取消”字符(1),
“替换”字符(1),
“失效时间戳”时间戳(6),
“无效的Byldrid”VARCHAR2(100),
“失效”VARCHAR2(100),
“操作ID”VARCHAR2(256),
“账户ID”VARCHAR2(100),
“TOPLEVELID”VARCHAR2(100),
“结果代码”VARCHAR2(100),
“版本”编号,
“LDROBJECT”BLOB,
“OBJMETADATA”BLOB,
“OBJKEY”滴,
“OBJKEYHASH”VARCHAR2(200)||
v_零件键||
完蛋
)
LOB(OBJKEY)存储为SECUREFILE
LOB(LDROBJECT)存储为SECUREFILE
LOB(OBJMETADATA)存储为SECUREFILE
') ||
v|u sql|u part|to|u clob(',表空间OCS日志记录NOCOMPRESS NOCACHE NOPARALLEL');
dbms_output.put_line(dbms_lob.substr(v_sql,4000,1))//这是第84行!!!!!!!!!
执行即时v_sql;
例外情况
当其他人
DBMS_OUTPUT.Put_Line(DBMS_实用程序.Format_Error_Backtrace);
DBMS_OUTPUT.Put_行(SQLERRM);
结束;
/
创建或替换要保存的函数(LDR_子类型VARCHAR2,v_part_dynam OUT CLOB)
返回CLOB
是
开始
案例
当LDR_SUBTYPE=('IEC')时,则v_part_dynam:=v_part_dynam | |'子分区SP0值(IEC)';
ELSE v_part_dynam:=v_part_dynam | |‘子分区SP1值(其他)’;
终例;
返回v_零件_发电机;
在要保存的位置结束;
脚本在我看来不错,但每次尝试运行它时,都会出现以下错误:

ORA-06512:第84行

ORA-00922:缺少或无效选项

我已经搜索了很多,我发现关于修复此问题的唯一方法是“联系您的DBA”。 我的剧本怎么了?我怎样才能解决这个问题?
附言:我已经评论了第84行

无法创建或替换表,请尝试先删除它,或者构建一个pl,如果存在,则删除该表

'CREATE TABLE "'||v_table_name||'" (

创建或替换表

创建或替换视图-->是
但不能创建或替换表。此选项不存在。

去掉第84行正下方的
executeimmediate
。你还经历过这个错误吗?哇,你是个巫师哈哈。非常感谢,这两个错误都解决了。为什么是这一行导致了它?因为这一行
SET serveroutput ON
不是脚本的一部分,所以带有
execute immediate
的那一行是第84行,但它并没有解决问题,您的表并没有正确,我刚刚注意到。。。有什么解决办法吗?我以前创建过表。。。我不知道为什么现在不工作。请向我们展示您正在尝试创建的表结构。将其添加到您的帖子中