现在又如下两个表
表a                              表b
---------------------               ----------------------------
a1      a2                       b1
a3       a4                       b2如果想通过view做出以下的效果
------------------------------
a1    b1   b2    a2
a3     b1    b2     a4如果表b中有3条数据就是一下的效果
------------------------------
a1     b1    b2   b3     a2
a3     b1    b2 b3     a4也不知道看明白没~就是b表中多少条数据view的表就对应多少列~~~关键中怎么合并成一条数据不会做~~~希望大家帮我出谋划策~~~~谢谢大家

解决方案 »

  1.   

    据我所这,view达不到你想要的结果;
    楼主你的需求中,列的显示是动态的,一个可行的思路就是使用动态sql,而构建动态sql的方式就是遍历b表,这恐怕很难在一个select语句中实现。
      

  2.   


    create or replace procedure proc authid current_user is
      strsql varchar2(2000);
      strsql2 varchar2(4000) default '';
    begin
      for cur1 in (select * from a) loop
      strsql:='';
        for cur2 in (select * from b) loop
          strsql := strsql || ' ''' ||cur2.bb1 || ''' ' || cur2.bb1 || ', ';      
         
        end loop;
        strsql:='union all select '''||cur1.aa1||''''||cur1.aa1||','||strsql||''''||cur1.aa2||''' '||cur1.aa2||' from dual ';
       
        strsql2:=strsql2||strsql;
      end loop;
    /* strsql:=substr(strsql,11);  
     dbms_output.put_line(substr(strsql2, 11));*/
     execute immediate 'create or replace view myv as '||substr(strsql2, 11);
    end proc;最后得到的视图myv就是你要的答案。
      

  3.   

    vber1010 嘿嘿~可以簡單解釋下嗎?還有在plsql中運行沒有錯~但也沒看到任何視圖myv,這是怎麼回事~~~~~
      

  4.   

    把过程里的注释去掉,看看输出的文本就知道怎么回事了。在pl/sql develop执行一下过程,然后刷新一下视图,看看就有没有。或者直接  select * from myv; 就能看到结果了。
      

  5.   

    这就是去掉注释之后,输出的文本
    select 'a1' a1, 'b1' b1, 'b2' b2, 'b3' b3, 'a2' a2
      from dual
    union all
    select 'a3' a3, 'b1' b1, 'b2' b2, 'b3' b3, 'a4' a4 from dual

    这是过程里面用了俩个循环,来拼接sql语句。最后在用
    execute immediate 'create or replace view myv as '||substr(strsql2, 11); 生成视图。
      

  6.   


    還是不行~~~view裏面沒有myv這個view 我隨便寫了一個可以生成出來~~~~而且給的代碼~也沒有報錯誤~挺實困惑~~需求就是兩個表交叉出一個明細表
      

  7.   

    create or replace procedure proc authid current_user isbegin
     
     execute immediate 'create or replace view MyView 
                        as
                        select *
                            from  T_ROLEAPPLYTERMSMST  C';                   
    end proc;我已經簡化成這樣了~還是沒有 MyView這個  刷新也不可以
      

  8.   

    你是不是没有执行过程啊?
    begin
    proc;
    end;
    放在pl/sql develop 执行一下;
    或是在SQLPlus里 执行exec proc; 在查看有没有视图;
      

  9.   

    O(∩_∩)O~感謝大家的幫忙~~~問題“解決”了。
    最後有客戶決定~該到java里來處理~~~~~崩潰~~~
    討論對操作的的人不會給更新視圖的權限~~~哈哈~在此揭帖了~