2006年09月27日

SQL/PL 筆記(新手級)

sql/pl的心得分享

剛寫pl,找了不少資料,看來並沒有select出來的table資料直接轉成一個array的函數
所以只好自已寫了

 
set serveroutput on; (如沒有打開的話,DBMS_OUTPUT.PUT_LINE 將不會出現在畫面上)

declare (宣告變數開頭的地方)
    db_total number;  (宣告一個記錄有多少array的記數器)
    TYPE db_type IS RECORD (宣告一個object的內容為何,是array裏的欄位)
        (t_table varchar2(65),
         t_sum number(38));
     
    TYPE db_type_array IS TABLE OF (宣告一個array object的內容是怎樣的格式)
         db_type INDEX BY BINARY_INTEGER;
     
    db_logical_reads_array db_type_array; (我為了方便使用,再多宣告一個object是跟db_type_array相同)
    
    db_logical_reads_type db_type; (我為了方便使用,再多宣告一個object是跟db_type相同)
begin  (本文開始)
    db_total := 1;
    FOR x IN (select object_name t_object,sum(value) t_sum from t_db_log where statistic_name='logical reads' and  to_char(t_time,'mm')='09'  group by object_name  order by sum(value) desc) LOOP  
        db_logical_reads_type.t_table := x.t_object;
        db_logical_reads_type.t_sum := x.t_sum;
        db_logical_reads_array(db_total) := db_logical_reads_type;
        db_total := db_total+1;
    END LOOP;
/*
 for x in select xxxxxx from xxxx loop
    xxxxxx
 loop
這是把select查出來的東西放入x的object中,"x"這個object名字可隨你取,但最好別取到oracle的保留字
我的處理羅輯
1、利用for loop的方法把select出來的資料存入x中
2、再分把所要的欄位一個一個取出來放入db_logical_reads_type中
3、然後把db_logical_reads_type放入db_logical_reads_array 的陣列中
4、設定一個陣列的計數器來加1
*/
    
    
    DBMS_OUTPUT.PUT_LINE(LPAD('table',10,' ')||LPAD('logical_reads_total',25,' ')||LPAD('table',10,' ')||LPAD('physical_reads_total',25,' ')||LPAD('table',10,' ')||LPAD('physical_writes_total',25,' ')) ;
/*
   DBMS_OUTPUT.PUT_LINE :印出訊習
   LPAD:就是最長多少個字,不足的位置補上指定的字元
   || : oracle中二字串相加
*/
    FOR i IN 1..db_logical_reads_array.count LOOP
        DBMS_OUTPUT.PUT_LINE('i:'||i||':'||db_logical_reads_array(i).t_table||':'||db_logical_reads_array(i).t_sum);           
    END LOOP;
/*
 驗證一下是否資料真的全進來了
  db_logical_reads_array.count : count是算總共有多少筆
*/
end; (本文結束)
/

附記一些有用的參數
set pagesize 0;每頁的行數,預設為24,如不要分頁的話就直接設0
set linesize 80;每行的字數長度
set numwidth 38;欄位為number 要顯示的長度為何,最大為38

spool text.out 把sql出來的結果輸出到檔案中
spool off 關畢把sql出來的結果輸出到檔案中的功能關畢

參考網址
http://www.linuxmine.com/2429.html
http://www.xker.com/Html/sjk/Oracle/2006_03_08_09_735.html
http://zhouwf0726.itpub.net/post/9689/189020
http://database.51cto.com/art/200512/15914.htm

如有人知道有較好的方法把table裏的資料轉成array的話,也請指點小弟一下
謝謝了

Posted by my_work at 樂多Roodo! │17:29 │回應(0)引用(0)DB
樂多分類:網路/3C 共同主題:Oracle 工具:編輯本文
Ads by Roodo! 

引用URL

http://cgi.blog.roodo.com/trackback/2201572