20090525 Oracle知識總結

regonly1發表於2009-05-26

今天學習了幾個知識點:
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

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12932950/viewspace-604119/,如需轉載,請註明出處,否則將追究法律責任。