with t as
 (select 8 nm
    from dual
  union all
  select 4 from dual)
select replace(ltrim(max(SYS_CONNECT_BY_PATH('|', ',')), ','), ',', '')
  from (select nm, rownum rn from t) t1
connect by level <= nm
       and prior rn = rn
       and prior dbms_random.value is not null
 group by rn;

解决方案 »

  1.   

    你要单个sql还是存储过程或者function
      

  2.   

    还有个问题没有解决,请查看
    http://bbs.csdn.net/topics/390793418
      

  3.   

    这个很简单嘛
    select substr(rpad('|',nm+1,'|'),2) from table1
      

  4.   

    WITH a AS 
    (
    SELECT SUBSTR(RPAD(to_char(nm),nm+LENGTH(to_char(nm)),'|'),INSTR(RPAD(to_char(nm),nm+LENGTH(to_char(nm)),'|'),'|',1,1)) nn 
    FROM dual
    )
    SELECT nn FROM a测试了一下,对几位数的数字都适用,nm是数字
      

  5.   

    rpad , lpad 。当你的这人数字超过 20 时,你数的过来吗?
      

  6.   

    SELECT a.*,
           TRANSLATE (LPAD (deptno, deptno, '|'), '0123456789', '||||||||||')
    FROM emp a
      

  7.   

    create table EMP
    (
      ID   VARCHAR2(100),
      NAME VARCHAR2(100)
    )select lpad('|',id,'|') from emp