【问题标题】:Does PL/SQL have an equivalent StringTokenizer to Java's?PL/SQL 是否有与 Java 等效的 StringTokenizer?
【发布时间】:2010-12-03 23:49:06
【问题描述】:

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

【问题讨论】:

    标签: sql oracle plsql tokenize stringtokenizer


    【解决方案1】:

    如果您安装了 APEX,则函数 APEX_UTIL.string_to_table 会执行此操作。

    【讨论】:

    • 如果您已将 11g APEX 作为标准安装,那么您将可以访问此功能。
    【解决方案2】:

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

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

    【讨论】:

    • 你在开玩笑吗?他们添加布尔支持花了多长时间?而且您仍然无法在表中存储布尔值。 >=(
    【解决方案3】:

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

    这里举个例子:http://forums.oracle.com/forums/thread.jspa?messageID=2575374&#2575374

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

    【讨论】:

      【解决方案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"

      【讨论】:

      • 这个特性有一个真正的障碍:DBMS_UTILITY.COMMA_TO_TABLE 只识别可能是合法的 Oracle 对象名称的标记。所以它的用处有些受限。
      猜你喜欢
      • 2011-01-16
      • 2011-12-11
      • 2011-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多