我们在编写PL/SQL代码的时候,经常遇到一些常用代码功能,比如进行字符串转化、获取当前CPU时间等等。这些代码如果自己编写,不但消耗时间而且效率和正确性也得不到保证。
作为一门成熟的开发语言,PL/SQL也提供了很多工具包和方法库。其中dbms_utility就是其中比较重要的一个。如同名称所示,其中包括了很多常用的工具方法,熟悉这些方法会大大帮助我们进行Oracle开发。这次我们简单介绍一下table_to_comma和comma_to_table两个对照方法。
方法功能签名介绍
我们经常要对字符串进行变化操作,比如把一个用逗号“,”分割的字符串拆分为数组。或者把字符数组组合为用逗号“,”分割的字符串。dbms_utility包提供的这两个方法就可以方便的实现该类型功能。
首先介绍一下两个方法的签名。
//实现将数组转化为字符串
PROCEDURE table_to_comma( tabINlname_array,
tablen OUT BINARY_INTEGER,
list OUT VARCHAR2);
//实现将字符串转化为数组
PROCEDURE comma_to_table( listINVARCHAR2,
tablen OUT BINARY_INTEGER,
tabOUT 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
了解一门语言是一个长期的过程,除了语句语法和语句特点,还要尽可能了解语言默认提供的一些方法包。利用好这些方法,可以大幅度提高我们的开发效率和质量。