`
wushuangyan26
  • 浏览: 26381 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

拼接查询sql中指定列的结果集

 
阅读更多

函数适用于:需要将指定查询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;

 

 

 

 

0
0
分享到:
评论
1 楼 yuhui136126 2011-12-11  
from dual union all select ''test2''  

相关推荐

    SQL查询结果进行拼接

    SQL查询结果拼接

    sql server拼接字符串和拼接一列的值

    sql server拼接字符串查询语句。 普通拼接字符串和拼接某一列的所有值。

    易语言动态拼接sql语句

    3. 查询结果处理:如果执行的是SELECT语句,可以使用“获取查询结果列数”、“获取查询结果行数”和“获取查询结果列名”等命令获取结果集信息,再用“读取查询结果列数据”等命令获取具体的数据。 4. 错误处理:...

    SQL Server 将某一列的值拼接成字符串.docx

    在SQL Server中,将某一列的值...总的来说,SQL Server提供了多种方式来实现列值的拼接,选择哪种方法取决于你的具体需求,如兼容性、性能以及结果的格式要求。理解并灵活运用这些技巧,能帮助你在处理数据时更加高效。

    MySQL查询把多列返回结果集拼装成一个字段

    mysql中有种可以通过join相关操作进行表与表之间的方式查询不同结果集,但是在一对多的情况下,关键查询的结果是多条的.例如:班级和学习的关系,我想很直观的看到班级和学生的情况,列表显示出班级的信息和班级的男生...

    SQL Server将一列的多行内容拼接成一行的实现方法

    昨天遇到一个SQL Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出在我想将一个表的一个列的多行内容拼接成一行,比如表中有两列数据 : 类别 名称 AAA 企业1 AAA 企业2 AAA 企业3 ...

    动态拼接sql语句工具类,拼接where后面语句

    动态拼接sql语句工具类,拼接where后面语句 配合原生jdbc仿动态sql注入 if (ObjectUtil.isNotEmpty(maxLat)&&ObjectUtil.isNotEmpty(minLat)){ sqlParamList.add(new SqlParam("lat",minLat, SqlOpEnum.GE)); ...

    sql拼接:不要拼接Sql,而要使用参数的好处

    ### SQL拼接与参数化查询的重要性 在软件开发过程中,特别是涉及到数据库操作的应用程序中,SQL语句的构造和执行是非常关键的一步。传统的做法往往采用字符串拼接的方式来构建SQL语句,例如: ```csharp string ...

    SQL语句拼接

    尽管使用`StringBuffer`拼接SQL语句是一种简单有效的方法,但它也存在一些潜在的安全隐患,尤其是在处理用户输入时。例如,如果用户提交恶意输入,可能会导致SQL注入攻击。为了避免这种情况的发生,建议采用以下措施...

    sql 多行合并某一列字符串拼接的示例

    在SQL中,将多行数据合并为一行,尤其是在某一列进行字符串拼接,是一项常见的需求。这通常用于汇总数据、创建报表或者为了分析目的而整合信息。本文将深入探讨如何利用SQL实现多行数据的合并,特别关注字符串拼接的...

    MyBatis动态拼接SQL

    在某些场景下,我们可能需要根据业务逻辑动态地拼接SQL语句,以实现更复杂的查询需求。这就是MyBatis动态SQL的功能所在。 动态SQL是MyBatis的一大特色,它使得我们能够在运行时根据条件构建SQL语句。MyBatis通过`...

    sql\(很长的l模糊查询拼接)sql存储过程

    标题中的“SQL(很长的L模糊查询拼接)”意味着该存储过程主要涉及的是通过字符串拼接的方式动态构建SQL查询语句,这里的“L”可能是指“Long”,即长字符串处理;而“模糊查询”则是指通过部分匹配的方式来检索数据...

    sql列数不固定查询语句

    ### SQL列数不固定的查询语句解析与应用 #### 核心知识点概述 在SQL查询中,有时会遇到数据表的列数不固定的情况,即数据表中的某些列可能存在或缺失,这通常发生在需要根据不同的条件对数据进行聚合或者分组的...

    Java 使用注解拼接SQL语句

    "Java使用注解拼接SQL语句"是一个常见的实践,它使得动态构建SQL查询变得更为简洁和可维护。这种技术通常与ORM(对象关系映射)框架如MyBatis或Hibernate结合使用,但也可以通过自定义处理逻辑实现。 1. **自定义...

    动态拼接sql语句.rar

    动态拼接SQL语句在IT行业中是一个常见的编程实践,尤其在数据库操作中,它允许根据程序运行时的条件或变量来构建SQL查询。这一技术在处理复杂查询逻辑、灵活的数据筛选以及减少代码冗余等方面具有显著的优势。然而,...

    SQL2JAVA-java字段串代码拼接小工具

    综上所述,"SQL2JAVA-java字段串代码拼接小工具"是一个针对Java和SQL开发者的实用工具,它可以帮助简化字符串拼接的过程,尤其是构建SQL查询语句。通过提供直观的用户界面,使得开发者能够快速高效地在Java代码和SQL...

    MSSQL字段按照符号拼接显示

    将sql查询的列按照指定的符号拼接显示!!! 将sql查询的列按照指定的符号拼接显示!!! 将sql查询的列按照指定的符号拼接显示!!! 将sql查询的列按照指定的符号拼接显示!!! 将sql查询的列按照指定的符号拼接显示!!! 将sql...

    JDBC中动态拼接SQL的工具类

    JDBC中动态拼接SQL的工具类。 对于使用纯SQL访问数据库的同学会有些帮助。 并具有一定的扩展性。

Global site tag (gtag.js) - Google Analytics