Oracle使用DBMS_SQL.Parse创建索引
我正在尝试创建如下索引:Oracle使用DBMS_SQL.Parse创建索引,oracle,indexing,oracle-sqldeveloper,oracle12c,Oracle,Indexing,Oracle Sqldeveloper,Oracle12c,我正在尝试创建如下索引: DECLARE l_cursor NUMBER; l_return NUMBER; v_stmt CLOB; BEGIN v_stmt:= TO_CLOB('CREATE INDEX IX_Job ON "JOBSTEP"("JOBID") TABLESPACE "USERS";'); l_cursor := DBMS_SQL.open_cursor; DBMS_SQL.parse(l_cursor, v_stmt, DBMS_SQL.NATIVE
DECLARE l_cursor NUMBER;
l_return NUMBER;
v_stmt CLOB;
BEGIN
v_stmt:= TO_CLOB('CREATE INDEX IX_Job ON "JOBSTEP"("JOBID") TABLESPACE "USERS";');
l_cursor := DBMS_SQL.open_cursor;
DBMS_SQL.parse(l_cursor, v_stmt, DBMS_SQL.NATIVE);
DBMS_SQL.CLOSE_CURSOR(l_cursor);
END;
请在执行时查找以下错误:
ORA-02158:创建索引选项无效
ORA-06512:在“SYS.DBMS_SQL”第1185行ORA-06512:在第7行
215800000-“创建索引选项无效”
*原因:COMPRESS、NOCOMPRESS、PCTFREE、INITRANS以外的选项,
MAXTRANS、存储、表空间、并行、非并行、可恢复、,
指定了不可恢复、日志记录、非日志记录、本地或全局。
*操作:选择一个有效的创建索引选项
如果我在“JOBSTEP”(“JOBID”)表空间“USERS”上执行createindex IX_作业代码>像这样的索引正在创建
使用Oracle12c,我使用SQLDeveloper尝试了所有这些。
请有人帮我解决这个问题。我的代码有什么问题吗 为什么不简单地使用executeimmediate v_stmt代码>?删除v_stmt
末尾的分号;不要以分号结束create index
语句-这是导致错误的原因。另外。无需使用to_CLOB()
函数。最后,完全不需要使用动态SQL。使用静态SQL。我不能使用它,因为我将在该语句中执行超过10万个字符,这在“EXECUTE IMMEDIATE”中是不可能的@NicholasKrasnov感谢它通过删除分号来工作。为什么不简单地使用EXECUTE IMMEDIATE v_stmt代码>?删除v_stmt
末尾的分号;不要以分号结束create index
语句-这是导致错误的原因。另外。无需使用to_CLOB()
函数。最后,完全不需要使用动态SQL。使用静态SQL。我不能使用它,因为我将在该语句中执行超过10万个字符,这在“EXECUTE IMMEDIATE”中是不可能的@NicholasKrasnov感谢它通过删除分号而起作用。