dbms_utility的兩個有用方法

realkid4發表於2011-03-13

 

我們在編寫PL/SQL程式碼的時候,經常遇到一些常用程式碼功能,比如進行字串轉化、獲取當前CPU時間等等。這些程式碼如果自己編寫,不但消耗時間而且效率和正確性也得不到保證。

 

作為一門成熟的開發語言,PL/SQL也提供了很多工具包和方法庫。其中dbms_utility就是其中比較重要的一個。如同名稱所示,其中包括了很多常用的工具方法,熟悉這些方法會大大幫助我們進行Oracle開發。這次我們簡單介紹一下table_to_comma和comma_to_table兩個對照方法。

 

方法功能簽名介紹

 

我們經常要對字串進行變化操作,比如把一個用逗號“,”分割的字串拆分為陣列。或者把字元陣列組合為用逗號“,”分割的字串。dbms_utility包提供的這兩個方法就可以方便的實現該型別功能。

 

首先介紹一下兩個方法的簽名。

  //實現將陣列轉化為字串

  PROCEDURE table_to_comma( tab    IN  lname_array,

                            tablen OUT BINARY_INTEGER,

list   OUT VARCHAR2);

  //實現將字串轉化為陣列

  PROCEDURE comma_to_table( list   IN  VARCHAR2,

                            tablen OUT BINARY_INTEGER,

                            tab    OUT lname_array);

 

 

此處,使用了一個型別為lname_array的自定義型別,需要額外注意下。該型別使用的全名為dbms_utility.lname_array,定義為:

 

 

  type lname_array IS table of VARCHAR2(4000) index by BINARY_INTEGER;

  --  Lists of Long NAME should be stored here, it includes fully

  --  qualified attribute names.

 

 

lname_array為一個典型的字串陣列,用來儲存處理的陣列資料。lname_array是一個提升版本。在dbms_utility包中,還能夠看到版本型別uncl_array,作為相容版本。

 

程式碼示例

 

兩個包方法是用的方法很簡單,透過一個程式碼片段我們可以瞭解。

 

set serveroutput on size 10000;

 

declare  

   t_vararray dbms_utility.lname_array;

   vc_stringlist varchar2(4000);

   n_idx binary_integer;

begin

   --comma to table

   vc_stringlist := 'dkf,dddl,fewe,klkj';

  

   dbms_utility.comma_to_table(vc_stringlist,

                               n_idx,

                               t_vararray);

   dbms_output.put_line('Total Num : '||to_char(n_idx));

  

   for i in 1..n_idx loop

       dbms_output.put_line(t_vararray(i));      

       t_vararray(i) := '['||t_vararray(i)||']';

   end loop;

  

   --table to comma  

   dbms_utility.table_to_comma(t_vararray,

                               n_idx,

                               vc_stringlist);

   dbms_output.put_line('');

   dbms_output.put_line(''||vc_stringlist);                           

                              

end;

/

 

 

上述程式碼就實現了將字串每個逗號字元用方括號進行封裝的需要。執行結果為:

 

Total Num : 4

dkf

dddl

fewe

klkj

 

[dkf],[dddl],[fewe],[klkj]

 

PL/SQL procedure successfully completed

 

Executed in 0 seconds

 

 

 

瞭解一門語言是一個長期的過程,除了語句語法和語句特點,還要儘可能瞭解語言預設提供的一些方法包。利用好這些方法,可以大幅度提高我們的開發效率和質量。

 

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

相關文章