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提供了多种方法来实现这一目标,包括使用内置函数、PL/SQL过程以及一些高级特性...
在Oracle数据库中,字符串处理是常见的操作之一,特别是在数据处理和分析中。本文将详细介绍如何在Oracle中实现字符串分隔,以及提供一个实用的面向对象的解决方案。 在Oracle中,字符串分隔通常涉及到将一个长字符...
- `@split nvarchar(10)`:用于分隔字符串的字符或字符组合。 - `@index int`:指定要获取的子字符串的位置(索引)。 - **返回值**:`nvarchar(1024)`,表示按照指定分隔符分割后的第n个子字符串。 #### 2. **...
这篇博客“一个oracle根据特定字符截取数据”分享了一个实用的方法,适用于那些需要从字符串字段中提取部分信息的情况。通过SQL查询,我们可以高效地完成这项任务。 在Oracle SQL中,有多个内置函数可以帮助我们...
2. **循环分割**:通过一个无限循环来持续分割字符串,直到无法找到分隔符为止。在每次循环中: - 使用`INSTR`函数查找从`LASTPOS+LEN`位置开始的下一个分隔符的位置。如果找到了分隔符,`POS`会被赋值为该位置;...
这个函数使用一个循环结构,通过`INSTR`找到分隔符的位置,然后切割字符串并将每个部分添加到`T_VARRAY`类型的变量`CSTR`中。 ```sql CREATE OR REPLACE TYPE LW.T_VARRAY IS TABLE OF VARCHAR2(200); CREATE OR ...
在PL/SQL编程环境中,处理字符串是一项非常常见的需求,特别是在数据处理、文本分析等领域。本文将详细介绍如何在PL/SQL中实现一个字符串分割的功能,并通过一个具体的示例来展示其实现过程。 ### 标题解释:...
Oracle 中实现 Split 函数功能的优点是可以灵活地处理不同的分隔符和字符串长度。同时,这个函数也可以与其他 Oracle 函数和操作符结合使用,以实现更加复杂的数据处理任务。 在实际应用中,Oracle 中实现 Split ...
在Oracle数据库中,处理字符串是一项常见的需求,尤其是在需要将包含特定分隔符的字符串分割成多个独立的部分时。Oracle标准SQL并没有提供直接用于字符串分割的内置函数,因此开发者通常会通过自定义函数的方式来...
然而,在实际应用中,经常需要将一个包含多个值的字符串按照指定的分隔符进行拆分,转换为表格式的数据,以便进行进一步的处理或查询。为此,可以通过自定义函数的方式来实现这一功能。 本文将详细介绍两种在Oracle...
### Oracle多行记录字符串综合操作几种方法 #### 引言 在Oracle数据库中,处理多行记录中的字符串是一项常见的需求,特别是在需要将多个值合并成一个字符串时。本文旨在介绍几种常用的多行记录字符串综合操作方法,...
在Oracle数据库中,有时我们遇到一个特殊的查询需求,即字段中的值是以逗号分隔的字符串,我们需要根据每个单独的值来查询数据。在这种情况下,简单的`LIKE`查询无法满足需求,因为`LIKE`通常用于匹配模式,而不是...
2. **迭代**: `ODCIAGGREGATEITERATE`方法负责将新的字符串值添加到当前已有的字符串中。如果当前字符串为空,则直接设置为新值;否则,在当前字符串后面加上逗号和新值。 3. **终止**: `ODCIAGGREGATETERMINATE`...
- 注意:这里的 `p_bom.v_str` 是假设每个记录被转换为字符串后的形式。 4. **插入下载记录**: - 向 `download_table` 表中插入一条记录,记录本次导出的信息。 - 包括执行用户、执行时间、简短描述以及文件名...
分隔符通常用于将单一字符串拆分为多个部分,例如在CSV(逗号分隔值)格式的数据中。以下是一个详细的SQL字符串截取教程,特别关注如何在遇到分隔符时进行操作。 首先,我们声明一个变量`@str`并赋值为包含分隔符...
1. **数据准备**:首先将待插入的数据组织成特定格式的字符串,每行数据用“;”分隔,每列数据用“|”分隔。 - 示例格式:`'111|222|333|456,7894,7458|0|1|2014-01-0112:15:16;1111|2222|3333|456,7894,7458|0|1|...
4. **`CONNECT BY LEVEL`子句**:允许我们生成一个递增序列,用于循环处理字符串中的每个字符或分隔符。 通过这些函数的组合使用,我们可以实现字符串的高效分割。 #### 三、SQL查询示例解析 下面是一段SQL代码...
4. **日期格式化**:使用`TO_DATE()`函数将字符串转换为日期格式。这种处理对于涉及到日期比较的操作非常有用。 5. **输出结果**:`DBMS_OUTPUT.PUT_LINE()`是PL/SQL中的一个内置过程,用于向屏幕输出一行文本。这...
- `cur`: 定义了一个游标`cur`,用于查询指定`case_number`的所有`find_problem`值(如果有NULL则用空字符串替代)。 - `cur_row`: 游标类型变量,用于存储每次循环中获取的行记录。 2. **逻辑处理**: - 初始化...