17,078
社区成员
发帖
与我相关
我的任务
分享
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;
[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>
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
一一得一
一二得二,二二得四
一三得三,二三得六,三三得九
一四得四,二四得八,三四十二,四四十六
一五得五,二五一十,三五十五,四五二十,五五二十五
一六得六,二六十二,三六十八,四六二十四,五六三十,六六三十六
一七得七,二七十四,三七二十一,四七二十八,五七三十五,六七四十二,七七四十九
一八得八,二八十六,三八二十四,四八三十二,五八四十,六八四十八,七八五十六,八八六十四
一九得九,二九十八,三九二十七,四九三十六,五九四十五,六九五十四,七九六十三,八九七十二,九九八十一