`

oracle分隔字符串,循环添加数据

阅读更多
CREATE OR REPLACE PROCEDURE SP_INS_ROLE(
                                        --添加角色
                                        V_ROLEID     TB_ROLE.ROLEID%TYPE,
                                        V_ROLENAME   TB_ROLE.ROLENAME%TYPE, --名称
                                        V_PARENTID   TB_ROLE.PARENTID%TYPE, --上级编号
                                        V_LEVELNUM   TB_ROLE.LEVELNUM%TYPE, --级别
                                        V_CREATEUSER TB_ROLE.CREATEUSER%TYPE, --创建人
                                        V_NOTE       TB_ROLE.NOTE%TYPE, --备注
                                        V_PERMISSION IN VARCHAR2, --菜单信息
                                        V_RESULT     OUT NUMBER) AS
  CURSOR V_PERMISSION_C IS
    SELECT * FROM TABLE(CAST(FN_SPLIT(V_PERMISSION, ',') AS TY_STR_SPLIT));
  V_CREATETIME VARCHAR2(20);
  V_COUNT      INT;
  V_ORDERNUM   INT;

BEGIN
  --获取时间
  V_CREATETIME := TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS');

  --校验名称是否重复
  SELECT COUNT(ROLEID)
    INTO V_COUNT
    FROM TB_ROLE
   WHERE ROLENAME = V_ROLENAME
     AND PARENTID = V_PARENTID;
  IF V_COUNT > 0 THEN
    V_RESULT := 1; --名称重复
    RETURN;
  END IF;
  --获取当前位置
  SELECT COUNT(ROLEID)
    INTO V_ORDERNUM
    FROM TB_ROLE
   WHERE PARENTID = V_PARENTID;
  --添加菜单信息
  INSERT INTO TB_ROLE
    (ROLEID,
     ROLENAME,
     STATUS,
     PARENTID,
     LEVELNUM,
     CREATETIME,
     CREATEUSER,
     NOTE,
     ORDERNUM)
  VALUES
    (V_ROLEID,
     V_ROLENAME,
     0,
     V_PARENTID,
     V_LEVELNUM,
     V_CREATETIME,
     V_CREATEUSER,
     V_NOTE,
     NVL(V_ORDERNUM, 0) + 1);

  --循环添加角色与权限关联
  FOR I IN V_PERMISSION_C LOOP
    --添加关联数据
    INSERT INTO TB_ROLE_PERMISSION
      (ID, PERID, ROLEID)
    VALUES
      (SYS_GUID(), I.COLUMN_VALUE, V_ROLEID);
  END LOOP;

  COMMIT;
  --添加成功
  V_RESULT := 0;
EXCEPTION
  WHEN OTHERS THEN
    --添加失败
    V_RESULT := -1;
    ROLLBACK;
END;





--分隔字符串的方法
CREATE OR REPLACE FUNCTION fn_split(p_str       IN VARCHAR2, --字符串
                                    p_delimiter IN VARCHAR2)

RETURN ty_str_split
  PIPELINED

IS

  j INT := 0;

  i INT := 1;

  len INT := 0;

  len1 INT := 0;

  str VARCHAR2(4000);

BEGIN

  len := LENGTH(p_str);

  len1 := LENGTH(p_delimiter);

  WHILE j < len
 
   LOOP
 
    j := INSTR(p_str, p_delimiter, i);
 
    IF j = 0
   
     THEN
   
      j := len;
   
      str := SUBSTR(p_str, i);
   
      PIPE ROW(str);
   
      IF i >= len
     
       THEN
     
        EXIT;
     
      END IF;
   
    ELSE
   
      str := SUBSTR(p_str, i, j - i);
   
      i := j + len1;
   
      PIPE ROW(str);
   
    END IF;
 
  END LOOP;

  RETURN;

END fn_split;




--创建一个table存储临时数据
CREATE OR REPLACE TYPE ty_str_split IS TABLE OF VARCHAR2 (4000)
分享到:
评论

相关推荐

    oracle分隔字符串函数

    ### Oracle 分隔字符串函数知识点详解 #### 一、Oracle 分隔字符串函数介绍 在 Oracle 数据库中处理字符串是一项常见的需求,特别是在数据清洗、格式转换等场景下。Oracle 提供了一系列强大的字符串处理函数来帮助...

    Oracle字段转字符串/多行记录合并/连接/聚合字符串的几种方法

    在Oracle数据库中,有时我们需要将多个字段值转换为单个字符串,或者将多行记录合并成一行,这在数据处理和报告生成时尤其常见。Oracle提供了多种方法来实现这一目标,包括使用内置函数、PL/SQL过程以及一些高级特性...

    如何实现Oracle中字符串分隔.pdf

    在Oracle数据库中,字符串处理是常见的操作之一,特别是在数据处理和分析中。本文将详细介绍如何在Oracle中实现字符串分隔,以及提供一个实用的面向对象的解决方案。 在Oracle中,字符串分隔通常涉及到将一个长字符...

    截取用,分割的字符串中的第n个字符串 SQL

    - `@split nvarchar(10)`:用于分隔字符串的字符或字符组合。 - `@index int`:指定要获取的子字符串的位置(索引)。 - **返回值**:`nvarchar(1024)`,表示按照指定分隔符分割后的第n个子字符串。 #### 2. **...

    一个oracle根据特定字符截取数据

    这篇博客“一个oracle根据特定字符截取数据”分享了一个实用的方法,适用于那些需要从字符串字段中提取部分信息的情况。通过SQL查询,我们可以高效地完成这项任务。 在Oracle SQL中,有多个内置函数可以帮助我们...

    plsql分割字符串

    2. **循环分割**:通过一个无限循环来持续分割字符串,直到无法找到分隔符为止。在每次循环中: - 使用`INSTR`函数查找从`LASTPOS+LEN`位置开始的下一个分隔符的位置。如果找到了分隔符,`POS`会被赋值为该位置;...

    oracle_split_函数_返回数组

    这个函数使用一个循环结构,通过`INSTR`找到分隔符的位置,然后切割字符串并将每个部分添加到`T_VARRAY`类型的变量`CSTR`中。 ```sql CREATE OR REPLACE TYPE LW.T_VARRAY IS TABLE OF VARCHAR2(200); CREATE OR ...

    plsql中的字符串分割.txt

    在PL/SQL编程环境中,处理字符串是一项非常常见的需求,特别是在数据处理、文本分析等领域。本文将详细介绍如何在PL/SQL中实现一个字符串分割的功能,并通过一个具体的示例来展示其实现过程。 ### 标题解释:...

    Oracle中实现Split函数功能

    Oracle 中实现 Split 函数功能的优点是可以灵活地处理不同的分隔符和字符串长度。同时,这个函数也可以与其他 Oracle 函数和操作符结合使用,以实现更加复杂的数据处理任务。 在实际应用中,Oracle 中实现 Split ...

    oracle split 函数

    在Oracle数据库中,处理字符串是一项常见的需求,尤其是在需要将包含特定分隔符的字符串分割成多个独立的部分时。Oracle标准SQL并没有提供直接用于字符串分割的内置函数,因此开发者通常会通过自定义函数的方式来...

    oracle split函数

    然而,在实际应用中,经常需要将一个包含多个值的字符串按照指定的分隔符进行拆分,转换为表格式的数据,以便进行进一步的处理或查询。为此,可以通过自定义函数的方式来实现这一功能。 本文将详细介绍两种在Oracle...

    Oracle多行记录字符串综合操作几种方法

    ### Oracle多行记录字符串综合操作几种方法 #### 引言 在Oracle数据库中,处理多行记录中的字符串是一项常见的需求,特别是在需要将多个值合并成一个字符串时。本文旨在介绍几种常用的多行记录字符串综合操作方法,...

    Oracle字段根据逗号分割查询数据的方法

    在Oracle数据库中,有时我们遇到一个特殊的查询需求,即字段中的值是以逗号分隔的字符串,我们需要根据每个单独的值来查询数据。在这种情况下,简单的`LIKE`查询无法满足需求,因为`LIKE`通常用于匹配模式,而不是...

    重写oracle wm_contact函数

    2. **迭代**: `ODCIAGGREGATEITERATE`方法负责将新的字符串值添加到当前已有的字符串中。如果当前字符串为空,则直接设置为新值;否则,在当前字符串后面加上逗号和新值。 3. **终止**: `ODCIAGGREGATETERMINATE`...

    oracle数据库的表数据导出为csv文件

    - 注意:这里的 `p_bom.v_str` 是假设每个记录被转换为字符串后的形式。 4. **插入下载记录**: - 向 `download_table` 表中插入一条记录,记录本次导出的信息。 - 包括执行用户、执行时间、简短描述以及文件名...

    sql带分隔符的截取字符串示例

    分隔符通常用于将单一字符串拆分为多个部分,例如在CSV(逗号分隔值)格式的数据中。以下是一个详细的SQL字符串截取教程,特别关注如何在遇到分隔符时进行操作。 首先,我们声明一个变量`@str`并赋值为包含分隔符...

    Sqlserver大数据量插入速度慢或丢失数据的解决方法

    1. **数据准备**:首先将待插入的数据组织成特定格式的字符串,每行数据用“;”分隔,每列数据用“|”分隔。 - 示例格式:`'111|222|333|456,7894,7458|0|1|2014-01-0112:15:16;1111|2222|3333|456,7894,7458|0|1|...

    Oracle,Split

    4. **`CONNECT BY LEVEL`子句**:允许我们生成一个递增序列,用于循环处理字符串中的每个字符或分隔符。 通过这些函数的组合使用,我们可以实现字符串的高效分割。 #### 三、SQL查询示例解析 下面是一段SQL代码...

    Oracle循环示例

    4. **日期格式化**:使用`TO_DATE()`函数将字符串转换为日期格式。这种处理对于涉及到日期比较的操作非常有用。 5. **输出结果**:`DBMS_OUTPUT.PUT_LINE()`是PL/SQL中的一个内置过程,用于向屏幕输出一行文本。这...

    oracle某个字段多行记录转化为一行

    - `cur`: 定义了一个游标`cur`,用于查询指定`case_number`的所有`find_problem`值(如果有NULL则用空字符串替代)。 - `cur_row`: 游标类型变量,用于存储每次循环中获取的行记录。 2. **逻辑处理**: - 初始化...

Global site tag (gtag.js) - Google Analytics