可以再加个歌曲类型表,两列或三列,编号,名称,简称.
  
 例如:
  01   流行歌曲      POP
  02   说唱          RAP
  03   节奏布鲁斯    R&B
  04   摇滚          ROCK   其实摇滚还可以分的很细,例如:
    HEAVY METAL, PUNK, SPEED METAL,DEATH METAL, FUNK,等等.
  05   古典         CLASSICAL   
  06   乡村音乐     Country
  ....
  
   在winamp这个软件中你会得到更多更详细的歌曲分类. 
  加这个表的目的也是为了简化查询的需要。

解决方案 »

  1.   

    create function get_str(p_id in varchar2)
    return varchar2
    as
    str varchar2(50);
    cursor t_sor is
    select 歌手姓名 from 歌手例表 a,歌曲 b,歌手歌曲对应表 c where a.歌手编号=c.歌手编号 and b.歌曲编号=c.歌曲编号 and b.歌曲编号=p_id;
    num number:=0;
    begin
    for v_sor in t_sor loop
    if num=0 then
    str:=v_sor.歌手姓名;
    num:=num+1;
    else
    str:=str||','||v_sor.歌手姓名;
    end if;
    end loop;
    return str;
    end;
    /
    select b.歌曲名称,get_str(b.歌曲名称) 歌手姓名 from 歌手例表 a,歌曲 b,歌手歌曲对应表 c where a.歌手编号=c.歌手编号 and b.歌曲编号=c.歌曲编号 group by 歌曲名称