-- 字段存储 以某个字符(如:英文逗号)隔开的值,如何符合条件的记录呢?
Oracle 中 新增 表table_t中id字段存储
-------------
id
------------
1,2,8
1,8
1,3,4,8
--------------
如何查询出来id为1,8的记录呢?
CREATE OR REPLACE FUNCTION FUNC_FIND_IN_SET(piv_str1 varchar2, piv_str2 varchar2, p_sep varchar2 := ',')
RETURN NUMBER IS
l_idx number:=0; -- 用于计算piv_str2中分隔符的位置
str varchar2(500); -- 根据分隔符截取的子字符串
piv_str varchar2(500) := piv_str2; -- 将piv_str2赋值给piv_str
res number:=0; -- 返回结果
loopIndex number:=0;
BEGIN
-- 如果piv_str中没有分割符,直接判断piv_str1和piv_str是否相等,相等 res=1
IF instr(piv_str, p_sep, 1) = 0 THEN
IF piv_str = piv_str1 THEN
res:= 1;
END IF;
ELSE
-- 循环按分隔符截取piv_str
LOOP
l_idx := instr(piv_str,p_sep);
loopIndex:=loopIndex+1;
-- 当piv_str中还有分隔符时
IF l_idx > 0 THEN
-- 截取第一个分隔符前的字段str
str:= substr(piv_str,1,l_idx-1);
-- 判断 str 和piv_str1 是否相等,相等 res=1 并结束循环判断
IF str = piv_str1 THEN
res:= loopIndex;
EXIT;
END IF;
piv_str := substr(piv_str,l_idx+length(p_sep));
ELSE
-- 当截取后的piv_str 中不存在分割符时,判断piv_str和piv_str1是否相等,相等 res=1
IF piv_str = piv_str1 THEN
res:= loopIndex;
END IF;
-- 无论最后是否相等,都跳出循环
EXIT;
END IF;
END LOOP;
-- 结束循环
END IF;
-- 返回res
RETURN res;
END FUNC_FIND_IN_SET;
-- 函数的第三个参数是目标字段的分隔符,默认是英文逗号。如果使用的是别的分隔符的话,在使用函数时,需要传入相应的分隔符哦!
-- 使用函数样例
select t.* from TABLE_T t where FUNC_FIND_IN_SET('8', t.ids) > 0
select t.* from TABLE_T t where FUNC_FIND_IN_SET('1', t.ids) > 0 and FUNC_FIND_IN_SET('2', t.ids) > 0
相关推荐
为了在这些版本中实现类似的功能,需要自行创建一个用户定义的聚合函数。下面将详细介绍如何创建这样一个函数。 #### 知识点二:定义类型(string_sum_obj) 首先,需要定义一个类型`string_sum_obj`,用于存储中间...
至于查看数据库的字符编码集,MySQL的命令是`SHOW VARIABLES LIKE '%char%'`,它会列出所有与字符集相关的系统变量,如`character_set_database`和`collation_database`。 在Oracle数据库中,设置主键的过程与MySQL...
自定义函数允许开发人员创建自己的函数,以满足特定业务需求。 掌握这些Oracle函数不仅能够提高SQL查询的效率,还能使你在解决复杂问题时更加得心应手。记住,不必完全记住每个函数的细节,关键是在需要时能想起并...
在IT行业中,数据库管理系统(DBMS)如Oracle和MySQL在数据存储方面扮演着至关重要的角色。Oracle数据库系统支持多种复杂的数据类型,其中包括BLOB(Binary Large Object),用于存储非结构化的大数据,如图片、音频...
相比之下,Oracle没有内置的自动增长类型,需要创建序列(SEQUENCE)来实现类似功能,如`CREATE SEQUENCE 序列号名称 INCREMENT BY 1 START WITH 1 MAXVALUE 99999 CYCLE NOCACHE`,然后在INSERT语句中使用`序列号...
Oracle字符相似度函数是Oracle数据库系统提供的一种功能,用于评估两个字符串之间的相似性。这个功能在数据清洗、信息检索、文本分析等领域具有广泛的应用。在SQL查询中,我们可以直接使用这些函数来比较不同字符串...
### Oracle与MySQL的SQL语法区别 #### 一、概述 Oracle和MySQL作为两种常见的关系型数据库管理系统(RDBMS),在数据库领域占据着重要的地位。尽管它们都遵循SQL标准,但在实际应用中,两者之间存在诸多差异。这些...
orcle dblink 的创建与删除的详解及实例 易混淆术语介绍:Db_name,Db_domain,Global_name,Service_name 删除 Dblink 报错 ORA-02024: database link not found 的解决方法 .
RBAC_DIM_DAY.sql为日维度含数据,RBAC_DIM_MONTH为月维度含数据,RBAC_DIM_QUARTER为季维度含数据,RBAC_DIM_YEAR为年维度含数据和脚本文件时间维度表数据填充脚本时长2074年55年的使用寿命.txt>>
在本例中,我们使用`lower()`函数对`job`列的值进行转换后再创建索引,这样可以方便地进行不区分大小写的查询。 **1.4 查询当前用户的索引信息** - **实验目标**:学习如何查看已创建的索引信息。 - **实验步骤**...
在Oracle的设计与开发过程中,掌握其核心功能和常用函数、方法对于提高数据库管理效率至关重要。以下将详细介绍Oracle的一些关键知识点。 1. **SQL语言基础**:Oracle基于SQL,它是用于查询、插入、更新和删除数据...
根据提供的标题、描述以及部分内容,可以总结出一系列与Oracle数据库操作相关的知识点,特别是关于SQL*Plus中的函数创建及调用,以及过程的定义等。以下将详细解释这些内容。 ### ORACLE基本操作代码 #### SQL*...
- **功能**:创建一个名为`student`的新角色。 - **授权**:`GRANT SELECT ON class TO student;` - **功能**:向`student`角色授予对`class`表的SELECT权限。 **7. 查看用户下数据表:** - **当前用户**:`...
ab_ForceBinary in Boolean Default True --强制为二进制 ); Procedure p_GetClob( ac_Connection in out Nocopy Connection, as_RemoteFilename in VarChar2, ac_LocalClob in out Nocopy...
- **存储过程创建**:`CREATE OR REPLACE PROCEDURE`语句用于创建或替换名为`pro_test_ws`的存储过程。 - **参数定义**:该存储过程接受一个输入参数`name`和一个输出参数`resmark`。 - **变量声明**:定义了`...
这份“Oracle基本培训ppt文件”是为初学者设计的,旨在介绍Oracle的基本查询和函数使用,帮助新用户快速掌握数据库操作。 一、Oracle数据库概述 Oracle数据库系统由Oracle公司开发,提供高效的数据存储和管理能力,...
Oracle数据库是全球广泛使用的大型关系型数据库管理系统,以其强大的功能、高效的性能和高度的稳定性而闻名。本"详尽的ORACLE教程"旨在为初学者和有经验的开发者提供一个全面的学习平台,从基础概念到高级特性,...
实际的函数可能会更复杂,包括对各个部分的进一步效验。 标签"Oracle 自定义函数"强调了这个函数是在Oracle环境中实现的,这意味着它必须遵循Oracle的语法和规范,且可以被其他Oracle SQL查询或PL/SQL程序调用。 ...
游标提供了对查询结果集中数据的灵活控制,包括向前或向后移动、重复读取特定行以及更新或删除所选行。 #### 二、游标声明与使用 在Oracle PL/SQL中,游标的声明和使用遵循一定的语法结构: 1. **声明游标**: `...