PL / SQL是否具有与Java相当的StringTokenizer?

时间:2009-10-05 15:20:14

标签: sql oracle plsql tokenize stringtokenizer

我使用java.util.StringTokenizer来简单解析java中的分隔字符串。我需要在pl / sql中使用相同类型的机制。我可以写它,但如果它已经存在,我宁愿使用它。有人知道pl / sql实现吗?一些有用的替代方案?

4 个答案:

答案 0 :(得分:4)

PL / SQL确实包含逗号分隔列表的基本列表(DBMS_UTILITY.COMMA_TO_TABLE)。

示例:

DECLARE
   lv_tab_length   BINARY_INTEGER;
   lt_array   DBMS_UTILITY.lname_array;
BEGIN
   DBMS_UTILITY.COMMA_TO_TABLE( list => 'one,two,three,four'
                              , tablen => lv_tab_length
                              , tab => lt_array
                              );

   DBMS_OUTPUT.PUT_LINE( 'lv_tab_length = ['||lv_tab_length||']' );

   FOR i IN 1..lv_tab_length
   LOOP
      DBMS_OUTPUT.PUT_LINE( '['||lt_array( i )||']' );
   END LOOP;

END;
/

或者看看这个Ask Tom链接了解其他想法......

Ak Tom - "varying elements in IN list"

答案 1 :(得分:3)

如果你安装了APEX,那么函数APEX_UTIL.string_to_table就是这样做的。

答案 2 :(得分:2)

PL / SQL没有内置的tokenizer。但是,构建SQL或PL / SQL相对简单。 Adrian Billington的网站has several solutions。另外,如果您使用的是10g,则可以使用this code from Tanel Poder,它使用正则表达式在SQL中执行此操作。

不可否认,如果Oracle将dang工具作为其内置插件之一,那将会更容易。

答案 3 :(得分:0)

另一种方法是编写Java存储过程(数据库中有一个JVM),这意味着您可以使用java.util.StringTokenizer。您必须将Java存储过程包装在PL / SQL过程/函数中。

请点击此处查看示例:http://forums.oracle.com/forums/thread.jspa?messageID=2575374&#2575374

遗憾的是,我不了解Java的已检查异常,因此异常处理并不是很好(我不是Java开发人员)。