1.5.1自动子程序内联
oracle 11g开始在plsql中使用pragma inline 编译器指令,可以使编译器内联子程序,如果plsql_optimize_level被
设置为2,则必须设置pragma inline。
--案例--
create or replace procedure inline_demo(a number,b,number) is
pragma inline(add_numbers,'YES’);
begin
for i in 1.10000 loop
dbms_output.put_line(add_numbers(2,1));
end loop;
end;
/
当然这里如果我们把plsql_optimize_level 设置成3那么数据库会自动内联函数。
这里oracle有一个建议,那就是在编译存储过程的时候然数据库引擎优化plsql存储过程。
1.5.2 continue语句
直接给个例子
begin
for i in 1..10 loop
if mod(i,2)=0 then
continue;
else
dbms_output.put_line('基数');
dbms_output.put_line(i);
end if;
end loop;
end;
/
1.5.3跨回话函数结果缓存
CREATE OR REPLACE FUNCTION F_RESULT_CACHE RETURN NUMBER RESULT_CACHE AS
V_RETURN NUMBER;
BEGIN
SELECT COUNT(*) INTO V_RETURN FROM T;
RETURN V_RETURN;
END;
/
对于采用了RESULT_CACHE的函数,Oracle自动将函数的返回结果缓存,下次执行的时候,不会实际执行函数,而是直接返回结果。
而且由于缓存的结果存储在SGA中,因此所有的会话可以共享这个结果。在上面的例子中,断开连接并重建登陆后,新的会话也是可以利用存储在SGA中的函数缓存的。
注意,函数的RESULT_CACHE功能自动和函数的输入参数关联,即使输入参数不起任何作用,不同的输入参数也会导致RESULT_CACHE不生效。
rrsult_cache clause
result_cache relies_on(table_name) 此字句对缓存的结果又限制,对引用表的任何改变都会使得函数无效,包括依赖于函数的任何函数,过程或试图。
1.5.11 simple_integer 数据类型
它是binary_integer的派生子类型,但有同样的值范围,不同是simple_integer不包含null值而且截断溢出,而且截断溢出不会引发错误,如果选择本地编译代码,那应该选择simple_integer类型,因为它为编译代码提供了重大的性能改进。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26509390/viewspace-1398471/
,如需转载,请注明出处,否则将追究法律责任。