
正文
oracle存储过程commit,oracle存储过程和函数的区别
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
oracle删除一些表数据,然后释放表空间的存储过程
begin delete from bbb where。。
如果某些表占用了数据文件的最后一些块,则需要先将该表导出或移动到其他的表空间中,然后删除表,再进行收缩。不过如果是移动到其他的表空间,需要重建其索引。
db2的表 是存放在表空间里的,删除表就不会增加磁盘空间,而要要修改表空间,表空间又有一个或多个容器。如果你只是想增加磁盘空间,建议你还是想其他办法吧。
你是用drop命令删除的吗?drop命令是不回收表空间的,只是吧表对应的记录从数据字典中抹掉,也不会回收高水位。
你这多张表要有某种联系。比如说表名按照日期取名:这样可以按照这种规律将表名作为参数传入到存储过程中去。过程中有条件,循环语句来控制。你试试看。如果有问题请详细说明。
相关问答
Q1: Oracle存储过程,更新大量数据,如何循环分批次提交?
1、第一步,编写存储过程的整体结构,然后定义变量,见下图。其次,完成上述步骤后,在定义变量后定义游标,begin,select sysdate into v_date from dual,end test_proc,如下图所示。
2、如果有需要,可以在导出insert语句的时候分批次commit(提交)。
3、一,用游标打开,一行拼一个insert 语句,并计数;满100后提交 二,分页查询,每页100行 ,然后提交 我觉得:能一次提交的尽量不要分开提交,如果提交到一部分时候,出现问题了,提交的不能回滚了。增加了业务逻辑的复杂性。
4、有以下几个步骤。在表account中循环插入数据,id从1001到1005。createorreplaceproceduretestis--存储过程,名称为test。v_idint;--声明变量。begin。v_id:=1001;--ACCOUNT_ID从1001插到1005。
5、方法一:采用存储过程,使用循环,限制更新的条数,效率不是很高。方法二:建立和目标表一样的结构的临时表(基于事务的临时表,保证主键一样),使用视图更新的操作。
Q2: oracle中存储过程如何实现批量修改数据
可通过以下方法:以100条数据为例,如果海量数据可参考。如test表中有如下数据:现要将begintime改成当前时间,每10条提交一次。
方法一:采用存储过程,使用循环,限制更新的条数,效率不是很高。方法二:建立和目标表一样的结构的临时表(基于事务的临时表,保证主键一样),使用视图更新的操作。
可以通过update方法进行批量修改。sql:update table_name SET age=25;备注:也可以添加必要的条件,针对固定条件的数据进行批量修改。
直接用update语句替换即可。如test表中有如下数据:现要将sal中的数字都替换成10,用以下语句:update test set sal=10;commit;更新后结果:注意:执行update语句后,需要进行commit,也就是提交,这样才会使update生效。
。从视图all_tab_columns中查询待修改的表字段信息,拼装成标准语句。
Q3: oracle存储过程插入一条数据,运行之后,数据不能插入
这种情况属于插入数据后,没有提交(commit),导致表被锁,所以需要进行提交(commit)或者回滚(rollback)操作。如果当前session已关闭,可通过如下方法杀掉进程。
如果在插入后并且未提交的的情况下新开一个session查询的话,你是查不到刚插入的数据,这跟Oracle的隔离性有关,但是在当前session是能够查到的,在commit之后,其它session就能查到了(持久性)。
生日的话,你定义的是data类型,而你输入的却是字符型。你当然不能插入了。我以前做的类似的东西,也是碰到过类似问题。
这段代码应该是2部分 ,--上面是存储过程 --的下面是实行存储过程的语句,你这种写法类似于SQLSever的写法,在Oracle的有可能执行不下去。把这两段代码放在两个窗体里执行分开执行,就不会出错了。
如果运行之后无错误提示,就是insert成功了。你必须把所有查询的sql窗口关掉,再去看看有无数据。
关于oracle存储过程commit和oracle存储过程和函数的区别的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。






