下面这条语句写在存储过程里,执行完成,也没有报错,但是找不到索引 i_test.
execute immediate 'CREATE INDEX i_test ON table1 (col1||col2)';如果把sql拿出来,在sqlplus里执行就没有问题,可以找到创建的索引,请问问题出在哪里?
CREATE INDEX i_test ON table1 (col1||col2);

解决方案 »

  1.   


      1  begin
      2  execute immediate 'create index i_text on t(name)';
      3* end;
    SQL> /PL/SQL 过程已成功完成。SQL> select index_name from user_indexes where index_name='I_TEXT';INDEX_NAME
    ------------------------------
    I_TEXT
    怎么会没有那???记住:I_TEXT索引在表中查找的时候用大写,不要用i_text
      

  2.   

    SQL> create table test(col1 number, col2 number);Table createdSQL> 
    SQL> create or replace procedure testi as
      2  l_str varchar2(100);
      3  begin
      4  l_str := 'CREATE INDEX i_test ON test (col1||col2)' ;
      5  dbms_output.put_line(l_str);
      6  begin
      7  execute immediate l_str;
      8  exception when others then
      9  dbms_output.put_line('Wrong');
     10  end;
     11  end;
     12  /Procedure createdSQL> set serverout on;
    SQL> exec testi;CREATE INDEX i_test ON test (col1||col2)PL/SQL procedure successfully completedSQL> select index_name, table_name from user_indexes where table_name = 'TEST';INDEX_NAME                     TABLE_NAME
    ------------------------------ ------------------------------
    I_TEST                         TESTSQL> 没有问题啊
      

  3.   

    楼主真厚道解决问题了用户没有 create any table 权限么?