日期:2014-05-17  浏览次数:20826 次

本人新手。。求大神看看关于过滤分隔符提取字符串的问题,我用数组实现错误好多
题目是:
编写存储过程,实现功能:
1.输入参数:字符串,分隔符,序号
2.输出参数:字符串
3.注:序号可为负数,为负数时从右往左找字符串

例:
输入参数分别为: ab@@cd@@ee@@ff    @@   2    则输出:cd
输入参数分别为: ab@@cd@@ee@@ff    @@   -2   则输出:ee
输入参数分别为: ab@@cd@@ee@@ff    @@   4    则输出:ff

我写的代码如下 改了很多次


CREATE OR REPLACE PROCEDURE str_to(input     IN VARCHAR2,
                                   separator IN VARCHAR2,
                                   serialno  IN INTEGER) IS

  v_input       VARCHAR2(100) := input;
  v_separator   VARCHAR2(5) := separator;
  v_separatorno INTEGER;
  v_serialno    INTEGER := serialno;
  v_output      VARCHAR2(20);
  i             NUMBER;
  strlength     INTEGER;
  str           VARCHAR2(5);
  TYPE type_array IS VARRAY(200) OF VARCHAR2(20);
  array1 type_array;
  array2 type_array;
  flag   BOOLEAN;
  -- num    NUMBER;
  -- a      INTEGER;
BEGIN
  array1        := type_array();
  array2        := type_array();
  strlength     := length(v_input);
  v_separatorno := length(v_separator);
  flag          := FALSE;
  array2.extend;
  IF v_serialno < 0 THEN
    BEGIN
      v_serialno := -v_serialno;
      flag       := TRUE;
      SELECT REVERSE(v_input) INTO v_input FROM dual;
    END;