日期:2014-05-17  浏览次数:20772 次

oracal 任务 存储过程 需要commit或者rollback吗
我写了个存储过程,里面有insert、update、delete语句。做了个任务定时执行这个存储过程。过程如下:
create or replace procedure protest
is
begin
    update tb1 set a1='1';
    insert into tb2(b1) values('1');
    delete from  tb3;
end protest;
没在每个语句后面写commit,执行后会有效吗?
------最佳解决方案--------------------
看你的事务大小
太频繁的commit会影响性能!!
可以不写的
------其他解决方案--------------------
要写commit
------其他解决方案--------------------
最有效的办法,写完后测试一下就知道了呀。。。
我认为是要 COMMIT的
------其他解决方案--------------------
引用:
要写commit
我那么写看到数据有执行成功的。难道是假象。没写的话会怎么样
------其他解决方案--------------------
不写commit 除非提升了用户权限,才可能自动提交事务,而且需要分别配置 Insert update delete 的自动提交
------其他解决方案--------------------
哦。我在里面写commit了。原来我没写的时候是全部执行完才可以看到结果。我现在想在一个数据库中通过
EXECUTE   IMMEDIATE 'truncate table dbuser.tb1;这个语句对另一个数据库表做删除操作。提示我权限不足。该怎么赋权限的
------其他解决方案--------------------
grant delete any table to 用户
授予这个权限应该就可以了,你试试
------其他解决方案--------------------
引用:
grant delete any table to 用户
授予这个权限应该就可以了,你试试
不行的。这个我用过了。因为在美没索引的情况下,用truncate table 效率高点。所以我就用trunate了。truncate table dbuser.tb1 不能直接写在存储过程里要用EXECUTE   IMMEDIATE。但是权限又不够
------其他解决方案--------------------
grant truncate any table to 用户

------其他解决方案--------------------
引用:
grant truncate any table to 用户
这个样写不行
------其他解决方案--------------------
grant drop any table to 用户