我使用java.util.StringTokenizer来简单解析java中的分隔字符串。我需要在pl / sql中使用相同类型的机制。我可以写它,但如果它已经存在,我宁愿使用它。有人知道pl / sql实现吗?一些有用的替代方案?
答案 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链接了解其他想法......
答案 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�
遗憾的是,我不了解Java的已检查异常,因此异常处理并不是很好(我不是Java开发人员)。