SELECT msr$set_type.set_name
  FROM msr$set_type,
       meas_and_flow,
       work_flow_node,
       mng$user_role
 WHERE msr$set_type.set_id = meas_and_flow.meas_set_id
       AND meas_and_flow.work_flow_id = work_flow_node.work_flow_id
       AND work_flow_node.flow_numb=1
       AND exists ((select mng$user_role.role_id from mng$user_role where mng$user_role.user_id=1) kk in work_flow_node.oper_acto);
起个别名试一下

解决方案 »

  1.   

    create or replace type mytabletype as table of number;
    /create or replace function strtab(p_str in varchar2)
    return mytabletype
    as
    lstr varchar2(1000) default p_str||',';
    ln   number;
    ldata   mytabletype:=mytabletype();
    begin
    loop
      ln:=instr(lstr,',');
      exit when (nvl(ln,0)=0);
      ldata.extend;
      ldata(ldata.count):=ltrim(rtrim(substr(lstr,1,ln-1)));
      lstr:=substr(lstr,ln+1);
    end loop;
    return ldata;
    end;
    /SELECT msr$set_type.set_name
      FROM msr$set_type,
           meas_and_flow,
           work_flow_node
     WHERE msr$set_type.set_id = meas_and_flow.meas_set_id
           AND meas_and_flow.work_flow_id = work_flow_node.work_flow_id
           AND work_flow_node.flow_numb=1
           AND exists (select 1 from mng$user_role where mng$user_role.user_id in (select * from table(cast(strtab(work_flow_node.oper_acto) as mytabletype)))) ;