首页  ·  知识 ·  数据库
Oracle中连接输出结果
网友  IT专家网    编辑:德仔   图片来源:网络
下图是对一个视图(视图代码附后,全部操作是在Oracle 10g中的HR schema中完成的)进行查询得到的常见的结果。   &n
下图是对一个视图(视图代码附后,全部操作是在Oracle 10g中的HR schema中完成的)进行查询得到的常见的结果。
        department enamemarketing hartstein
  marketing fay
  purchasing raphaely
  purchasing khoo
  ...
  it hunold
  it ernst
  ...
 
  但是也可能遇到需要下面这样的结果。
        department enamepurchasing raphely,khoo,baida,tobias,himuro,colmenares
  it hunold,ernst,austin,pataballa,lorentz
  marketing hartstein,fay
  CREATEORREPLACEVIEWd_employeeAS
  SELECTd.department_name department,
  e.last_name ename
  FROMdepartments d,
  employees e
  WHEREd.department_id = e.department_idAND
  d.department_nameIN('IT','Marketing','Purchasing');
 
  为此,Tom大师提供了两种解决方案,如下:
  方法一:
  使用静态的SQL从表中选出需要进行连接的所有数据。
  
     CREATEORREPLACEFUNCTIONCONCAT(P_DEPINVARCHAR2)RETURNVARCHAR2IS
  L_STRVARCHAR2(200)DEFAULTNULL;
  L_SEPVARCHAR2(200)DEFAULTNULL;
  BEGIN
  FORRCIN(SELECTENAMEFROMD_EMPLOYEEWHEREDEPARTMENT = P_DEP)LOOP
  L_STR := L_STR || L_SEP || RC.ENAME;
  L_SEP :=',';
  ENDLOOP;
  RETURNL_STR;
  END;
 
使用下列查询语句查询:
         SELECTd.department, hr.concat(d.department) employeesFROMd_employee d
  GROUPBYdepartment;
 
  方法二:
  使用动态SQL,传入关键列(需求中的department)和那一列的一个值,以及需要实际进行连接的列(需求中的ename)以及表。
        CREATEORREPLACEFUNCTIONCONCAT2(P_KEY_NAME INVARCHAR2,
  P_KEY_VAL INVARCHAR2,
  P_OTHER_COL_NAMEINVARCHAR2,
  P_TNAME INVARCHAR2)
  RETURNVARCHAR2AS
  TYPERCISREFCURSOR;
  L_STRVARCHAR2(4000);
  L_SEPVARCHAR2(200);
  L_VALVARCHAR2(4000);
  L_CUR RC;
  BEGIN
  OPENL_CURFOR'select '|| P_OTHER_COL_NAME ||' from '|| P_TNAME ||' where '|| P_KEY_NAME ||' = :x '
  USINGP_KEY_VAL;
  LOOP
  FETCHL_CUR
  INTOL_VAL;
  EXITWHENL_CUR%NOTFOUND;
  L_STR := L_STR || L_SEP || L_VAL;
  L_SEP :=',';
  ENDLOOP;
  CLOSEL_CUR;
  RETURNL_STR;
  END;
 
  使用下列查询语句查询:
        SELECTd.department, concat2('department', d.department,'ename','d_employee')FROMd_employee d
  GROUPBYd.department;
 
   Tom大师还提到,如果你已经确切知道了需要连接显示的字段所包含的值的列表(比如,只包含A、T、L三个值),那么建议使用DECOD()方法
本文作者:网友 来源:IT专家网
CIO之家 www.ciozj.com 微信公众号:imciow
    >>频道首页  >>网站首页   纠错  >>投诉
版权声明:CIO之家尊重行业规范,每篇文章都注明有明确的作者和来源;CIO之家的原创文章,请转载时务必注明文章作者和来源;
延伸阅读
也许感兴趣的
我们推荐的
主题最新
看看其它的