4

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

4

4 回答 4

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 - “IN 列表中的不同元素”

于 2009-10-06T10:53:21.723 回答
3

如果您安装了 APEX,该功能APEX_UTIL.string_to_table就是这样做的。

于 2009-10-05T15:34:56.367 回答
2

PL/SQL 没有内置的分词器。但是,使用 SQL 或 PL/SQL 构建相对简单。Adrian Billington 的网站有几种解决方案。此外,如果您使用的是 10g,则可以使用Tanel Poder 中的此代码,该代码使用正则表达式在 SQL 中执行此操作。

诚然,如果 Oracle 只是将 dang 工具作为其内置功能之一包含在内,那会更容易。

于 2009-10-05T15:37:30.850 回答
0

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

以此处为例: http://forums.oracle.com/forums/thread.jspa?messageID=2575374& #2575374

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

于 2009-10-05T18:26:21.083 回答