`
wushuangyan26
  • 浏览: 26526 次
  • 性别: 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查询。这一技术在处理复杂查询逻辑、灵活的数据筛选以及减少代码冗余等方面具有显著的优势。然而,...

    SQL拼接工具包API 支持Oracle/PostgreSQL/MySql

    简化sql拼接过程,提升开发效率,减少拼接错误。 可以拼接select、update、delete语句以及where条件语句。 拼接where条件可自动组织参数并返回。 支持andEq(), andGt(), andGe(),andLt(), andLe(), andEqDate(), ...

    MSSQL字段按照符号拼接显示

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

    ibatis动态sql拼接

    iBatis 动态 SQL 拼接 iBatis 框架中的动态 SQL 拼接是一种强大的功能,它允许开发者根据不同的条件生成不同的 SQL 语句,从而提高程序的灵活性和可维护性。在本文中,我们将深入分析 iBatis 框架中动态 SQL 的实现...

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

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

Global site tag (gtag.js) - Google Analytics