怎么删除索引啊?高分相送!在线等候!

Albertleon 2003-12-12 11:35:05
请问各位高手们,我现在想在oracle数据库下操作一张表。先用pl/sql developer建立一个存储过程,然后我想在向一张空表中插入数据前(有三千多万条记录),先删除这张表的索引,最后,在插入操作完成后,再重新建立新的索引。但是不知道,在pl/sql developer中用什么语句来删除索引呢?
我用drop index pri_user_id_arrear;语句(pri_user_id_arrear是索引名),却告诉我错误,错误提示是:encountered the symbol 'drop' when expecting one of the following : begin case declare end exception exit for goto if loop mod null pragama raise return select update while with....
后面的还有,但太长了,在屏幕上无法显示,请问各位这到底是怎么回事啊!
上面那个drop语句我在sql窗口下可以执行,能够删除索引,但一到存储过程中,就有很多语句不支持了,就像truncate语句一样,在sql窗口能行,在procedure中就不行,只好改用delete语句了。但索引却不能用delete删除啊!还有创建语句create unique index,也是不能用!

请帮忙!一定给分!
...全文
1182 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
songyanxin 2003-12-12
  • 打赏
  • 举报
回复
那也不影响做成SHELL呀

我不了解业务,不过想法是:
1、先进入SQLPLUS,删除索引
2、用SQL*LOADER导入数据
3、进出SQLPLUS,创建索引

3000万数据,向用户争取一下用后台操作吧
shine333 2003-12-12
  • 打赏
  • 举报
回复
用动态语句:execute immediate 'drop index pri_user_id_arrear';
Albertleon 2003-12-12
  • 打赏
  • 举报
回复
应该不是权限的问题吧,我在pl/sql developer中按F8键连编译都通不过啊,现在最重要的是怎么通过编译,只要编译完成,存储过程会自动存储进数据库的。
Albertleon 2003-12-12
  • 打赏
  • 举报
回复
不是啦,我们是为别人做个系统,目标是自动完成数据的装载,也就是插入操作。但插入操作在没有索引的表中进行,明显快得多,所以我要先删除索引,插入完成后再建立索引。
qiansl 2003-12-12
  • 打赏
  • 举报
回复
用动态语句了吗,权限够吗
songyanxin 2003-12-12
  • 打赏
  • 举报
回复
我是不会了
换个思路,如果每天执行一次,能不能编个SHELL,每天执行就是了
Albertleon 2003-12-12
  • 打赏
  • 举报
回复
是每天都要做一次的,所以写成了存储过程。错误号是:PLS-00103
我不是在sql*plus上做的,我用的pl/sql developer。
存储过程的编译都没有通过,真是惨啊!
songyanxin 2003-12-12
  • 打赏
  • 举报
回复
一定要用PL/SQL吗?
如果是一次性操作,就没有必要了。

你在什么情况下导入3000万的数据?不能用SQL*LOADER吗?
lianhg 2003-12-12
  • 打赏
  • 举报
回复
执行使出的错还是编译时出错?
在SQLPLUS中执行,错误号 ORA--???
Albertleon 2003-12-12
  • 打赏
  • 举报
回复
谢谢,ok了,就是用动态语句!
原来:
存储过程中不能有Create table 等之类的DDL语句。有两种方法解决
1、先创建好临时表,在存储过程中直接使用(最好)
2、用动态SQL

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧