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 除非提升了用户权限,才可能自动提交事务,而且需要分别配置 Insert update delete 的自动提交
------其他解决方案--------------------哦。我在里面写commit了。原来我没写的时候是全部执行完才可以看到结果。我现在想在一个数据库中通过
EXECUTE IMMEDIATE 'truncate table dbuser.tb1;这个语句对另一个数据库表做删除操作。提示我权限不足。该怎么赋权限的
------其他解决方案--------------------grant delete any table to 用户
授予这个权限应该就可以了,你试试
------其他解决方案--------------------不行的。这个我用过了。因为在美没索引的情况下,用truncate table 效率高点。所以我就用trunate了。truncate table dbuser.tb1 不能直接写在存储过程里要用EXECUTE IMMEDIATE。但是权限又不够
------其他解决方案--------------------grant truncate any table to 用户
------其他解决方案--------------------这个样写不行
------其他解决方案--------------------grant drop any table to 用户