如何用PL-SQL不换行输出内容.例如,我想输出9*9乘法表,2*1=2,2*2=4该怎么输出啊

解决方案 »

  1.   

    declare
    v_result varchar2(200);
    begin
    for i in 1..9 loop
      select wm_concat(rpad(i||'*'||rownum||'='||i*rownum,6))into v_result from dual connect by rownum<=i;
      dbms_output.put_line(v_result);
    end loop;
    end;
      

  2.   

    这是我很早之前写的了,直接复制过来了,有麻烦的地方望见谅。利用while 循环:set serveroutput on;
    declare 
        i int;
        j int;
    begin 
        i:=1;
        j:=1;
        while i < 10
            loop
            while j <= i
            loop
               dbms_output.put(i||'*'||j||'='); 
               if length(i*j) = 1 and j!=1 then 
                   dbms_output.put(' '); 
               end if;
               dbms_output.put(i*j||' ');
               j:=j+1;
            end loop;
            j:=1;
            i:=i+1;
            dbms_output.put_line(' '); 
        end loop; 
    end; 
    / ***********************************
    利用for循环:set serveroutput on; 
    declare 
    begin 
        for i in 1..9 loop 
            for j in 1 .. i loop 
                dbms_output.put(i); 
                dbms_output.put('*'); 
                dbms_output.put(j); 
                dbms_output.put('='); 
                if length(i*j) = 1 and j!=1 then 
                dbms_output.put(' '); 
                end if; 
                dbms_output.put(i*j); 
                dbms_output.put(' '); 
            end loop; 
            dbms_output.put_line(' '); 
        end loop; 
    end; 

    网址:
    http://zhidao.baidu.com/question/97687897.html
      

  3.   

    dbms_putline.put我上面也是这么用的,不过记住在最后加一个
    dbms_output.put_line(' ')  或者
    dbms_output.new_line;
    这样才能将记录打印到屏幕上dbms_output.put_line 相当于 先 dbms_output.put 再 dbms_output.new_line
      

  4.   

    有点兴致,写了个sqlselect a.rn,substr(max(sys_connect_by_path(a.rn||'*'||b.rn||'='||a.rn*b.rn,',')),2)
    from(select rownum rn from all_objects where rownum<=9)a,
      (select rownum rn from all_objects where rownum<=9)b
    where a.rn>=b.rn
    connect by prior a.rn=a.rn
      and prior b.rn=b.rn-1
    start with b.rn=1
    group by a.rn
    order by 1RN SUBSTR(MAX(SYS_CONNECT_BY_PATH
    1 1*1=1
    2 2*1=2,2*2=4
    3 3*1=3,3*2=6,3*3=9
    4 4*1=4,4*2=8,4*3=12,4*4=16
    5 5*1=5,5*2=10,5*3=15,5*4=20,5*5=25
    6 6*1=6,6*2=12,6*3=18,6*4=24,6*5=30,6*6=36
    7 7*1=7,7*2=14,7*3=21,7*4=28,7*5=35,7*6=42,7*7=49
    8 8*1=8,8*2=16,8*3=24,8*4=32,8*5=40,8*6=48,8*7=56,8*8=64
    9 9*1=9,9*2=18,9*3=27,9*4=36,9*5=45,9*6=54,9*7=63,9*8=72,9*9=81
    select a.rn,
      substr(max(sys_connect_by_path(
        case when a.rn*b.rn>=10 then 
          substr(translate(b.rn||'*'||a.rn||'='||a.rn*b.rn,'1234567890*=','一二三四五六七八九十'),1,
              case when mod(a.rn*b.rn,10)=0 or a.rn*b.rn>20 then 3 else 2 end)||'十'||
            translate(mod(a.rn*b.rn,10),'1234567890','一二三四五六七八九')
          else translate(b.rn||'*'||a.rn||'='||a.rn*b.rn,'123456789=*','一二三四五六七八九得')end
          ,',')),2)   口诀
    from(select rownum rn from all_objects where rownum<=9)a,
      (select rownum rn from all_objects where rownum<=9)b
    where a.rn>=b.rn
    connect by prior a.rn=a.rn
      and prior b.rn=b.rn-1
    start with b.rn=1
    group by a.rnRN 口诀
    1 一一得一
    6 一六得六,二六十二,三六十八,四六二十四,五六三十,六六三十六
    2 一二得二,二二得四
    4 一四得四,二四得八,三四十二,四四十六
    5 一五得五,二五一十,三五十五,四五二十,五五二十五
    8 一八得八,二八十六,三八二十四,四八三十二,五八四十,六八四十八,七八五十六,八八六十四
    3 一三得三,二三得六,三三得九
    7 一七得七,二七十四,三七二十一,四七二十八,五七三十五,六七四十二,七七四十九
    9 一九得九,二九十八,三九二十七,四九三十六,五九四十五,六九五十四,七九六十三,八九七十二,九九八十一
      

  5.   

    顺序没弄好select a.rn,
      substr(max(sys_connect_by_path(
        case when a.rn*b.rn>=10 then 
          substr(translate(b.rn||'*'||a.rn||'='||a.rn*b.rn,'1234567890*=','一二三四五六七八九十'),1,
              case when mod(a.rn*b.rn,10)=0 or a.rn*b.rn>20 then 3 else 2 end)||'十'||
            translate(mod(a.rn*b.rn,10),'1234567890','一二三四五六七八九')
          else translate(b.rn||'*'||a.rn||'='||a.rn*b.rn,'123456789=*','一二三四五六七八九得')end
          ,',')),2)   口诀
    from(select rownum rn from all_objects where rownum<=9)a,
      (select rownum rn from all_objects where rownum<=9)b
    where a.rn>=b.rn
    connect by prior a.rn=a.rn
      and prior b.rn=b.rn-1
    start with b.rn=1
    group by a.rn
    order by 1RN 口诀
    1 一一得一
    2 一二得二,二二得四
    3 一三得三,二三得六,三三得九
    4 一四得四,二四得八,三四十二,四四十六
    5 一五得五,二五一十,三五十五,四五二十,五五二十五
    6 一六得六,二六十二,三六十八,四六二十四,五六三十,六六三十六
    7 一七得七,二七十四,三七二十一,四七二十八,五七三十五,六七四十二,七七四十九
    8 一八得八,二八十六,三八二十四,四八三十二,五八四十,六八四十八,七八五十六,八八六十四
    9 一九得九,二九十八,三九二十七,四九三十六,五九四十五,六九五十四,七九六十三,八九七十二,九九八十一
      

  6.   

    select replace(substr(max(sys_connect_by_path(口诀,'#')),2),'#',chr(10)) from(
        select a.rn,
          substr(max(sys_connect_by_path(
            case when a.rn*b.rn>=10 then 
              substr(translate(b.rn||'*'||a.rn||'='||a.rn*b.rn,'1234567890*=','一二三四五六七八九十'),1,
                  case when mod(a.rn*b.rn,10)=0 or a.rn*b.rn>20 then 3 else 2 end)||'十'||
                translate(mod(a.rn*b.rn,10),'1234567890','一二三四五六七八九')
              else translate(b.rn||'*'||a.rn||'='||a.rn*b.rn,'123456789=*','一二三四五六七八九得')end
              ,',')),2)   口诀
        from(select rownum rn from all_objects where rownum<=9)a,
          (select rownum rn from all_objects where rownum<=9)b
        where a.rn>=b.rn
        connect by prior a.rn=a.rn
          and prior b.rn=b.rn-1
        start with b.rn=1
        group by a.rn)
    start with rn=1
    connect by prior rn=rn-1一一得一
    一二得二,二二得四
    一三得三,二三得六,三三得九
    一四得四,二四得八,三四十二,四四十六
    一五得五,二五一十,三五十五,四五二十,五五二十五
    一六得六,二六十二,三六十八,四六二十四,五六三十,六六三十六
    一七得七,二七十四,三七二十一,四七二十八,五七三十五,六七四十二,七七四十九
    一八得八,二八十六,三八二十四,四八三十二,五八四十,六八四十八,七八五十六,八八六十四
    一九得九,二九十八,三九二十七,四九三十六,五九四十五,六九五十四,七九六十三,八九七十二,九九八十一
      

  7.   

    ZNM,技巧太高了,新人不一定看的懂。
      

  8.   


    [SYS@ora10gr1#26-11月-09] SQL>col 顺 format 99
    [SYS@ora10gr1#26-11月-09] SQL>col 口诀 format a96
    [SYS@ora10gr1#26-11月-09] SQL>select rn 顺,translate(ans,'123456789#=0','一二三四五六七八九十得') as 口诀 from(
      2  select a.rn,substr(max(sys_connect_by_path(case when a.rn*b.rn >=10 then b.rn||a.rn||substr(a.rn*b.rn,1,1)||'#'||substr(a.rn*b.rn,2,1) else  b.rn||a.rn||'='||a.rn*b.rn end,','))
      3  from(select rownum rn from all_objects where rownum<=9)a,
      4    (select rownum rn from all_objects where rownum<=9)b
      5  where a.rn>=b.rn
      6  connect by prior a.rn=a.rn and
      7     prior b.rn=b.rn-1
      8  start with b.rn=1
      9  group by a.rn
     10  order by 1
     11  ); 顺 口诀
    --- ------------------------------------------------------------------------------------------------
      1 一一得一
      2 一二得二,二二得四
      3 一三得三,二三得六,三三得九
      4 一四得四,二四得八,三四一十二,四四一十六
      5 一五得五,二五一十,三五一十五,四五二十,五五二十五
      6 一六得六,二六一十二,三六一十八,四六二十四,五六三十,六六三十六
      7 一七得七,二七一十四,三七二十一,四七二十八,五七三十五,六七四十二,七七四十九
      8 一八得八,二八一十六,三八二十四,四八三十二,五八四十,六八四十八,七八五十六,八八六十四
      9 一九得九,二九一十八,三九二十七,四九三十六,五九四十五,六九五十四,七九六十三,八九七十二,九九八十一9 rows selected.[SYS@ora10gr1#26-11月-09] SQL>
    [SYS@ora10gr1#26-11月-09] SQL>select 顺,replace(replace(口诀,'一十','十'),'二五十','二五一十') 口诀 from(
      2  select rn 顺,translate(ans,'123456789#=0','一二三四五六七八九十得') as 口诀 from(
      3  select a.rn,substr(max(sys_connect_by_path(case when a.rn*b.rn >=10 then b.rn||a.rn||substr(a.rn*b.rn,1,1)||'#'||substr(a.rn*b.rn,2,1) else  b.rn||a.rn||'='||a.rn*b.rn end,','))
      4  from(select rownum rn from all_objects where rownum<=9)a,
      5    (select rownum rn from all_objects where rownum<=9)b
      6  where a.rn>=b.rn
      7  connect by prior a.rn=a.rn and
      8     prior b.rn=b.rn-1
      9  start with b.rn=1
     10  group by a.rn
     11  order by 1
     12  )); 顺 口诀
    --- ------------------------------------------------------------------------------------------------
      1 一一得一
      2 一二得二,二二得四
      3 一三得三,二三得六,三三得九
      4 一四得四,二四得八,三四十二,四四十六
      5 一五得五,二五一十,三五十五,四五二十,五五二十五
      6 一六得六,二六十二,三六十八,四六二十四,五六三十,六六三十六
      7 一七得七,二七十四,三七二十一,四七二十八,五七三十五,六七四十二,七七四十九
      8 一八得八,二八十六,三八二十四,四八三十二,五八四十,六八四十八,七八五十六,八八六十四
      9 一九得九,二九十八,三九二十七,四九三十六,五九四十五,六九五十四,七九六十三,八九七十二,九九八十一9 rows selected.[SYS@ora10gr1#26-11月-09] SQL>
      

  9.   

    小弟初学,不太懂,dual是什么表啊?
      

  10.   


    oracle不像SqlServer,sql语句中 from 是必须的,否则会报错。
    dual表是一个系统表,sys用户的表,表结构如下:
    [SYS@ora10gr1#28-11月-09] SQL>desc dual
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     DUMMY                                              VARCHAR2(1)只有一个字段,是建数据库的时候自动建好的,同时系统会给他建一个公有同义词以方便其他的用户访问。 具体用法如下:
    [SYS@ora10gr1#28-11月-09] SQL>select sysdate from dual;SYSDATE
    --------------
    28-11月-09因为dual中只有一条记录,因此只返回一个结果。
      

  11.   


    declare 
    v_result varchar2(200); 
    begin 
    for i in 1..9 loop 
      select wm_concat(rpad(i||'*'||rownum||'='||i*rownum,6))into v_result from dual connect by rownum <=i; 
      dbms_output.put_line(v_result); 
    end loop; 
    end;