Oracle FUNCTION与PROCEDURE的最大区别
Oracle FUNCTION与PROCEDURE的最大区别
Oracle function里面是可以允许有DML语句的,但是不能在查询的时候使用。
我们常用的function如:
select max(a) from table ;
这种调用方式是不能执行带有DML的FUNCTION的。
但是如果不用在SQL里面是可以有的
比如 dbms_output.put_line(func(...));
如果函数里面采用自治事务,是可以有DML 的。
什么是“自治事务”:
自治事务是可以在其他事务中调用的独立事务。
自治事务可以使事务离开调用事务的上下文执行SQL操作、提交或回滚其他操作并返回到调用事务的上下文然后继续调用事务。
自治事务调用后,事务完全与调用它的主事务独立。
不会看到任何主事务尚未提交的改变、不会共享主事务的锁或资源。自治事务的改变在自治事务提交后可以被其他事务可见。
自治事务可以调用其他自治事务,嵌套的层数没有限制。