【发布时间】:2010-12-03 23:49:06
【问题描述】:
我使用 java.util.StringTokenizer 来简单解析 java 中的分隔字符串。我需要在 pl/sql 中使用相同类型的机制。我可以写它,但如果它已经存在,我更愿意使用它。有人知道 pl/sql 实现吗?一些有用的替代品?
【问题讨论】:
标签: sql oracle plsql tokenize stringtokenizer
我使用 java.util.StringTokenizer 来简单解析 java 中的分隔字符串。我需要在 pl/sql 中使用相同类型的机制。我可以写它,但如果它已经存在,我更愿意使用它。有人知道 pl/sql 实现吗?一些有用的替代品?
【问题讨论】:
标签: sql oracle plsql tokenize stringtokenizer
如果您安装了 APEX,则函数 APEX_UTIL.string_to_table 会执行此操作。
【讨论】:
PL/SQL 没有内置的分词器。但是,使用 SQL 或 PL/SQL 构建相对简单。 Adrian Billington 的网站has several solutions。此外,如果您使用的是 10g,则可以使用 this code from Tanel Poder,它使用正则表达式在 SQL 中执行此操作。
诚然,如果 Oracle 只是将 dang 工具作为其内置功能之一包含在内,那会更容易。
【讨论】:
另一种方法是编写 Java 存储过程(数据库中有一个 JVM),这意味着您可以使用 java.util.StringTokenizer。您必须将 Java 存储过程包装在 PL/SQL 过程/函数中。
这里举个例子:http://forums.oracle.com/forums/thread.jspa?messageID=2575374�
遗憾的是,我不了解 Java 的已检查异常,因此异常处理并不是很好(我不是 Java 开发人员)。
【讨论】:
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 链接以了解其他想法...
【讨论】: