函数适用于:需要将指定查询sql中的某列拼接成以指定字符分隔连接的字符串。
不足:因函数的返回值为varchar2,且通常拼接得到的字符串会用于查询sql(因用在SQL中,不能大于varchar2的4000个字符限制)中,因此限制了返回长度小于等于4000
CREATE OR REPLACE FUNCTION f_con_colunn_set(p_sql IN VARCHAR2,
--传入的sql语句
p_column_index INTEGER DEFAULT 1,
--需要连接的字段索引位置(从1开始,默认为1)
p_con_str IN VARCHAR2 DEFAULT ','
--连接时的分隔符,默认为逗号
) RETURN VARCHAR2 IS
/*适用于需要将sql语句的某列查询结果(大于一条记录)拼接成一个字段返回,
限制了返回长度小于等于4000(因用在SQL中,不能大于varchar2的4000个字符限制)
*/
v_value VARCHAR2(4000);
v_return VARCHAR2(8000) := '';
sqlstr_cursor INTEGER;
v_ignore INTEGER;
v_name INTEGER;
v_col_count INTEGER;
v_column_desc dbms_sql.desc_tab;
BEGIN
v_name := dbms_sql.open_cursor;
dbms_sql.parse(v_name, p_sql, dbms_sql.native);
dbms_sql.describe_columns(v_name, v_col_count, v_column_desc);
DBMS_SQL.close_cursor(v_name);
IF p_column_index > 0 AND p_column_index <= v_col_count THEN
sqlstr_cursor := DBMS_SQL.open_cursor;
DBMS_SQL.parse(sqlstr_cursor, p_sql, DBMS_SQL.native);
DBMS_SQL.define_column(sqlstr_cursor,
p_column_index,
v_column_desc(p_column_index).col_name,
4000);
v_ignore := DBMS_SQL.EXECUTE(sqlstr_cursor);
LOOP
IF DBMS_SQL.fetch_rows(sqlstr_cursor) > 0 THEN
DBMS_SQL.COLUMN_VALUE(sqlstr_cursor, p_column_index, v_value);
IF length(v_return || v_value) > 4000 THEN
EXIT;
ELSE
v_return := v_return || p_con_str || v_value;
END IF;
ELSE
EXIT;
END IF;
END LOOP;
v_return := substr(v_return, length(p_con_str) + 1, 4000);
DBMS_SQL.close_cursor(sqlstr_cursor);
END IF;
RETURN v_return;
EXCEPTION
WHEN OTHERS THEN
IF DBMS_SQL.is_open(v_name) THEN
DBMS_SQL.close_cursor(v_name);
END IF;
IF DBMS_SQL.is_open(sqlstr_cursor) THEN
DBMS_SQL.close_cursor(sqlstr_cursor);
END IF;
RETURN '';
END f_con_colunn_set;
--测试方法
--1)只传SQL,默认返回col1的以逗号分隔连接值:test1,test2
SELECT f_con_colunn_set('select ''test1'' col1,1 col2 from dual union all select ''test2'' col1,2 col2 from dual')
FROM dual;
--2)传SQL,传col2的索引值(从1开始),返回col2以逗号分隔的连接值: 1,2
SELECT f_con_colunn_set('select ''test1'' col1,1 col2 from dual union all select ''test2'' col1,2 col2 from dual',
2)
FROM dual;
--3)传SQL,传col2的索引值(从1开始),分隔值';',返回col2以分号号分隔的连接值1;2
SELECT f_con_colunn_set('select ''test1'' col1,1 col2 from dual union all select ''test2'' col1,2 col2 from dual',
2,
';')
FROM dual;
--4)传SQL,传索引值(从1开始)3,传入的索引值超过SQL的列索引集合,不存在此列,返回空值
SELECT f_con_colunn_set('select ''test1'' col1,1 col2 from dual union all select ''test2'' col1,2 col2 from dual',
3)
FROM dual;
分享到:
相关推荐
SQL查询结果拼接
sql server拼接字符串查询语句。 普通拼接字符串和拼接某一列的所有值。
3. 查询结果处理:如果执行的是SELECT语句,可以使用“获取查询结果列数”、“获取查询结果行数”和“获取查询结果列名”等命令获取结果集信息,再用“读取查询结果列数据”等命令获取具体的数据。 4. 错误处理:...
在SQL Server中,将某一列的值...总的来说,SQL Server提供了多种方式来实现列值的拼接,选择哪种方法取决于你的具体需求,如兼容性、性能以及结果的格式要求。理解并灵活运用这些技巧,能帮助你在处理数据时更加高效。
mysql中有种可以通过join相关操作进行表与表之间的方式查询不同结果集,但是在一对多的情况下,关键查询的结果是多条的.例如:班级和学习的关系,我想很直观的看到班级和学生的情况,列表显示出班级的信息和班级的男生...
昨天遇到一个SQL Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出在我想将一个表的一个列的多行内容拼接成一行,比如表中有两列数据 : 类别 名称 AAA 企业1 AAA 企业2 AAA 企业3 ...
动态拼接sql语句工具类,拼接where后面语句 配合原生jdbc仿动态sql注入 if (ObjectUtil.isNotEmpty(maxLat)&&ObjectUtil.isNotEmpty(minLat)){ sqlParamList.add(new SqlParam("lat",minLat, SqlOpEnum.GE)); ...
### SQL拼接与参数化查询的重要性 在软件开发过程中,特别是涉及到数据库操作的应用程序中,SQL语句的构造和执行是非常关键的一步。传统的做法往往采用字符串拼接的方式来构建SQL语句,例如: ```csharp string ...
尽管使用`StringBuffer`拼接SQL语句是一种简单有效的方法,但它也存在一些潜在的安全隐患,尤其是在处理用户输入时。例如,如果用户提交恶意输入,可能会导致SQL注入攻击。为了避免这种情况的发生,建议采用以下措施...
在SQL中,将多行数据合并为一行,尤其是在某一列进行字符串拼接,是一项常见的需求。这通常用于汇总数据、创建报表或者为了分析目的而整合信息。本文将深入探讨如何利用SQL实现多行数据的合并,特别关注字符串拼接的...
在某些场景下,我们可能需要根据业务逻辑动态地拼接SQL语句,以实现更复杂的查询需求。这就是MyBatis动态SQL的功能所在。 动态SQL是MyBatis的一大特色,它使得我们能够在运行时根据条件构建SQL语句。MyBatis通过`...
标题中的“SQL(很长的L模糊查询拼接)”意味着该存储过程主要涉及的是通过字符串拼接的方式动态构建SQL查询语句,这里的“L”可能是指“Long”,即长字符串处理;而“模糊查询”则是指通过部分匹配的方式来检索数据...
### SQL列数不固定的查询语句解析与应用 #### 核心知识点概述 在SQL查询中,有时会遇到数据表的列数不固定的情况,即数据表中的某些列可能存在或缺失,这通常发生在需要根据不同的条件对数据进行聚合或者分组的...
"Java使用注解拼接SQL语句"是一个常见的实践,它使得动态构建SQL查询变得更为简洁和可维护。这种技术通常与ORM(对象关系映射)框架如MyBatis或Hibernate结合使用,但也可以通过自定义处理逻辑实现。 1. **自定义...
动态拼接SQL语句在IT行业中是一个常见的编程实践,尤其在数据库操作中,它允许根据程序运行时的条件或变量来构建SQL查询。这一技术在处理复杂查询逻辑、灵活的数据筛选以及减少代码冗余等方面具有显著的优势。然而,...
综上所述,"SQL2JAVA-java字段串代码拼接小工具"是一个针对Java和SQL开发者的实用工具,它可以帮助简化字符串拼接的过程,尤其是构建SQL查询语句。通过提供直观的用户界面,使得开发者能够快速高效地在Java代码和SQL...
将sql查询的列按照指定的符号拼接显示!!! 将sql查询的列按照指定的符号拼接显示!!! 将sql查询的列按照指定的符号拼接显示!!! 将sql查询的列按照指定的符号拼接显示!!! 将sql查询的列按照指定的符号拼接显示!!! 将sql...
JDBC中动态拼接SQL的工具类。 对于使用纯SQL访问数据库的同学会有些帮助。 并具有一定的扩展性。