现代码如下declare
a1 number;
temp varchar2(120);
sixnum varchar2(120);
begin
sixnum:=' ';
temp:=' ';
while (length(sixnum)<14) loop
loop
--生成号码
a1:= floor( dbms_random.value(1,33));
if a1<10 and a1>0 then
temp:='0'||a1;
dbms_output.put_line(temp);
else
temp:=a1;
dbms_output.put_line(temp);
end if;
if instr(sixnum,temp,1,1)<=0 then --找不到
sixnum:=sixnum||temp;
exit;
end if ;
end loop;
end loop;
dbms_output.put_line(sixnum);
end;接着我想把生成的数字从大到小进行排序,请问如何排序?
a1 number;
temp varchar2(120);
sixnum varchar2(120);
begin
sixnum:=' ';
temp:=' ';
while (length(sixnum)<14) loop
loop
--生成号码
a1:= floor( dbms_random.value(1,33));
if a1<10 and a1>0 then
temp:='0'||a1;
dbms_output.put_line(temp);
else
temp:=a1;
dbms_output.put_line(temp);
end if;
if instr(sixnum,temp,1,1)<=0 then --找不到
sixnum:=sixnum||temp;
exit;
end if ;
end loop;
end loop;
dbms_output.put_line(sixnum);
end;接着我想把生成的数字从大到小进行排序,请问如何排序?
解决方案 »
- 求给位大侠指导:ORA-00918: column ambiguously defined
- SQL*LOADER的问题!急~~~~~~~~~~
- oracle stream不能同步多条数据改变?
- 急求救:这个过程为什么出错啊
- 【oracle数据库】【Oracle9i视频讲座】
- 关于指定限额的疑问??
- 请大家告诉我,在安装完ORACLE后,哪些帐号需要修改密码?如何修改密码?
- 有关oracle触发器的问题-----急,急!!!!!
- 如何在oracle下创建数据库别名
- 关于exp和imp的问题。
- 对oracle中dual表的个人理解
- an unsupported operation was attempted
a1 NUMBER;
temp VARCHAR2(120);
sixnum VARCHAR2(120);
i INTEGER;
j INTEGER;
-- 定义数组类型
TYPE ArrayType IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
-- 定义数组
arr ArrayType;
-- 定义起泡排序标志变量
flag INTEGER := 0;
-- 起泡排序的交换变量
t INTEGER;
BEGIN
sixnum:=' ';
temp:=' ';
i := 0;
WHILE (length(sixnum)<14) LOOP
LOOP
--生成号码
a1:= floor( dbms_random.value(1,33));
IF a1<10 AND a1>0 THEN
temp:='0'||a1;
dbms_output.put_line(temp);
ELSE
temp:=a1;
dbms_output.put_line(temp);
END IF;
IF instr(sixnum,temp,1,1)<=0 THEN --找不到
sixnum:=sixnum||temp;
arr(i) := temp;
i := i + 1;
EXIT;
END IF ;
END LOOP;
END LOOP;
dbms_output.put_line(sixnum);
-- 进行起泡排序
FOR i IN 0..arr.count - 1 LOOP
flag := 1;
FOR j IN 0..arr.count - i - 2 LOOP
IF arr(j) < arr(j + 1) THEN
flag := 0;
t := arr(j);
arr(j) := arr(j+1);
arr(j+1) := t;
END IF;
END LOOP;
IF flag = 1 THEN
EXIT;
END IF;
END LOOP;
DBMS_OUTPUT.PUT_LINE('排序后的结果');
FOR i IN 0..arr.count - 1 LOOP
DBMS_OUTPUT.PUT_LINE(arr(i) || ', ');
END LOOP;
END;
当然这里没有考虑PL/SQL库中提供了对数组进行排序的存储过程或存储函数。
如果有,则调用一下就好了。
2 /SQL> declare
2 --a1 number;
3 a1 a1_arr := a1_arr(0,0,0,0,0,0,0);
4 i number;
5 temp varchar2(120);
6 sixnum varchar2(120);
7 begin
8 sixnum:=' ';
9 temp:=' ';
10 i :=1 ;
11 while (length(sixnum)<21) loop
12 loop
13 --生成号码
14 a1(i):= floor( dbms_random.value(1,33));
15 if a1(i)<10 and a1(i)>0 then
16 temp:='*0'||a1(i);
17 dbms_output.put_line(temp);
18 else
19 temp:='*'||a1(i);
20 dbms_output.put_line(temp);
21 end if;
22
23 if instr(sixnum,temp,1,1)<=0 then --找不到
24 sixnum:=sixnum||temp;
25 exit;
26 end if ;
27 end loop;
28 i:=i+1 ;
29 end loop;
30 dbms_output.put_line(sixnum);
31 --数组排序
32 for i IN 1.. 7 LOOP
33 for j IN 1..6 LOOP
34 if a1(i) < a1(j) then
35 temp := a1(i);
36 a1(i) := a1(j);
37 a1(j) := temp ;
38 end if;
39 end loop;
40 END LOOP;
41 --输出
42 for i IN 1.. 7 LOOP
43 if a1(i)<10 and a1(i)>0 then
44 temp:='0'||a1(i);
45 dbms_output.put_line(temp);
46 else
47 temp:=a1(i);
48 dbms_output.put_line(temp);
49 end if;
50 END LOOP;
51 end;
52 /
*16
*27
*08
*15
*16
*03
*11
*32
*16*27*08*15*03*11*32
03
08
11
15
16
27
32PL/SQL procedure successfully completed.
for i IN 1.. 7 LOOP
if a1(i)<10 and a1(i)>0 then
temp:='0'||a1(i);
dbms_output.put(temp);
else
temp:=a1(i);
dbms_output.put(temp);
end if;
END LOOP;
dbms_output.new_line;
end;