20090525 Oracle知识总结

今天学习了几个知识点:
1、关于Oracle用户下不能编译存储过程而报错的解决;
2、创建自定义函数索引时出现的问题;
3、关于清空buffer_cache的方法;
4、关于利用type进行一些转换。

 

1、默认情况下,如果没有编译权限,则授权:
grant debug any procedure to xxx;

2、创建自定义函数索引时出现:
ORA-30553: The function is not deterministic
问题的解决方法:
只需在创建该函数的时候加上deterministic参数即可。

3、清空buffer_cache的方法:
buffer_cache是Oracle存放前面select出来的数据的缓冲区,这样如果后面再次执行该语句的时候可以直接从这里获取。
但是要在测试单个SQL语句速度的时候,需要排除这种因素,所以需要清空buffer_cache来实现这样的环境。
Oracle10g里面可以直接通过执行:
alter system flush buffer_cache;
来实现。
在Oracle9i里,Oracle提供了一个内部事件,用以强制刷新Buffer Cache,其语法为:
alter system set events 'immediate trace name flush_cache level 1';
类似的也可以使用alter system系统级设置:
alter session set events = 'immediate trace name flush_cache';

 

4、实例:如何将一条记录的所有字段按照一个字段一行记录的方式显示出来。
create or replace type line2row is table of varchar2(4000);
/
create table lrtest(id number(18), name varchar2(255), sex varchar2(1), address varchar2(255), nationality varchar2(10));
insert into lrtest values(28, 'lyon', 'm', 'hangzhou', 'CHN');
commit;
/


SQL> select l.id, l.name, l.sex, l.address, l.nationality from lrtest l;

  ID NAME    SEX ADDRESS   NATIONALITY
---- ------- --- --------- -----------
  28 lyon    m   hangzhou  CHN

SQL> select * from table(select line2row(l.id, l.name, l.sex, l.address, l.nationality) from lrtest l);

COLUMN_VALUE
--------------------------------------------------------------------------------
28
lyon
m
hangzhou
CHN

请使用浏览器的分享功能分享到微信等