zoukankan      html  css  js  c++  java
  • Oracle多行数据合并一行

     
    --Oracle多行数据合并一行.sql
    --1.
    CREATE TYPE NUMBER_LIST_T AS TABLE OF varchar2(50);     
    --2.   
    CREATE OR REPLACE FUNCTION CONCAT_LIST (
       lst IN number_list_t, separator varchar2
    )
    RETURN VARCHAR2 IS
    ret varchar2(2000);
    BEGIN
    FOR j IN 1..lst.LAST LOOP
    ret := ret || separator || lst(j);
    END LOOP;

    RETURN ret;
    END;
     
    --3.  
    CREATE OR REPLACE FUNCTION getUserRoles (
       userid in varchar2
    )
    RETURN VARCHAR2 IS
    rtl varchar2(2000);
    BEGIN
      SELECT Substr(CONCAT_LIST(LST, ','),2) into rtl from (
        SELECT
        CAST(MULTISET(
        SELECT trim(f_name) AS f_name FROM
           (select u.userid as f_id,r.rolename as f_name from base_role r, base_user_roles u where r.roleid=u.roleid) e
        WHERE e.f_id=m.f_id )
        AS number_list_t) LST
        FROM
           (select u.userid as f_id,r.rolename as f_name from base_role r, base_user_roles u where r.roleid=u.roleid) m
        where m.f_id = userid
        group by m.f_id
      );
      return(rtl);
    END;
    --select u.*, getUserRoles(u.userid) from base_user u

             

                成长

           /      |     \

        学习   总结   分享

    QQ交流群:122230156

  • 相关阅读:
    自动封箱和拆箱
    关于Java的一道内存的题目
    volatile关键字
    阶乘尾零
    Java之final的解析
    从1到n整数中1出现的次数
    最小安装雷达数量
    二叉树重建
    最短路径—Dijkstra算法
    PAT A1063——set的常见用法详解
  • 原文地址:https://www.cnblogs.com/benio/p/1944540.html
Copyright © 2011-2022 走看看